Skip to content

Instantly share code, notes, and snippets.

@DerekZiemba
Created May 10, 2020 01:10
Show Gist options
  • Save DerekZiemba/c1f1658bd24165962468c782e2fb93e7 to your computer and use it in GitHub Desktop.
Save DerekZiemba/c1f1658bd24165962468c782e2fb93e7 to your computer and use it in GitHub Desktop.
Map vs Object #jsbench #jsperf
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Map vs Object</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>
"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 boldifyObject = (() => {
const mapChars = (lookup, startAscii, endAscii, codepoint) => {
var ascii = startAscii.codePointAt(0);
for (var range = endAscii.codePointAt(0) - ascii, i = 0; i <= range; ++i) {
lookup[String.fromCodePoint(ascii + i)] = String.fromCodePoint(codepoint + i);
}
};
// https://unicode-search.net/unicode-namesearch.pl?term=BOLD
const toBold = {};
mapChars(toBold, "0", "9", 0x1d7ce);
mapChars(toBold, "A", "Z", 0x1d400);
mapChars(toBold, "a", "z", 0x1d41a);
const fromBold = {};
/* tslint:disable-next-line:forin */
for (let key in toBold) { fromBold[toBold[key]] = key; }
const boldify = (str) => {
var result = "";
for (var len = str.length, i = 0; i < len; ++i) { result += toBold[str[i]] || str[i]; }
return result;
};
boldify.undo = (str) => {
var arr = Array.from(str);
for (var len = arr.length, i = 0; i < len; ++i) { arr[i] = fromBold[arr[i]] || arr[i]; }
return arr.join("");
};
return boldify;
})();
const boldifyMap = (() => {
const initChars = (lookup, startAscii, endAscii, codepoint) => {
var ascii = startAscii.codePointAt(0);
for (var range = endAscii.codePointAt(0) - ascii, i = 0; i <= range; ++i) {
lookup.set(String.fromCodePoint(ascii + i), String.fromCodePoint(codepoint + i));
}
};
const toBold = new Map();
const fromBold = new Map();
// https://unicode-search.net/unicode-namesearch.pl?term=BOLD
initChars(toBold, "0", "9", 0x1d7ce);
initChars(toBold, "A", "Z", 0x1d400);
initChars(toBold, "a", "z", 0x1d41a);
/* tslint:disable-next-line:forin */
for (let key of toBold.keys()) { fromBold.set(toBold.get(key), key); }
const boldify = (str) => {
var result = "";
for (var len = str.length, i = 0; i < len; ++i) { result += toBold.has(str[i]) ? toBold.get(str[i]) : str[i]; }
return result;
};
boldify.undo = (str) => {
var arr = Array.from(str);
for (var len = arr.length, i = 0; i < len; ++i) {
if (fromBold.has(arr[i])) { arr[i] = fromBold.get(arr[i]); }
}
return arr.join("");
};
return boldify;
})();
};
suite.add("Object", function () {
// Object
let src = "~!@#$%^&*()_+`1234567890-=qwertyuiop[]\\asdfghjkl;'zxcvbnm,./QWERTYUIOP{}|ASDFGHJKL:ZXCVBNM<>?";
let bolded = boldifyObject(src);
let restored = boldifyObject.undo(bolded);
if (src !== restored) { throw new Error("Bad Implementation: " + restored); }
});
suite.add("Map", function () {
// Map
let src = "~!@#$%^&*()_+`1234567890-=qwertyuiop[]\\asdfghjkl;'zxcvbnm,./QWERTYUIOP{}|ASDFGHJKL:ZXCVBNM<>?";
let bolded = boldifyMap(src);
let restored = boldifyMap.undo(bolded);
if (src !== restored) { throw new Error("Bad Implementation: " + restored); }
});
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("Map vs Object");
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