Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuben Bridgewater <ruben@bridgewater.de>2019-03-29 00:31:43 +0300
committerBeth Griggs <Bethany.Griggs@uk.ibm.com>2019-04-10 17:30:30 +0300
commit4c7a2f187c40a5f4c5493395f054a781d5ab436d (patch)
tree0cac2d996d4514d629b915bd7315f09488f25643
parentc62b1a26c96815d2ec205d5e6906bd3b21ccf007 (diff)
benchmark: improve module-loader benchmark
Add more benchmark options to properly verify the gains. This makes sure the benchmark also tests requiring the same module again instead of only loading each module only once. PR-URL: https://github.com/nodejs/node/pull/26970 Refs: https://github.com/nodejs/node/pull/25362 Reviewed-By: Guy Bedford <guybedford@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Signed-off-by: Beth Griggs <Bethany.Griggs@uk.ibm.com>
-rw-r--r--benchmark/module/module-loader.js60
1 files changed, 28 insertions, 32 deletions
diff --git a/benchmark/module/module-loader.js b/benchmark/module/module-loader.js
index e780d6376b5..3b8e9be2d60 100644
--- a/benchmark/module/module-loader.js
+++ b/benchmark/module/module-loader.js
@@ -1,21 +1,27 @@
'use strict';
const fs = require('fs');
const path = require('path');
+const { builtinModules } = require('module');
const common = require('../common.js');
const tmpdir = require('../../test/common/tmpdir');
-const benchmarkDirectory = path.join(tmpdir.path, 'nodejs-benchmark-module');
+let benchmarkDirectory = path.join(tmpdir.path, 'nodejs-benchmark-module');
+
+// Filter all irregular modules.
+const otherModules = builtinModules.filter((name) => !/\/|^_|^sys/.test(name));
const bench = common.createBenchmark(main, {
- n: [5e4],
- fullPath: ['true', 'false'],
- useCache: ['true', 'false']
+ name: ['', '/', '/index.js'],
+ dir: ['rel', 'abs'],
+ files: [5e2],
+ n: [1, 1e3],
+ cache: ['true', 'false']
});
-function main({ n, fullPath, useCache }) {
+function main({ n, name, cache, files, dir }) {
tmpdir.refresh();
- try { fs.mkdirSync(benchmarkDirectory); } catch {}
- for (var i = 0; i <= n; i++) {
+ fs.mkdirSync(benchmarkDirectory);
+ for (var i = 0; i <= files; i++) {
fs.mkdirSync(`${benchmarkDirectory}${i}`);
fs.writeFileSync(
`${benchmarkDirectory}${i}/package.json`,
@@ -27,38 +33,28 @@ function main({ n, fullPath, useCache }) {
);
}
- if (fullPath === 'true')
- measureFull(n, useCache === 'true');
- else
- measureDir(n, useCache === 'true');
+ if (dir === 'rel')
+ benchmarkDirectory = path.relative(__dirname, benchmarkDirectory);
- tmpdir.refresh();
-}
+ measureDir(n, cache === 'true', files, name);
-function measureFull(n, useCache) {
- var i;
- if (useCache) {
- for (i = 0; i <= n; i++) {
- require(`${benchmarkDirectory}${i}/index.js`);
- }
- }
- bench.start();
- for (i = 0; i <= n; i++) {
- require(`${benchmarkDirectory}${i}/index.js`);
- }
- bench.end(n);
+ tmpdir.refresh();
}
-function measureDir(n, useCache) {
+function measureDir(n, cache, files, name) {
var i;
- if (useCache) {
- for (i = 0; i <= n; i++) {
- require(`${benchmarkDirectory}${i}`);
+ if (cache) {
+ for (i = 0; i <= files; i++) {
+ require(`${benchmarkDirectory}${i}${name}`);
}
}
bench.start();
- for (i = 0; i <= n; i++) {
- require(`${benchmarkDirectory}${i}`);
+ for (i = 0; i <= files; i++) {
+ for (var j = 0; j < n; j++)
+ require(`${benchmarkDirectory}${i}${name}`);
+ // Pretend mixed input (otherwise the results are less representative due to
+ // highly specialized code).
+ require(otherModules[i % otherModules.length]);
}
- bench.end(n);
+ bench.end(n * files);
}