Nodejs应用程序结构
我想知道是否我正在构build我的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的知识(如果我错了,可以纠正我),这不会创build对象的新实例,它只是将对象作为指针传入并引用内存中的同一个对象。
现在我发现自己在这方面做的(放松)是在我的restify库中(同样可以用Express来完成),我将app值附加到服务器请求对象,如下所示:
app.server.pre(function (request, response, next) { request.app = app; return next(); });
因此,如果我需要快速访问我的任何库声明,configuration等每一个请求,我可以很容易地访问request.app。 我也没有看到这是一个问题,同样的逻辑对象作用指针回到同一个内存空间,所以我没有加倍的内存使用量或任何东西。
有没有更好/更简单的方法来构build这个?
对于传递的引用而不是被复制的对象,你是正确的。 从这个angular度来看,在传递对app
引用时,不会浪费额外的空间。
但是,我build议你不要这样做:如果你在任何地方都传递给app
的参考,它告诉我的是,你不知道你在这个或那个模块中需要什么。
您应该仔细计划您的依赖关系,并知道每个模块将需要什么,以便您可以传递应用程序中每个模块的正确依赖关系。
关于underscore
或mongodb
这样的事情,你不应该做你正在做的事情。 你应该只传递需要初始化的模块。 对于像underscore
或者mongodb
这样的东西,node.js在你第一次require()
时候caching这个定义,所以你可以在需要它的每个模块的顶部调用require
。
这不会导致任何性能损失,并且会使每个模块所需的库变得更加清晰。