原理から、シフト解除の効率が低いことがわかります。その理由は、要素を追加するたびに、既存の要素が 1 つ下の位置に移動するためです。しかし、効率の差はどれくらいあるのでしょうか?以下でテストしてみましょう。
テスト環境の主なハードウェア: CPU T7100 (1.8G)、メモリ 4G DDR2 667、ハードディスク 5400 rpm。主なソフトウェア: オペレーティング システムは Windows 7、ブラウザは Firefox 3.6.9 です。テストコード:
var arr = [ ], s = new Date;
// (var i = 0; i arr.push(i)
コンソールのパフォーマンス テストをプッシュします。 log( new Date - s);
s = new Date;
arr = [ ];
// unshift パフォーマンス テスト
for (var i = 0; i arr.unshift(i);
}
console.log( new Date - s);
このコードは、1 回実行した後、プッシュ操作とシフト解除操作をそれぞれ 50,000 回実行します。 , 結果は次のようになります:
12
1152
アンシフトはプッシュよりもほぼ 100 倍遅いことがわかります。したがって、特に大きな配列の場合は、unshift を慎重に使用する必要があります。では、シフト解除効果を達成する必要がある場合、他の方法はあるのでしょうか?答えは「はい」です。
配列には、配列を反転できる reverse というメソッドがあります。まずプッシュを使用して配列に入れる要素を追加し、次に再度リバースを実行してシフト解除効果を実現します。例:
for (var i = 0) ; i < 50000; i ) {
arr.push(i);
逆のパフォーマンスはどうでしょうか?もう一度実行します:
コードをコピーします
コードは次のとおりです: var arr = [ ], s = 新しい日付; for (var i = 0; i arr.push(i);
arr.reverse(); .log( new Date - s) ;
結果は次のとおりです:
12
逆のパフォーマンスが非常に高く、追加の消費がないことがわかります。安心して使えます。