mirror of
https://github.com/nodejs/node.git
synced 2025-05-16 00:11:20 +00:00

Reduce the number of stat() system calls that require() makes by caching the results more aggressively. To avoid unbounded growth without implementing a LRU cache, scope the cache to the lifetime of the first call to require(). Recursive calls (i.e. require() calls in the included code) transparently profit from the cache. The benchmarked application is the loopback-sample-app[0] and it sees the number of stat calls at start-up go down by 40%, from 4736 to 2810. [0] https://github.com/strongloop/loopback-sample-app PR-URL: https://github.com/nodejs/node/pull/4575 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
47 lines
1.1 KiB
JavaScript
47 lines
1.1 KiB
JavaScript
'use strict';
|
|
|
|
exports = module.exports = { makeRequireFunction, stripBOM };
|
|
|
|
exports.requireDepth = 0;
|
|
|
|
// Invoke with makeRequireFunction.call(module) where |module| is the
|
|
// Module object to use as the context for the require() function.
|
|
function makeRequireFunction() {
|
|
const Module = this.constructor;
|
|
const self = this;
|
|
|
|
function require(path) {
|
|
try {
|
|
exports.requireDepth += 1;
|
|
return self.require(path);
|
|
} finally {
|
|
exports.requireDepth -= 1;
|
|
}
|
|
}
|
|
|
|
require.resolve = function(request) {
|
|
return Module._resolveFilename(request, self);
|
|
};
|
|
|
|
require.main = process.mainModule;
|
|
|
|
// Enable support to add extra extension types.
|
|
require.extensions = Module._extensions;
|
|
|
|
require.cache = Module._cache;
|
|
|
|
return require;
|
|
}
|
|
|
|
/**
|
|
* Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)
|
|
* because the buffer-to-string conversion in `fs.readFileSync()`
|
|
* translates it to FEFF, the UTF-16 BOM.
|
|
*/
|
|
function stripBOM(content) {
|
|
if (content.charCodeAt(0) === 0xFEFF) {
|
|
content = content.slice(1);
|
|
}
|
|
return content;
|
|
}
|