关于关联数组和索引数组的性能测试
在知乎上看到下面这段代码:http://www.zhihu.com/question/21589942
作者说这两者有区别,但是在最新的chrome下运行其实没有区别,都是第一次比较慢,2000ms出头,第二次都是200ms出头
1 var arr = new Array(50000000); 2 var arr2 = {}; 3 function runObject() { 4 var i; 5 console.time("Object"); 6 for (i = 0; i < 50000000; i++) { 7 arr2[i] = i; 8 } 9 console.timeEnd("Object"); 10 } 11 function runArray() { 12 var i; 13 console.time("Array"); 14 for (i = 0; i < 50000000; i++) { 15 arr[i] = i; 16 } 17 console.timeEnd("Array"); 18 } 19 $('#arrBtn').on('click', runArray); 20 $('#objectBtn').on('click', runObject);
如果我把key改为字符串,如下:
1 var arr = newArray(50000000); 2 var arr2 = {}; 3 function runObject() { 4 var i; 5 console.time("Object"); 6 for (i = 0; i < 50000000; i++) { 7 arr2[i.toString()] = i; 8 } 9 console.timeEnd("Object"); 10 } 11 function runArray() { 12 var i; 13 console.time("Array"); 14 for (i = 0; i < 50000000; i++) { 15 arr[i.toString()] = i; 16 } 17 console.timeEnd("Array"); 18 } 19 $('#arrBtn').on('click', runArray); 20 $('#objectBtn').on('click', runObject);
那就不是慢一点了,在20s左右,差了整整一个数量级。
看来toString()还是很花时间的。