Require perf optimization
Created by: ghost
Checklist
-
make -j4 test
(UNIX), orvcbuild test
(Windows) passes -
tests and/or benchmarks are included -
documentation is changed or added -
commit message follows commit guidelines
Aim to solve:
Optimize the performance of require one file in a module multiple times
How
Cache a map of the requests and filenames in the parent module
Example
"use strict";
console.time(1);
for(var i = 0; i < 100000; i++){
require('./require.cpu.empty.js');
}
console.timeEnd(1);
var Module = module.constructor;
var _resolveFilename = Module._resolveFilename
Module._resolveFilename = function(request, parent, isMain, options) {
var res;
// performance optimize here
if(parent.resolveFilenameCache){
if(parent.resolveFilenameCache[request]){
return parent.resolveFilenameCache[request]
}
}else{
parent.resolveFilenameCache = {};
}
res = _resolveFilename(request, parent, isMain, options);
parent.resolveFilenameCache[request] = res;
return res;
}
console.time('2');
for(var i = 0; i < 100000; i++){
require('./require.cpu.empty.js');
}
console.timeEnd('2');
// result in node V8
1: 1178.783ms
2: 10.344ms
Profile
Let me know and I'll append some tests or benchmarks if you think it's worth a try.