Created
February 26, 2012 17:05
-
-
Save shinout/1917743 to your computer and use it in GitHub Desktop.
hasOwnProperty is the fastest!!
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
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); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-- 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