summaryrefslogtreecommitdiff
path: root/benchmark
diff options
context:
space:
mode:
authorRuben Bridgewater <ruben@bridgewater.de>2019-03-28 22:31:43 +0100
committerRuben Bridgewater <ruben@bridgewater.de>2019-04-04 13:03:26 +0200
commitae9fae813e54661b3bb3fdf5a076151db54c5ac7 (patch)
tree8c9e3bbe709b68cc264e089b6c8125f36200c860 /benchmark
parenta8b69d453f9b7f62cfe54cd9aa8373b871006d3f (diff)
downloadandroid-node-v8-ae9fae813e54661b3bb3fdf5a076151db54c5ac7.tar.gz
android-node-v8-ae9fae813e54661b3bb3fdf5a076151db54c5ac7.tar.bz2
android-node-v8-ae9fae813e54661b3bb3fdf5a076151db54c5ac7.zip
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>
Diffstat (limited to 'benchmark')
-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 e780d6376b..3b8e9be2d6 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);
}