68 lines
2.2 KiB
JavaScript
68 lines
2.2 KiB
JavaScript
const fs = require("fs");
|
|
const path = require("path");
|
|
|
|
const RESULTS_DIR = path.join(__dirname, "results");
|
|
const INPUTS_DIR = path.join(__dirname, "inputs");
|
|
|
|
module.exports = {
|
|
calculate: () => {
|
|
// minifier => avg(ops).
|
|
const minifierAvgOps = {};
|
|
// minifier => avg(1 - output / original).
|
|
const minifierAvgReduction = {};
|
|
let maxMinifierAvgOps = 0;
|
|
// minifier => input => ops.
|
|
const perInputOps = {};
|
|
// minifier => input => (1 - output / original).
|
|
const perInputReduction = {};
|
|
// input => max(ops).
|
|
const maxInputOps = {};
|
|
const inputSizes = Object.fromEntries(
|
|
fs.readdirSync(INPUTS_DIR).map((f) => {
|
|
const name = path.basename(f, ".json");
|
|
const stats = fs.statSync(path.join(INPUTS_DIR, f));
|
|
return [name, stats.size];
|
|
})
|
|
);
|
|
|
|
for (const f of fs.readdirSync(RESULTS_DIR)) {
|
|
const minifier = decodeURIComponent(path.basename(f, ".json"));
|
|
const data = JSON.parse(
|
|
fs.readFileSync(path.join(RESULTS_DIR, f), "utf8")
|
|
);
|
|
for (const [input, size, iterations, seconds] of data) {
|
|
const originalSize = inputSizes[input];
|
|
const ops = 1 / (seconds / iterations);
|
|
const reduction = 1 - size / originalSize;
|
|
(minifierAvgOps[minifier] ??= []).push(ops);
|
|
(minifierAvgReduction[minifier] ??= []).push(reduction);
|
|
(perInputOps[minifier] ??= {})[input] = ops;
|
|
(perInputReduction[minifier] ??= {})[input] = reduction;
|
|
maxInputOps[input] = Math.max(maxInputOps[input] ?? 0, ops);
|
|
}
|
|
}
|
|
|
|
const minifiers = Object.keys(minifierAvgOps);
|
|
for (const m of minifiers) {
|
|
minifierAvgOps[m] =
|
|
minifierAvgOps[m].reduce((sum, ops) => sum + ops, 0) /
|
|
minifierAvgOps[m].length;
|
|
maxMinifierAvgOps = Math.max(maxMinifierAvgOps, minifierAvgOps[m]);
|
|
minifierAvgReduction[m] =
|
|
minifierAvgReduction[m].reduce((sum, ops) => sum + ops, 0) /
|
|
minifierAvgReduction[m].length;
|
|
}
|
|
|
|
return {
|
|
minifierAvgReduction,
|
|
minifierAvgOps,
|
|
maxMinifierAvgOps,
|
|
perInputOps,
|
|
perInputReduction,
|
|
maxInputOps,
|
|
inputSizes,
|
|
minifiers,
|
|
};
|
|
},
|
|
};
|