5

我想知道我是否正在相应地构建我的 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')
};

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

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

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

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

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

4

1 回答 1

6

您对传递引用而不是复制对象是正确的。从这个角度来看,在传递对app.

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

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

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

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

于 2012-05-29T01:43:19.440 回答