2013-11-20 3 views
1

초당 수백 번 호출하는 사용자 정의 모듈이 여러 개 있으며이 모듈을 호출 할 때 성능에 영향을 미치지 않도록하고 싶습니다.모듈로드시 노드 js 성능

예 MODULE - 랜덤 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; 
}; 

나는 서로이 모듈 호출하고있는 경우 (. 즉이 필요합니다 (__이 dirname +) '/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; 
};