将连接对象传递给模块或在模块本身内连接是否更好?

时间:2013-11-20 20:36:18

标签: javascript performance node.js

var redis = require('redis');
var http = require('http');
var myModule = require('./my_module');
var server = http.createServer(function (req, res) {
  myModule.something_that_uses_redis(req, redis, function(data) {
    res.end(data);
  });
});

最好在模块外部定义redis并在需要时传递它,还是最好在myModule内的某处定义它?将它作为一个参数传递会导致某种不必要的压力,还是两种方法都相同?

有关于此的最佳做法吗?

我正在重写一个意外收到大量请求的API,而我正试图了解哪些类型的内容会导致不必要的处理。

2 个答案:

答案 0 :(得分:1)

我认为如果您正在创建一个说redis客户端的实例,那么您最好共享实例,而不是每次都创建一个新实例。否则,您每次都有创建新连接的开销。

在您的示例中,您只需要该模块,并且因为这是在第一次要求时缓存的,如果您在myModule中只需要一次并通过引用传递,或者每个模块需要单独使用它,则没什么区别。

对于这个具体的例子,根据过去的经验,我在一个单独的模块中创建一个redis客户端,将访问该客户端的所有逻辑放在该模块的函数中,并从myModule调用这些函数。那就是你的数据库逻辑与应用程序有一定程度的脱钩。这样,如果数据库发生变化,您只需更改模块中访问Redis的功能,而不是更改许多不同文件中的代码。

答案 1 :(得分:1)

如果my_module是使用Redis的唯一模块,那么设置和处理连接本身对我来说更有意义。

如果有多个模块需要访问Redis,我可能会为其创建一个单独的模块,其他模块可以require