7

私が実際に調べる機会がなかった簡単な質問。呼び出し/適用のようなコンテキストで使用すると、どちらがよりパフォーマンスが高くなりますか: Array.prototypevs []?

例えば:

function test1() {
    return Array.prototype.splice.apply(arguments, [1, 2]);
}

test1([1,2,3,4,5,6,7,8,9]);

function test2() {
    return [].splice.apply(arguments, [1, 2]);
}

test1([1,2,3,4,5,6,7,8,9]);

私の考え:Array.prototypeプロトタイプ関数を再利用でき、リテラルを作成する必要がないため、この方法の方がパフォーマンスが高いと思います。確かではありませんが。

JSPerf (chrome を使用) を使用すると、Array.prototype実際にはわずかにパフォーマンスが向上しているように見えます。

http://jsperf.com/array-perf-prototype-vs-literal

4

1 に答える 1

3

それを実行しているブラウザに依存します。chrome では .prototype の方が速いようですが、Firefox では 2 つの違いは見られませんが、一般的には chrome よりも低速です。IE9 は .prototype の大幅な速度向上を示していますが、これまでで最も遅いブラウザーです。

ただし、この種の最適化は非常に小さいため、節約された時間は、コードを読み取るために必要な余分なバイトと相殺されると主張できます。余談になりますが、これらが最大のパフォーマンスの問題である場合、最適化に問題はありません。

編集:

ここで、関数に渡された配列を使用して splice 関数を呼び出す追加のテストを追加しました。これは、IE、Chrome、および Firefox の両方よりも高速でした。私の結論としては、すでに配列が手元にある場合はそれを使用し、それ以外の場合はプロトタイプを使用してください。

于 2012-07-20T10:39:02.257 に答える