webpack/benchmark/benchmark.js

240 lines
4.3 KiB
JavaScript
Raw Permalink Normal View History

2017-12-27 22:54:59 +08:00
const path = require("path");
const fs = require("fs");
const Benchmark = require("benchmark");
const webpack = require("../");
const fixtures = path.join(__dirname, "fixtures");
const outputPath = path.join(__dirname, "js");
2015-04-04 08:32:04 +08:00
2017-12-27 22:54:59 +08:00
const benchmarkOptions = {
2015-04-04 08:32:04 +08:00
defer: true,
2020-03-29 06:10:15 +08:00
onCycle: function () {
2015-04-04 08:32:04 +08:00
process.stderr.write(".");
},
minSamples: 10
};
function runTimes(compiler, times, deferred) {
2018-06-13 19:04:23 +08:00
fs.writeFileSync(
path.join(fixtures, "0.js"),
"module.exports = " + Math.random(),
"utf-8"
);
compiler.run(err => {
2018-06-13 19:04:23 +08:00
if (err) throw err;
if (times === 1) deferred.resolve();
else runTimes(compiler, times - 1, deferred);
2015-04-04 08:32:04 +08:00
});
}
2017-12-27 22:54:59 +08:00
const tests = {
2015-07-16 06:27:37 +08:00
"normal build": [
[0, 1, 5, 10, 50, 100, 200],
2017-12-27 22:54:59 +08:00
(size, deferred) => {
2018-06-13 19:04:23 +08:00
webpack(
{
context: fixtures,
entry: `./${size}.js`,
output: {
path: outputPath,
filename: "bundle.js"
}
},
err => {
if (err) throw err;
deferred.resolve();
2015-07-16 06:27:37 +08:00
}
2018-06-13 19:04:23 +08:00
);
2015-07-16 06:27:37 +08:00
}
],
"eval dev build": [
[0, 1, 2, 5, 10, 15],
2017-12-27 22:54:59 +08:00
(size, deferred) => {
2018-06-13 19:04:23 +08:00
webpack(
{
context: fixtures,
entry: `./${size}.big.js`,
output: {
path: outputPath,
filename: "bundle.js"
},
devtool: "eval"
2015-07-16 06:27:37 +08:00
},
2018-06-13 19:04:23 +08:00
err => {
if (err) throw err;
deferred.resolve();
}
);
2015-07-16 06:27:37 +08:00
}
],
"sourcemap build": [
[0, 1, 2, 5, 10, 15],
2017-12-27 22:54:59 +08:00
(size, deferred) => {
2018-06-13 19:04:23 +08:00
webpack(
{
context: fixtures,
entry: `./${size}.big.js`,
output: {
path: outputPath,
filename: "bundle.js"
},
devtool: "source-map"
2015-07-16 06:27:37 +08:00
},
2018-06-13 19:04:23 +08:00
err => {
if (err) throw err;
deferred.resolve();
}
);
2015-07-16 06:27:37 +08:00
}
],
"cheap sourcemap build": [
[0, 1, 2, 5, 10, 15],
2017-12-27 22:54:59 +08:00
(size, deferred) => {
2018-06-13 19:04:23 +08:00
webpack(
{
context: fixtures,
entry: `./${size}.big.js`,
output: {
path: outputPath,
filename: "bundle.js"
},
devtool: "cheap-source-map"
2015-07-16 06:27:37 +08:00
},
2018-06-13 19:04:23 +08:00
err => {
if (err) throw err;
deferred.resolve();
2015-07-16 06:27:37 +08:00
}
2018-06-13 19:04:23 +08:00
);
2015-07-16 06:27:37 +08:00
}
],
"build w/ chunks": [
[0, 1, 5, 10, 50, 100, 200],
2017-12-27 22:54:59 +08:00
(size, deferred) => {
2018-06-13 19:04:23 +08:00
webpack(
{
context: fixtures,
entry: `./${size}.async.js`,
output: {
path: outputPath,
filename: "bundle.js"
}
},
err => {
if (err) throw err;
deferred.resolve();
2015-07-16 06:27:37 +08:00
}
2018-06-13 19:04:23 +08:00
);
2015-07-16 06:27:37 +08:00
}
],
2018-06-13 19:04:23 +08:00
incremental: [
2015-07-16 06:27:37 +08:00
[0, 1, 5, 10, 50, 100, 200],
2017-12-27 22:54:59 +08:00
(size, deferred) => {
2015-07-16 06:27:37 +08:00
var compiler = webpack({
cache: true,
context: fixtures,
entry: "./" + size + ".js",
output: {
path: outputPath,
filename: "bundle.js"
}
});
runTimes(compiler, 2, deferred);
}
],
"incremental cheap sourcemap": [
[1, 2, 3, 4, 5, 6],
2017-12-27 22:54:59 +08:00
(size, deferred) => {
2015-07-16 06:27:37 +08:00
var compiler = webpack({
cache: true,
context: fixtures,
entry: "./200.js",
output: {
path: outputPath,
filename: "bundle.js"
},
devtool: "cheap-source-map"
});
runTimes(compiler, size, deferred);
}
],
2018-06-13 19:04:23 +08:00
incremental2: [
2015-07-16 06:27:37 +08:00
[0, 1, 5, 10, 50, 100, 200],
2017-12-27 22:54:59 +08:00
(size, deferred) => {
2015-07-16 06:27:37 +08:00
var compiler = webpack({
cache: true,
context: fixtures,
entry: `./${size}.js`,
2015-07-16 06:27:37 +08:00
output: {
path: outputPath,
filename: "bundle.js"
}
});
runTimes(compiler, 3, deferred);
}
],
2018-06-13 19:04:23 +08:00
incremental4: [
2015-07-16 06:27:37 +08:00
[0, 1, 5, 10, 50, 100, 200],
2017-12-27 22:54:59 +08:00
(size, deferred) => {
2015-07-16 06:27:37 +08:00
var compiler = webpack({
cache: true,
context: fixtures,
entry: `./${size}.js`,
2015-07-16 06:27:37 +08:00
output: {
path: outputPath,
filename: "bundle.js"
}
});
runTimes(compiler, 5, deferred);
}
],
2018-06-13 19:04:23 +08:00
incremental16: [
2015-07-16 06:27:37 +08:00
[0, 1, 5, 10, 50, 100, 200],
2017-12-27 22:54:59 +08:00
(size, deferred) => {
2015-07-16 06:27:37 +08:00
var compiler = webpack({
cache: true,
context: fixtures,
entry: `./${size}.js`,
2015-07-16 06:27:37 +08:00
output: {
path: outputPath,
filename: "bundle.js"
}
});
runTimes(compiler, 17, deferred);
}
2018-06-13 19:04:23 +08:00
]
2015-04-04 08:32:04 +08:00
};
2018-06-13 19:04:23 +08:00
const suite = new Benchmark.Suite();
2015-04-04 08:32:04 +08:00
2018-06-13 19:04:23 +08:00
Object.keys(tests)
2019-02-05 17:06:32 +08:00
.filter(name =>
process.argv.length > 2 ? name.includes(process.argv[2]) : true
2018-06-13 19:04:23 +08:00
)
.forEach(name => {
2017-12-27 22:54:59 +08:00
const test = tests[name];
test[0].forEach(size => {
2018-06-13 19:04:23 +08:00
suite.add(
`${name} ${size}`,
deferred => {
test[1](size, deferred);
},
benchmarkOptions
);
2017-12-27 22:54:59 +08:00
});
2015-04-04 08:32:04 +08:00
});
suite.on("cycle", event => {
2015-04-04 08:32:04 +08:00
process.stderr.write("\n");
2017-12-27 22:54:59 +08:00
const b = event.target;
2018-06-13 19:04:23 +08:00
console.log(
b.name +
"\t" +
Math.floor(1000 * (b.stats.mean - b.stats.moe)) +
"\t" +
Math.floor(1000 * (b.stats.mean + b.stats.moe))
);
2015-04-04 08:32:04 +08:00
});
2015-07-16 06:27:37 +08:00
suite.run({
async: true
});