这与这个问题有关。
我听说带有递减和大于测试的 while 模式比任何其他循环模式都快。鉴于此,这是 js 中最快的数组复制吗?
function arrayCopy(src,sstart,dst,dstart,length) {
length += sstart;
dstart += length;
while(--length >= sstart) {
dst[--dstart] = src[length];
}
}
其他测试功能
function slowCopy(src,sstart,dst,dstart,length) {
for(var i = sstart; i < sstart+length;i+=1 ) {
dst[dstart++] = src[i];
}
}
function aCopy(src,sstart,dst,dstart,length) {
Array.prototype.splice.apply(dst,[dstart, length].concat(src.slice(sstart,sstart+length)));
}
测试结果 http://jsperf.com/fastest-js-arraycopy
数组复制 -
2,899
±5.27%
fastest
慢复制 - 获胜者
2,977
±4.86%
fastest
复印件 -
2,810
±4.61%
fastest
我想在 jsPerf 测试中添加更多以下建议的函数,但它们都没有包含源起始偏移量、目标起始偏移量或复制长度。无论如何,我对这些似乎与我预期相反的结果感到有些惊讶