pet*_*ete 5 javascript arrays performance
我正在浏览这个问题的答案:我可以在reducer中发送一个动作吗?在这个答案中,我看到以下内容:
actionQueue = actionQueue.concat([asyncAction]);
Run Code Online (Sandbox Code Playgroud)
这基本上与:
actionQueue.push(asyncAction);
Run Code Online (Sandbox Code Playgroud)
(忽略concat调用正在创建一个新数组并重新分配它actionQueue,结果是相同的 - asyncAction附加到它的数组).
最初,我认为它(或许)表现得更好(某种程度上),而其他人显然想知道他们在jsperf:Array .concat()vs. .push()中击败我.
正如jsperf测试的结果所示,该concat方法明显慢于push(至少就Chrome而言).
有什么我想念的吗?在这个用例中
是否有理由concat是首选的?
如果某些其他代码具有对现有数组的引用actionQueue,则使用concat不会影响该数组.
var a1 = [1];
var b1 = a1
a1 = a1.concat([2])
var a2 = [1];
var b2 = a2
a2.push(2)
console.log('b1', b1)
console.log('b2', b2)Run Code Online (Sandbox Code Playgroud)
在简单的推送中,将数组追加到同一引用中,而 concat 不会影响原始数组。查看以下片段
let x = [1,2,3,4];
let y = x.concat(5);
// At this step y hold [1,2,3,4,5] and x remain unchanged to [1,2,3,4]
document.write('x=>'+x);
document.write('y=>'+y);
let z = x.push(5);
// At this step z hold 5 and x is now changed to [1,2,3,4,5]
document.write('x=>'+x);
document.write('z=>'+z);Run Code Online (Sandbox Code Playgroud)