Skip to content

Instantly share code, notes, and snippets.

@rniwa
Last active August 29, 2015 14:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rniwa/572ed56668366e6542d3 to your computer and use it in GitHub Desktop.
Save rniwa/572ed56668366e6542d3 to your computer and use it in GitHub Desktop.
symbol-microbench
<!DOCTYPE html>
<html>
<body>
<pre>
<script>
function newObjects() {
var objects = new Array(1e6);
for (var i = 0; i < objects.length; i++)
objects[i] = {};
return objects;
}
function setProp(objects, prop, value) {
for (var i = 0; i < objects.length; i++)
objects[i][prop] = value;
}
function accessProp(objects, prop, value) {
var sum = 0;
for (var i = 0; i < objects.length; i++)
sum += objects[i][prop];
return sum;
}
logs = '';
function logTime(name, time) {
logs += name + ': ' + time + ' ms \n';
}
(function () {
var labels = ['a', 'b', 'c', 'd'];
var objects = newObjects();
var start = Date.now();
for (var i = 0; i < labels.length; i++)
setProp(objects, labels[i], i + 1);
logTime('Defining string properties', Date.now() - start);
window.sum = 0;
start = Date.now();
for (var i = 0; i < labels.length; i++)
window.sum += accessProp(objects, labels[i], i + 1);
logTime('Accessing string properties', Date.now() - start);
})();
(function () {
var symbols = [Symbol('a'), Symbol('b'), Symbol('c'), Symbol('d')];
var objects = newObjects();
var start = Date.now();
for (var i = 0; i < symbols.length; i++)
setProp(objects, symbols[i], i + 1);
logTime('Defining symbol properties', Date.now() - start);
window.sum = 0;
start = Date.now();
for (var i = 0; i < symbols.length; i++)
window.sum += accessProp(objects, symbols[i], i + 1);
logTime('Accessing string properties', Date.now() - start);
})();
document.write(logs);
</script>
</pre>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment