Skip to content

Instantly share code, notes, and snippets.

@shinout
Created February 26, 2012 17:05
Show Gist options
  • Save shinout/1917743 to your computer and use it in GitHub Desktop.
Save shinout/1917743 to your computer and use it in GitHub Desktop.
hasOwnProperty is the fastest!!
var values = [
123, // int
"string", // short string
true, // boolean
42.195, // float
"AAAAAABBCCCCCCDDDDDDDDEEEEEEEAAAAAAAAAAAAA", // string
null
];
function passObjByValue(N, nkey, keylen) {
console.log("-- N", N, "nkey", nkey, "keylen", keylen, "--");
var obj = {}, i;
var k;
for (i=0; i<nkey; i++) {
k = "";
for (j=i + 0x41; j<keylen+i+0x40; j++) {
k+= String.fromCharCode(j);
}
obj[k] = values[i % values.length];
}
var a;
console.time("JSON");
for (i=0; i<N; i++) {
obj.id = i;
var obj_str = JSON.stringify(obj);
a = JSON.parse(obj_str);
}
console.timeEnd("JSON");
var b;
console.time("iterate");
for (i=0; i<N; i++) {
b = {};
Object.keys(obj).forEach(function(k) {
b[k] = obj[k];
});
b.id = i;
}
console.timeEnd("iterate");
var c;
console.time("reduce");
for (i=0; i<N; i++) {
c = Object.keys(obj).reduce(function(o, k) {
o[k] = obj[k];
return o;
}, {id : i});
}
console.timeEnd("reduce");
var d;
console.time("reduce2");
var keys = Object.keys(obj);
for (i=0; i<N; i++) {
d = keys.reduce(function(o, k) {
o[k] = obj[k];
return o;
}, {id : i});
}
console.timeEnd("reduce2");
var e;
console.time("iterate2");
var keys = Object.keys(obj);
for (i=0; i<N; i++) {
e = {};
keys.forEach(function(k) {
e[k] = obj[k];
});
e.id = i;
}
console.timeEnd("iterate2");
console.time("hasOwnProperty");
var g = {};
for (var attr in obj) {
if (obj.hasOwnProperty(attr)) g[attr] = obj[attr];
}
console.timeEnd("hasOwnProperty");
}
passObjByValue(1000, 4, 4);
passObjByValue(5000, 4, 4);
passObjByValue(10000, 4, 4);
passObjByValue(10000, 4, 10);
passObjByValue(10000, 4, 20);
passObjByValue(10000, 4, 40);
passObjByValue(10000, 4, 4);
passObjByValue(10000, 10, 4);
passObjByValue(10000, 40, 4);
passObjByValue(100000, 40, 4);
@shinout
Copy link
Author

shinout commented Feb 26, 2012

-- N 1000 nkey 4 keylen 4 --
JSON: 10ms
iterate: 3ms
reduce: 3ms
reduce2: 1ms
iterate2: 4ms
hasOwnProperty: 0ms
-- N 5000 nkey 4 keylen 4 --
JSON: 24ms
iterate: 9ms
reduce: 8ms
reduce2: 5ms
iterate2: 6ms
hasOwnProperty: 0ms
-- N 10000 nkey 4 keylen 4 --
JSON: 42ms
iterate: 17ms
reduce: 16ms
reduce2: 11ms
iterate2: 13ms
hasOwnProperty: 0ms
-- N 10000 nkey 4 keylen 10 --
JSON: 42ms
iterate: 18ms
reduce: 15ms
reduce2: 10ms
iterate2: 13ms
hasOwnProperty: 0ms
-- N 10000 nkey 4 keylen 20 --
JSON: 43ms
iterate: 16ms
reduce: 16ms
reduce2: 11ms
iterate2: 12ms
hasOwnProperty: 0ms
-- N 10000 nkey 4 keylen 40 --
JSON: 95ms
iterate: 29ms
reduce: 29ms
reduce2: 18ms
iterate2: 20ms
hasOwnProperty: 0ms
-- N 10000 nkey 4 keylen 4 --
JSON: 38ms
iterate: 16ms
reduce: 16ms
reduce2: 11ms
iterate2: 13ms
hasOwnProperty: 0ms
-- N 10000 nkey 10 keylen 4 --
JSON: 85ms
iterate: 36ms
reduce: 37ms
reduce2: 31ms
iterate2: 29ms
hasOwnProperty: 0ms
-- N 10000 nkey 40 keylen 4 --
JSON: 439ms
iterate: 187ms
reduce: 194ms
reduce2: 144ms
iterate2: 142ms
hasOwnProperty: 1ms
-- N 100000 nkey 40 keylen 4 --
JSON: 4433ms
iterate: 1886ms
reduce: 1882ms
reduce2: 1429ms
iterate2: 1440ms
hasOwnProperty: 1ms

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment