Created
January 23, 2014 18:13
-
-
Save jcmoore/8583806 to your computer and use it in GitHub Desktop.
This file contains 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
var go = (function (size, iterations) { | |
var l = size || 33; | |
var k = "A"; | |
var j = k.charCodeAt(0); | |
var i = 0; | |
var m = j; | |
var n = null; | |
var arr = []; // array with numeric index | |
var obj = {}; // object with non-numeric key | |
var seq = {}; // object with numeric key | |
var alpha = new Function (); | |
var omega = new Function (); | |
for (i = 0; i < l; i++) { | |
arr[i] = i; | |
alpha[i] = i; | |
seq[i] = i; | |
k = String.fromCharCode(j++); | |
obj[k] = i; | |
omega[k] = i; | |
} | |
n = j; | |
var log = (typeof console === "undefined" ? print : function () { | |
console.log.apply(console, arguments); | |
}); | |
var s; | |
var reps = iterations || 100000; | |
var r = 0; | |
var q; // key index | |
var p; // key count | |
var o; // object keys | |
var t; | |
t = Date.now(); | |
log(l+" (key/index count)"); | |
log(reps+" (read/write repetitions)"); | |
log("Array JSON -- "+JSON.stringify(arr)); | |
log("Object JSON -- "+JSON.stringify(obj)); | |
//return; | |
for (r = 0; r < reps; r++) { | |
for (i = 0; i < l; i++) { | |
s = arr[i]; | |
arr[i] = s + 1; | |
} | |
} | |
log((Date.now() - t)+" (arr with index)"), (t = Date.now()); | |
for (r = 0; r < reps; r++) { | |
for (i = 0; i < l; i++) { | |
s = alpha[i]; | |
alpha[i] = s + 1; | |
} | |
} | |
log((Date.now() - t)+" (alpha with index)"), (t = Date.now()); | |
for (r = 0; r < reps; r++) { | |
for (k in obj) { | |
s = obj[k]; | |
obj[k] = s + 1; | |
} | |
} | |
log((Date.now() - t)+" (obj with indirect key)"), (t = Date.now()); | |
for (r = 0; r < reps; r++) { | |
for (k in omega) { | |
s = omega[k]; | |
omega[k] = s + 1; | |
} | |
} | |
log((Date.now() - t)+" (omega with indirect key)"), (t = Date.now()); | |
for (r = 0; r < reps; r++) { | |
o = Object.keys(obj); | |
p = o.length; | |
q = 0; | |
for (q = 0; q < p; q++) { | |
k = o[q]; | |
s = obj[k]; | |
obj[k] = s + 1; | |
} | |
} | |
log((Date.now() - t)+" (obj with direct key)"), (t = Date.now()); | |
for (r = 0; r < reps; r++) { | |
o = Object.keys(omega); | |
p = o.length; | |
q = 0; | |
for (q = 0; q < p; q++) { | |
k = o[q]; | |
s = omega[k]; | |
omega[k] = s + 1; | |
} | |
} | |
log((Date.now() - t)+" (omega with direct key)"), (t = Date.now()); | |
o = Object.keys(obj); | |
p = o.length; | |
for (r = 0; r < reps; r++) { | |
q = 0; | |
for (q = 0; q < p; q++) { | |
k = o[q]; | |
s = obj[k]; | |
obj[k] = s + 1; | |
} | |
} | |
log((Date.now() - t)+" (obj with direct key -- explicitly hoisted loop-invariants for comparison)"), (t = Date.now()); | |
for (r = 0; r < reps; r++) { | |
for (i = 0; i < l; i++) { | |
s = seq[i]; | |
seq[i] = s + 1; | |
} | |
} | |
log((Date.now() - t)+" (seq with index)"), (t = Date.now()); | |
for (r = 0; r < reps; r++) { | |
for (k in seq) { | |
s = seq[k]; | |
seq[k] = s + 1; | |
} | |
} | |
log((Date.now() - t)+" (seq with indirect key)"), (t = Date.now()); | |
for (r = 0; r < reps; r++) { | |
o = Object.keys(seq); | |
p = o.length; | |
q = 0; | |
for (q = 0; q < p; q++) { | |
k = o[q]; | |
s = seq[k]; | |
seq[k] = s + 1; | |
} | |
} | |
log((Date.now() - t)+" (seq with direct key)"), (t = Date.now()); | |
log(""); // arbitrary space | |
/* | |
go(15, 1000000) | |
15 (key/index count) | |
1000000 (read/write repetitions) | |
Array JSON -- [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14] | |
Object JSON -- {"A":0,"B":1,"C":2,"D":3,"E":4,"F":5,"G":6,"H":7,"I":8,"J":9,"K":10,"L":11,"M":12,"N":13,"O":14} | |
160 (arr with index) | |
162 (alpha with index) | |
1316 (obj with indirect key) | |
1358 (omega with indirect key) | |
1774 (obj with direct key) | |
1773 (omega with direct key) | |
1325 (obj with direct key -- explicitly hoisted loop-invariants for comparison) | |
156 (seq with index) | |
2495 (seq with indirect key) | |
1830 (seq with direct key) | |
go(16, 1000000) | |
16 (key/index count) | |
1000000 (read/write repetitions) | |
Array JSON -- [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] | |
Object JSON -- {"A":0,"B":1,"C":2,"D":3,"E":4,"F":5,"G":6,"H":7,"I":8,"J":9,"K":10,"L":11,"M":12,"N":13,"O":14,"P":15} | |
170 (arr with index) | |
172 (alpha with index) | |
3086 (obj with indirect key) | |
3131 (omega with indirect key) | |
2055 (obj with direct key) | |
1993 (omega with direct key) | |
1386 (obj with direct key -- explicitly hoisted loop-invariants for comparison) | |
164 (seq with index) | |
2635 (seq with indirect key) | |
1900 (seq with direct key) | |
*/ | |
}); | |
go(33, 100000); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment