重用对象而不是重新创建
例 A
var i,a,b,len;
a = {x:0,y:0}
function test(){ // return object created each call
return {x:0,y:0};
}
function test1(a){ // return object supplied
a.x=0;
a.y=0;
return a;
}
for(i = 0; i < 100; i ++){ // Loop A
b = test();
}
for(i = 0; i < 100; i ++){ // Loop B
b = test1(a);
}
环路 B 比环路 A 快 4(400%)倍
在性能代码中创建新对象效率非常低。循环 A 调用函数 test()
,每次调用都返回一个新对象。每次迭代都会丢弃创建的对象,循环 B 调用 test1()
,它需要提供对象返回。因此它使用相同的对象并避免分配新对象和过多的 GC 命中。 (GC 未包含在性能测试中)
例 B
var i,a,b,len;
a = {x:0,y:0}
function test2(a){
return {x : a.x * 10,y : a.x * 10};
}
function test3(a){
a.x= a.x * 10;
a.y= a.y * 10;
return a;
}
for(i = 0; i < 100; i++){ // Loop A
b = test2({x : 10, y : 10});
}
for(i = 0; i < 100; i++){ // Loop B
a.x = 10;
a.y = 10;
b = test3(a);
}
循环 B 比循环 A 快 5(500%)倍