IT虾米网

javascript之Nodejs应用程序结构

hnrainll 2023年12月27日 编程语言 136 0

我想知道我是否正在相应地构建我的 nodejs 应用程序以实现最佳性能。我主要关心的是我如何围绕模块移动我的应用程序引用。

基本上在我的 app.js 文件中,我声明了我所有的需求、库等:

var app = { 
    config     : require('../../config.json'), 
    restify    : require('restify'), 
    path       : require('path'), 
    mongo      : require('mongodb'), 
    model      : require('./models.js'), 
    step       : require('step'), 
    q          : require('q'), 
    api        : require('./api_util.js'), 
    underscore : require('underscore') 
}; 

在我的导出中,我传递了整个应用程序对象。现在,根据我对 JavaScript 的了解(如果我错了,您可以纠正我),这不会创建对象的新实例,它只会将对象作为指针传入并引用内存中的同一对象。

现在我发现我自己做的除此之外(为了方便)是在我的 restify 库中(同样可以用 Express 完成),我将 app 值附加到服务器请求对象,如下所示:

app.server.pre(function (request, response, next) { 
    request.app = app; 
    return next(); 
}); 

因此,如果我需要快速访问我的任何库声明、配置等,我可以根据每个请求轻松访问 request.app。我也不认为这是一个问题,相同的逻辑对象充当返回相同内存空间的指针,所以我不会加倍内存使用或任何事情。

有没有更好/更简单的方法来构建它?

请您参考如下方法:

关于传递引用而不是复制对象,你是正确的。从这个 Angular 来看,在将引用传递给您的 app 时,您并没有浪费额外的空间。

但是,我建议您不要这样做:如果您到处传递对 app 的引用,它告诉我的是您并不真正知道在这个或那个中需要什么模块。

您应该仔细规划您的依赖项并了解每个模块需要什么,以便您可以为应用中的每个模块传递正确的依赖项。

关于像 underscoremongodb 这样的事情,你不应该做你正在做的事情。您应该只传递需要初始化的模块。对于 underscoremongodb 之类的东西,node.js 会在您第一次 require() 时缓存定义,因此您可以真正调用 require 在每个需要它的模块的顶部。

这不会产生任何性能损失,并且会更清楚每个模块需要什么库。


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!