在Node js中使用'require'来获得更好的性能

我在我的控制器中使用了很多依赖项。 这是一个很好的build议,使用下面的东西略微提高性能:(即延迟加载控制器)

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) 

在路由处理程序中或在中间件处理程序中使用require()并不是一个好主意。 这是因为require()使用同步I / O,并且不希望在任何路由处理程序中使用同步I / O。

非常不好的消息是require()caching结果,所以在第一次路由被击中的时候它只会是一个命中,但是大多数服务器devise者宁愿在服务器启动时花费一点点时间,而不是使用同步I / O在任何路由处理程序或中间件。

所以,常见的方法是通用的方法,通常在服务器启动时加载模块是有原因的。 据推测,这是一个长时间运行的服务器进程,所以你不会长期保存任何东西,不加载模块。 如果有人使用它,它迟早会被装入。

在我看来,传统的方式更好 – 你可能需要多余的东西(可能不会,因为最终会使用任何控制器),但另一方面,应用程序重新启动时将需要。

在我看来,运行时的性能比快速加载更重要,在运行时需要第一个build议。