向 'arguments' 类数组对象添加参数,性能测试
Add argument to 'arguments' array-like object, performance test
你好,我做了一些简单的测试:在 javascript 中向类似数组的对象添加参数的更好方法:
这表明使用 Array.prototype.push.call 大约慢 3 倍 (chrome),为什么?
function test() {
Array.prototype.push.call(arguments, 123);
}
function test2() {
arguments[arguments.length] = 123;
arguments.length++;
}
console.time("test1");
for ( var i=0; i<1000000; i++ ) {
test(1,2,3);
}
console.timeEnd("test1");
console.time("test2");
for ( var i=0; i<1000000; i++ ) {
test2(1,2,3);
}
console.timeEnd("test2");
Array.prototype.push.call
is about 3 times slower (chrome), why?
因为
- 这是一个函数调用(实际上是两个),而且这些仍然需要一些费用
- 传递
arguments
需要对象的具体化 which kills optimisations
- dead code elimiation执行起来比较复杂
你好,我做了一些简单的测试:在 javascript 中向类似数组的对象添加参数的更好方法:
这表明使用 Array.prototype.push.call 大约慢 3 倍 (chrome),为什么?
function test() {
Array.prototype.push.call(arguments, 123);
}
function test2() {
arguments[arguments.length] = 123;
arguments.length++;
}
console.time("test1");
for ( var i=0; i<1000000; i++ ) {
test(1,2,3);
}
console.timeEnd("test1");
console.time("test2");
for ( var i=0; i<1000000; i++ ) {
test2(1,2,3);
}
console.timeEnd("test2");
Array.prototype.push.call
is about 3 times slower (chrome), why?
因为
- 这是一个函数调用(实际上是两个),而且这些仍然需要一些费用
- 传递
arguments
需要对象的具体化 which kills optimisations - dead code elimiation执行起来比较复杂