-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbenchmark.js
62 lines (55 loc) · 1.81 KB
/
benchmark.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
const { promisify } = require('util');
const webpackBase = require('webpack');
const fs = require('fs');
const table = require('markdown-table');
const webpack = promisify(webpackBase);
const writeFile = promisify(fs.writeFile);
const readFile = promisify(fs.readFile);
const webpackConfigs = [
require('./webpack-emotion.config'),
require('./webpack-linaria.config'),
require('./webpack-css-modules.config'),
require('./webpack-nostyles.config'),
];
(async () => {
const rounds = 10;
console.log(`prepare to run ${i} rounds. get a ☕️`);
const measuresRaw = {};
for (let i = 1; i <= rounds; i++) {
for (config of webpackConfigs) {
const title = Object.keys(config.entry)[0];
console.log(`building ${title} in round ${i}`);
const start = new Date();
await webpack(config);
const end = new Date() - start;
if (!measuresRaw[title]) {
measuresRaw[title] = [];
}
measuresRaw[title].push(end);
console.log(`builded ${title} in round ${i} in ${end / 1000}s`);
}
}
const measures = Object.entries(measuresRaw)
.map(([key, values]) => [
key,
Math.min(...values) / 1000,
Math.max(...values) / 1000,
values.reduce((sum, value) => sum + value, 0) / values.length / 1000,
// values,
])
.sort(([, , , averangeA], [, , , averangeB]) => {
if (averangeA < averangeB) {
return -1;
}
if (averangeA < averangeB) {
return 1;
}
return 0;
});
const mdTable = table([['name', 'min (seconds)', 'max (seconds)', 'averange (seconds)'], ...measures], {
align: ['l', 'r', 'r', 'r'],
});
await writeFile('benchmark.md', `# Benchmark results after ${rounds} rounds\n\nsorted by lowest averange\n\n${mdTable}`);
console.log(measures);
console.log(`benchmark finished 🎉`);
})();