Skip to content

Commit 89596fd

Browse files
committed
Add webpack benchmark
1 parent c45d93c commit 89596fd

File tree

10 files changed

+121
-2
lines changed

10 files changed

+121
-2
lines changed

jest.config.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
const path = require("path");
2+
3+
module.exports = {
4+
watchPathIgnorePatterns: [
5+
path.resolve(__dirname, "build")
6+
]
7+
}

src/fixtures/webpack/a.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import b from "./b.js";
2+
3+
const message = import("./c.js").then(c => c.default + b);
4+
5+
export default message;

src/fixtures/webpack/b.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = 42;

src/fixtures/webpack/c.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default "Hello world";

src/mocks/chokidar/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module.exports = {
2+
watch: () => {}
3+
};

src/suite.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,6 @@ suite.add(require("./source-map-benchmark"));
2222
suite.add(require("./typescript-benchmark"));
2323
suite.add(require("./uglify-js-benchmark"));
2424
suite.add(require("./uglify-es-benchmark"));
25+
suite.add(require("./webpack-benchmark"));
2526

2627
module.exports = suite;

src/vfs.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,5 +79,18 @@ fs.writeFileSync(
7979
"third_party/vue.runtime.esm-nobuble-2.4.4.js",
8080
require("raw-loader!../third_party/vue.runtime.esm-nobuble-2.4.4.js")
8181
);
82+
fs.mkdirpSync("/src/fixtures/webpack");
83+
fs.writeFileSync(
84+
"/src/fixtures/webpack/a.js",
85+
require("raw-loader!./fixtures/webpack/a.js")
86+
);
87+
fs.writeFileSync(
88+
"/src/fixtures/webpack/b.js",
89+
require("raw-loader!./fixtures/webpack/b.js")
90+
);
91+
fs.writeFileSync(
92+
"/src/fixtures/webpack/c.js",
93+
require("raw-loader!./fixtures/webpack/c.js")
94+
);
8295

8396
module.exports = fs;

src/webpack-benchmark.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// Copyright 2017 the V8 project authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
const webpack = require("webpack");
6+
7+
const payloads = [
8+
{
9+
entry: "/src/fixtures/webpack/a.js"
10+
}
11+
].map(({ entry }, i) => ({
12+
entry,
13+
output: {
14+
path: "/dist/webpack/",
15+
filename: `bundle.${i}.js`
16+
},
17+
// Using bail option in order to receive noisy errors in the benchmark if something went wrong
18+
bail: true,
19+
// We need to define that because Firefox has a Object.prototype.watch function
20+
watch: false
21+
}));
22+
23+
module.exports = {
24+
name: "webpack",
25+
defer: true,
26+
fn(deferred) {
27+
return Promise.all(
28+
payloads.map(
29+
config =>
30+
new Promise((resolve, reject) => {
31+
const compiler = webpack(config);
32+
compiler.run((err, stats) => void (err ? reject(err) : resolve()));
33+
})
34+
)
35+
).then(() => deferred.resolve());
36+
}
37+
};

src/webpack-benchmark.test.js

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// Copyright 2017 the V8 project authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
const path = require("path");
6+
const webpack = require("webpack");
7+
const webpackConfig = require("../webpack.config.js");
8+
9+
const outputFile = path.resolve(
10+
__dirname,
11+
"..",
12+
"build",
13+
"webpack-benchmark.test.js"
14+
);
15+
let webpackBenchmark;
16+
17+
beforeAll(
18+
() =>
19+
new Promise((resolve, reject) => {
20+
const baseConfig = webpackConfig[0];
21+
const config = Object.assign({}, baseConfig, {
22+
entry: require.resolve("./webpack-benchmark.js"),
23+
bail: true
24+
});
25+
config.output = Object.assign({}, baseConfig.output, {
26+
libraryTarget: "commonjs2",
27+
path: path.dirname(outputFile),
28+
filename: path.basename(outputFile)
29+
});
30+
const compiler = webpack(config);
31+
compiler.run(err => {
32+
if (err) {
33+
reject(err);
34+
return;
35+
}
36+
webpackBenchmark = require(outputFile);
37+
resolve();
38+
});
39+
})
40+
);
41+
42+
it("webpack runs to completion", () =>
43+
new Promise(resolve => {
44+
webpackBenchmark.fn({ resolve });
45+
}));

webpack.config.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ module.exports = [
1919
resolve: {
2020
alias: {
2121
fs: require.resolve("./src/vfs"),
22-
module: require.resolve("./src/mocks/dummy")
22+
"graceful-fs": require.resolve("./src/vfs"),
23+
module: require.resolve("./src/mocks/dummy"),
24+
chokidar: require.resolve("./src/mocks/chokidar"),
25+
"uglify-js": require.resolve("./src/mocks/dummy")
2326
}
2427
},
2528
plugins: [
@@ -46,7 +49,10 @@ module.exports = [
4649
alias: {
4750
define: require.resolve("./src/mocks/dummy"),
4851
fs: require.resolve("./src/vfs"),
49-
module: require.resolve("./src/mocks/dummy")
52+
"graceful-fs": require.resolve("./src/vfs"),
53+
module: require.resolve("./src/mocks/dummy"),
54+
chokidar: require.resolve("./src/mocks/chokidar"),
55+
"uglify-js": require.resolve("./src/mocks/dummy")
5056
}
5157
},
5258
plugins: [

0 commit comments

Comments
 (0)