pil*_*guy 5 javascript node.js express restify
我想知道我是否正在构建我的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')
};
Run Code Online (Sandbox Code Playgroud)
在我的导出中,我传递了整个app对象.现在,鉴于我对JavaScript的了解(如果我错了,你可以纠正我),这不会创建对象的新实例,它只是将对象作为指针传入并在内存中引用相同的对象.
现在我发现自己除此之外(为了方便)在我的restify库中(可以用Express完成),我将app值附加到服务器请求对象,如下所示:
app.server.pre(function (request, response, next) {
request.app = app;
return next();
});
Run Code Online (Sandbox Code Playgroud)
因此,对于每一个请求,如果我需要快速访问我的任何库声明,配置等,我可以轻松访问request.app.我也不认为这是一个问题,同样的逻辑,对象作为一个指针返回到相同的内存空间,所以我不会加倍内存使用或任何东西.
是否有更好/更简单的方法来构建它?
传递引用而不是复制对象是正确的.从这个角度来看,在传递对你的引用时,你不会浪费额外的空间app.
但是,我建议你不要这样做:如果你app在任何地方传递一个引用,它告诉我的是你真的不知道在这个或那个模块中你需要什么.
您应该仔细规划您的依赖项并了解每个模块将需要什么,以便您可以为应用程序中的每个模块传递正确的依赖项.
关于underscore或者mongodb,你不应该做你正在做的事情.您应该只传递需要初始化的模块.对于类似underscoreor的东西mongodb,node.js会在第一次缓存定义时require(),因此您可以真正调用require需要它的每个模块的顶部.
这不会导致任何性能损失,并且它将使每个模块所需的库更清晰.
| 归档时间: |
|
| 查看次数: |
1313 次 |
| 最近记录: |