mirror of
https://github.com/nodejs/node-v0.x-archive.git
synced 2026-04-28 03:01:10 -04:00
This path adds an additional cache to the module system for caching the location of previously required modules. Since it is embedded in the loop that iterates over all require.paths, this patch also handles the case where require.paths is being modified. The patch also cleans up some code around it. See: https://groups.google.com/forum/#!topic/nodejs-dev/QGGlrvLDHVs
50 lines
1.1 KiB
JavaScript
50 lines
1.1 KiB
JavaScript
// We've experienced a regression where the module loader stats a bunch of
|
|
// directories on require() even if it's been called before. The require()
|
|
// should caching the request.
|
|
var common = require('../common');
|
|
var fs = require('fs');
|
|
var assert = require('assert');
|
|
|
|
var counter = 0;
|
|
|
|
// Switch out the two stat implementations so that they increase a counter
|
|
// each time they are called.
|
|
|
|
var _statSync = fs.statSync;
|
|
var _stat = fs.stat;
|
|
|
|
fs.statSync = function() {
|
|
counter++;
|
|
return _statSync.apply(this, arguments);
|
|
};
|
|
|
|
fs.stat = function() {
|
|
counter++;
|
|
return _stat.apply(this, arguments);
|
|
};
|
|
|
|
// Load the module 'a' and 'http' once. It should become cached.
|
|
require.paths.push(common.fixturesDir);
|
|
require('a');
|
|
require('http');
|
|
|
|
console.log("counterBefore = %d", counter);
|
|
var counterBefore = counter;
|
|
|
|
// Now load the module a bunch of times.
|
|
// stat should not be called.
|
|
for (var i = 0; i < 100; i++) {
|
|
require('a');
|
|
}
|
|
|
|
// Do the same with a built-in module
|
|
for (var i = 0; i < 100; i++) {
|
|
require('http');
|
|
}
|
|
|
|
console.log("counterAfter = %d", counter);
|
|
var counterAfter = counter;
|
|
|
|
assert.equal(counterBefore, counterAfter);
|
|
|