Last active
November 1, 2024 21:11
-
-
Save jridgewell/f65d3bfcf64177fc34044f8f67ff2a1d to your computer and use it in GitHub Desktop.
Forming graph from arrays: regular vs frozen (https://jsbench.github.io/#f65d3bfcf64177fc34044f8f67ff2a1d) #jsbench #jsperf
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="utf-8"/> | |
<title>Forming graph from arrays: regular vs frozen</title> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/benchmark/1.0.0/benchmark.min.js"></script> | |
<script src="./suite.js"></script> | |
</head> | |
<body> | |
<h1>Open the console to view the results</h1> | |
<h2><code>cmd + alt + j</code> or <code>ctrl + alt + j</code></h2> | |
</body> | |
</html> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"use strict"; | |
(function (factory) { | |
if (typeof Benchmark !== "undefined") { | |
factory(Benchmark); | |
} else { | |
factory(require("benchmark")); | |
} | |
})(function (Benchmark) { | |
var suite = new Benchmark.Suite; | |
Benchmark.prototype.setup = function () { | |
const array = [ | |
{ "id": "quantum", "deps": [] }, | |
{ "id": "t7xgIe", "deps": [] }, | |
{ "id": "ws9Tlc", "deps": [] }, | |
{ "id": "cEt90b", "deps": [] }, | |
{ "id": "qddgKe", "deps": [] }, | |
{ "id": "yxTchf", "deps": [] }, | |
{ "id": "sy7u", "deps": [] }, | |
{ "id": "sy7v", "deps": [ "sy7u" ] }, | |
{ "id": "sy7w", "deps": [] }, | |
{ "id": "xQtZb", "deps": [ "sy7w", "sy7v", "yxTchf" ] }, | |
{ "id": "sy7x", "deps": [] }, | |
{ "id": "R9YHJc", "deps": [ "sy7x", "sy7v" ] }, | |
{ "id": "KUM7Z", "deps": [] }, | |
{ "id": "wrzEXb", "deps": [] }, | |
{ "id": "TxCJfd", "deps": [] }, | |
{ "id": "WVDyKe", "deps": [] }, | |
{ "id": "sy7y", "deps": [] }, | |
{ "id": "Vj9hpd", "deps": [ "sy7y", "WVDyKe" ] }, | |
{ "id": "tafPrf", "deps": [] }, | |
{ "id": "dtl0hd", "deps": [] }, | |
{ "id": "lLQWFe", "deps": [] }, | |
{ "id": "Il1M4b", "deps": [] }, | |
{ "id": "eHDfl", "deps": [] }, | |
{ "id": "FONEdf", "deps": [ "dtl0hd" ] }, | |
{ "id": "JiVLjd", "deps": [ "dtl0hd" ] }, | |
{ "id": "FAUdW", "deps": [ "dtl0hd" ] }, | |
{ "id": "Z1Rg0", "deps": [] }, | |
{ "id": "dMZk3e", "deps": [ "eHDfl" ] }, | |
{ "id": "ofjVkb", "deps": [] }, | |
{ "id": "qaS3gd", "deps": [] }, | |
{ "id": "T9y5Dd", "deps": [] }, | |
{ "id": "yiLg6e", "deps": [] }, | |
{ "id": "Q7BaEe", "deps": [] }, | |
{ "id": "tRaZif", "deps": [ "T9y5Dd" ] }, | |
{ "id": "F2pEhc", "deps": [] }, | |
{ "id": "n73qwf", "deps": [] }, | |
{ "id": "UUJqVe", "deps": [] }, | |
{ "id": "MpJwZc", "deps": [] }, | |
{ "id": "nAFL3", "deps": [] }, | |
{ "id": "sy80", "deps": [] }, | |
{ "id": "NTMZac", "deps": [ "sy80" ] }, | |
{ "id": "sy81", "deps": [] }, | |
{ "id": "sOXFj", "deps": [ "sy81" ] }, | |
{ "id": "oGtAuc", "deps": [] }, | |
{ "id": "sy84", "deps": [] }, | |
{ "id": "byfTOb", "deps": [ "sy84" ] }, | |
{ "id": "sy86", "deps": [] }, | |
{ "id": "sy87", "deps": [] }, | |
{ "id": "sy88", "deps": [ "sy87" ] }, | |
{ "id": "sy89", "deps": [] }, | |
{ "id": "LEikZe", "deps": [ "sy89", "sy88", "sy86", "sy84" ] }, | |
{ "id": "sy8b", "deps": [] }, | |
{ "id": "xUdipf", "deps": [ "sy8b" ] }, | |
{ "id": "sy8c", "deps": [ "sy8b" ] }, | |
{ "id": "sy8g", "deps": [] }, | |
{ "id": "sy8f", "deps": [ "sy8g", "sy8c" ] }, | |
{ "id": "sy8h", "deps": [] }, | |
{ "id": "NwH0H", "deps": [ "sy8f", "xUdipf" ] }, | |
{ "id": "sy8i", "deps": [] }, | |
{ "id": "sy8j", "deps": [] }, | |
{ "id": "gychg", "deps": [ "sy8j", "sy8i", "NwH0H", "LEikZe" ] }, | |
{ "id": "Ulmmrd", "deps": [ "gychg" ] }, | |
{ "id": "rJmJrc", "deps": [ "sy87" ] }, | |
{ "id": "GHAeAc", "deps": [] }, | |
{ "id": "Wt6vjf", "deps": [ "sy87" ] }, | |
{ "id": "lsjVmc", "deps": [ "sy86" ] }, | |
{ "id": "sy8k", "deps": [] }, | |
{ "id": "sy8l", "deps": [ "sy8k" ] }, | |
{ "id": "IZT63", "deps": [ "sy8l" ] }, | |
{ "id": "Vgd6hb", "deps": [] }, | |
{ "id": "sy8m", "deps": [] }, | |
{ "id": "YNjGDd", "deps": [ "sy8m" ] }, | |
{ "id": "iFQyKf", "deps": [] }, | |
{ "id": "sy8p", "deps": [ "sy8m", "sy8l" ] }, | |
{ "id": "PrPYRd", "deps": [ "sy8p", "YNjGDd", "IZT63" ] }, | |
{ "id": "sy8s", "deps": [] }, | |
{ "id": "vfuNJf", "deps": [ "sy8s" ] }, | |
{ "id": "sy8t", "deps": [] }, | |
{ "id": "hc6Ubd", "deps": [ "sy8t", "vfuNJf", "PrPYRd", "iFQyKf" ] }, | |
{ "id": "sy8u", "deps": [] }, | |
{ "id": "sy8v", "deps": [] }, | |
{ "id": "sy8w", "deps": [] }, | |
{ "id": "q0xTif", "deps": [ "sy8w", "sy8v", "sy8u", "PrPYRd", "oGtAuc", "sy81", "sy80", "nAFL3" ] }, | |
{ "id": "rLpdIf", "deps": [] }, | |
{ "id": "w9hDv", "deps": [ "NwH0H" ] }, | |
{ "id": "JNoxi", "deps": [ "w9hDv", "Ulmmrd" ] }, | |
{ "id": "SNUn3", "deps": [] }, | |
{ "id": "ZwDk9d", "deps": [ "sy8b" ] }, | |
{ "id": "RMhBfe", "deps": [] }, | |
{ "id": "Ug7Xab", "deps": [] }, | |
{ "id": "U0aPgd", "deps": [ "Ug7Xab" ] }, | |
{ "id": "qafBPd", "deps": [] }, | |
{ "id": "io8t5d", "deps": [ "qafBPd" ] }, | |
{ "id": "sy8y", "deps": [] }, | |
{ "id": "ebZ3mb", "deps": [ "sy8y", "qafBPd", "Ug7Xab" ] }, | |
{ "id": "KG2eXe", "deps": [ "ebZ3mb" ] }, | |
{ "id": "dowIGb", "deps": [] }, | |
]; | |
const frozen = Object.freeze(array.slice()); | |
const proxy = new Proxy(array, { | |
set() {} | |
}); | |
}; | |
suite.add("Regular array", function () { | |
// Regular array | |
let graph = {}; | |
for (const mod of array) { | |
const deps = mod.deps.map(id => graph[id]); | |
graph[mod.id] = { id: mod.id, deps }; | |
} | |
}); | |
suite.add("Frozen array", function () { | |
// Frozen array | |
let graph = {}; | |
for (const mod of frozen) { | |
const deps = mod.deps.map(id => graph[id]); | |
graph[mod.id] = { id: mod.id, deps }; | |
} | |
}); | |
suite.add("Sliced array", function () { | |
// Sliced array | |
let graph = {}; | |
for (const mod of array.slice()) { | |
const deps = mod.deps.map(id => graph[id]); | |
graph[mod.id] = { id: mod.id, deps }; | |
} | |
}); | |
suite.add("Proxy array", function () { | |
// Proxy array | |
let graph = {}; | |
for (const mod of proxy) { | |
const deps = mod.deps.map(id => graph[id]); | |
graph[mod.id] = { id: mod.id, deps }; | |
} | |
}); | |
suite.on("cycle", function (evt) { | |
console.log(" - " + evt.target); | |
}); | |
suite.on("complete", function (evt) { | |
console.log(new Array(30).join("-")); | |
var results = evt.currentTarget.sort(function (a, b) { | |
return b.hz - a.hz; | |
}); | |
results.forEach(function (item) { | |
console.log((idx + 1) + ". " + item); | |
}); | |
}); | |
console.log("Forming graph from arrays: regular vs frozen"); | |
console.log(new Array(30).join("-")); | |
suite.run(); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment