使用原始的方法来衡量性能,
似乎使用 'test2的' 方法是稍快:
var e0 = {a:1};
var e1 = {a:1};
var e2 = {a:1};
var e3 = {a:1};
var e4 = {a:1};
var e5 = {a:1};
var e6 = {a:1};
var e7 = {a:1};
var e8 = {a:1};
var e9 = {a:1};
var ref = [e0,e1,e2,e3,e4,e5,e6,e7,e8,e9];
var test1 = function() {
var a = [];
a.push(e0,e1,e2,e3,e4,e5,e6,e7,e8,e9);
};
var test2 = function() {
var a = [];
a.push(e0);
a.push(e1);
a.push(e2);
a.push(e3);
a.push(e4);
a.push(e5);
a.push(e6);
a.push(e7);
a.push(e8);
a.push(e9);
};
function t1() {
var tStart = new Date().valueOf();
for (var i = 0; i < 100000; i++) {
test1()
}
var tEnd = new Date().valueOf();
var tDelta = tEnd - tStart;
console.log(tDelta);
}
function t2() {
var tStart = new Date().valueOf();
for (var i = 0; i < 100000; i++) {
test2()
}
var tEnd = new Date().valueOf();
var tDelta = tEnd - tStart;
console.log(tDelta);
}
console.log('t1'); t1();
console.log('t2'); t2();
,输出:
t1
483
t2
523
不过,“TEST1 '方法更具可读性,IMO。就我个人而言,我会使用这种方法,因为我一般不担心JavaScript数组的性能。
编辑:的确,我忘记了t2函数中的一个元素。修改了测试和结果。看起来更可读的形式也是略微(微不足道)更快。
转到jsperf.com并找出答案。 – Barmar 2013-05-07 07:42:01
不用担心,使用第一个,它更短。微粒化是毫无意义的。 – elclanrs 2013-05-07 07:42:52
一般来说,较少的函数调用可能会更好。但除非你推动数千个元素,否则差异可能会微不足道。 – Barmar 2013-05-07 07:44:05