2013-11-20 34 views
1

我有幾個自定義模塊,每秒調用數百次,我想確保調用這些模塊沒有性能影響。加載模塊時節點js性能

示例模塊 - 隨機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; 
}; 

如果我打電話從另一個該模塊(即要求(__目錄名稱+「/random-string.js」))和它被稱爲數百每秒的時間,這是做一個讀取磁盤每次加載logs.js或node-uuid?

回答

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; 
}; 
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; 
};