我有几个自定义模块,我每秒呼叫数百次,我想确保调用这些模块不会对性能产生影响。
示例模块 - 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'))并且每秒调用数百次,那么这是一次读取到磁盘每次加载日志.js或node-uuid?
答案 0 :(得分:5)
不,由require
加载的模块由节点缓存(因此它不会每次都进入磁盘),但是仍然没有充分的理由在每个函数调用上加载模块:仍然有一些与调用require
并查找缓存的模块对象相关联的开销。
为什么不在模块顶部加载依赖项?
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;
};
答案 1 :(得分:2)
没有。模块返回值被缓存并重用。
虽然构建代码的更好方法是:
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;
};
答案 2 :(得分:2)
Node.js缓存模块,以便它们仅在第一次请求时加载。有关详细信息,请参阅http://nodejs.org/api/modules.html#modules_caching。