2016-02-02 45 views
1

我在我的控制器中使用了大量的依賴關係。它是一個很好的建議,使用類似下面略微提高性能:(即延遲加載控制器)使用節點js中的'require'獲得更好的性能

app.use(route.get('/test', function(){ 
    c = require('./testcontroller') 
    c.method(); 
})); 
app.use(route.get('/test2', function(){ 
    c2 = require('./testcontroller2') 
    c2.method(); 
})); 

而不是常見的方法:

c = require('./testcontroller') 
c2 = require('./testcontroller2') 
//all other controllers 

app.use(route.get('/test', c.method) 
app.use(route.get('/test2', c2.method) 

回答

4

在路由處理程序中或在中間件處理程序中使用require()並不是一個好主意。這是因爲require()使用同步I/O,並且您不想在任何路由處理程序中使用同步I/O。

不是什麼壞消息,require()緩存結果,所以它只會在路由第一次被擊中時觸發,但大多數服務器設計者寧願在服務器啓動時花費更長的時間,而不是在任何路由處理程序或中間件中都可以使用同步I/O。

因此,常見方法是通用方法,模塊通常在服務器啓動時加載是有原因的。據推測,這是一個長時間運行的服務器進程,所以你不會通過加載模塊來長期保存任何東西。如果有人使用它,它遲早會被裝入。

2

在我看來,傳統的方式是更好 - 您可能需要多餘的東西(可能不需要,因爲最終會使用任何控制器),但另一方面,應用程序重新啓動時將需要。

在我看來,運行時的性能比快速加載更重要,在運行時需要第一個建議。

相關問題