これはこの質問に関連しています。
デクリメントと大なりテストを使用した 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 テストに追加したいのですが、ソース開始オフセット、宛先開始オフセット、またはコピーの長さを組み込んでいません。とにかく、予想とは正反対の結果に少し驚いた