Javascript Nodejs应用程序结构
我想知道我是否在根据最佳性能构建我的nodejs应用程序。我主要关心的是如何在模块周围移动我的应用程序引用 基本上,在我的app.js文件中,我声明了我的所有需求、库等:Javascript Nodejs应用程序结构,javascript,node.js,express,restify,Javascript,Node.js,Express,Restify,我想知道我是否在根据最佳性能构建我的nodejs应用程序。我主要关心的是如何在模块周围移动我的应用程序引用 基本上,在我的app.js文件中,我声明了我的所有需求、库等: var app = { config : require('../../config.json'), restify : require('restify'), path : require('path'), mongo : require('mongodb'
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.server.pre(function (request, response, next) {
request.app = app;
return next();
});
因此,在每次请求中,如果我需要快速访问我的库声明、配置等,我可以轻松访问request.app。我也不认为这是一个问题,相同的逻辑对象充当指向相同内存空间的指针,所以我不会将内存使用率翻一番
是否有更好/更简单的方法来构造此结构?关于传递引用而不是复制对象,您是正确的。从这个角度来看,在传递对
应用程序的引用时,您并没有浪费额外的空间
但是,我建议您不要这样做:如果您到处传递对app
的引用,它告诉我的是,您并不真正知道在这个或那个模块中需要什么
您应该仔细规划您的依赖关系,并了解每个模块需要什么,以便您可以为应用程序中的每个模块传递正确的依赖关系
关于下划线
或mongodb
之类的事情,您不应该做您正在做的事情。您应该只传递需要初始化的模块。对于下划线
或mongodb
,node.js会在您第一次require()
定义时缓存该定义,因此您可以在需要它的每个模块的顶部调用require
这不会导致任何性能损失,而且会使每个模块所需的库更加清晰。Hmmmm,这也有助于使我的案例干涸,并使维护变得更加容易。好吧,我明白你的意思了。在这方面,如果我确实从应用程序中删除了我的库,您认为我是否仍然应该使用诸如server.pre()之类的东西来传递我的应用程序,或者再次使用require方法?我认为您应该尽可能使用require
。这不仅可以明确每个模块需要什么,而且还可以使您的模块解耦,便于将来在其他地方使用。当有太多的东西相互依赖时,不仅很难调试,而且很难重用代码。另外,请记住,require()
缓存加载的模块,如果需要在不同的文件中重用相同的下划线
。因此,只要您需要,随时使用都是安全的。