【问题标题】:Using 'require' inside Node js to gain better performance在 Node js 中使用“require”以获得更好的性能
【发布时间】:2016-02-02 21:44:47
【问题描述】:

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

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)

【问题讨论】:

    标签: node.js performance v8 koa


    【解决方案1】:

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

    不太坏的消息是require() 缓存了结果,所以它只会在第一次命中路由时被命中,但大多数服务器设计者宁愿在服务器启动时花一点时间,并且根本不在任何路由处理程序或中间件中使用同步 I/O。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2011-11-29
        • 2021-02-05
        • 1970-01-01
        • 1970-01-01
        • 2016-08-13
        • 1970-01-01
        • 2022-10-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多