加载模块时节点js的性能

我有几个自定义模块,每秒调用数百次,我想确保调用这些模块没有性能影响。

示例模块 – random-string.js

module.exports = function() { // Required modules var logs = require(__dirname + '/logs.js'); // Custom logger var uuid = require('node-uuid'); // Simple, fast generation of RFC4122 UUIDS var randomString = uuid.v1() + uuid.v4(); logs.dev(randomString); return randomString; }; 

如果我从另一个模块(即。require(__ dirname +'/random-string.js'))调用这个模块,并且每秒钟被调用几百次,那么这是每次读取磁盘到加载logs.js节点UUID?

不,由require加载的模块是由节点caching的(所以每次都不会去磁盘),但是在每个函数调用中加载模块仍然没有什么好的理由:调用require和lookup仍然有一些开销caching的模块对象。

为什么不加载模块顶部的依赖关系?

 var logs = require(__dirname + '/logs.js'); // Custom logger var uuid = require('node-uuid'); // Simple, fast generation of RFC4122 UUIDS module.exports = function() { var randomString = uuid.v1() + uuid.v4(); logs.dev(randomString); return randomString; }; 

不可以。模块返回值被caching和重用。

尽pipe构build代码的更好的方法是:

 var logs = require(__dirname + '/logs.js'); // Custom logger var uuid = require('node-uuid'); // Simple, fast generation of RFC4122 UUIDS module.exports = function() { var randomString = uuid.v1() + uuid.v4(); logs.dev(randomString); return randomString; }; 

Node.jscaching模块,以便只在第一次请求时加载它们。 有关详细信息,请参阅http://nodejs.org/api/modules.html#modules_caching