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

时间:2016-02-02 21:44:47

标签: node.js performance v8 koa

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

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)

2 个答案:

答案 0 :(得分:4)

在路由处理程序或中间件处理程序中使用require()并不是一个好主意。那是因为require()使用同步I / O而你不想在任何路由处理程序中使用同步I / O.

不是那么糟糕的消息是require()缓存了结果,所以它只会在路由第一次被击中时被击中,但是大多数服务器设计者宁愿在服务器上花一点时间在任何路由处理程序或中间件中都没有使用同步I / O.

因此,有一个原因,通用方法是常用方法,模块通常在服务器启动时加载。据推测,这是一个长期运行的服务器进程,因此从长远来看,如果不加载模块,就不会真正保存任何东西。如果有人使用它,它迟早会被加载。

答案 1 :(得分:2)

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

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