4

ここで例を参照してください: http://jsperf.com/map-vs-for-basic 逆に、chrome コンソールでは、反対の結果が得られます (map は for ループよりも 6 ~ 10 倍高速な場合があります)。私はそれが逆になるだろうと推測します。

 var input = [];
 for(var i=0;i<10000;i++)input[i]=new Date(i);
    var output = [];

function perform(value,index){
    return value.toString()+index*index
}

console.time(1);output = input.map(perform);console.timeEnd(1);
// 1: 45.000ms

console.time(1);for(var i=0;i<input.length;i++)output[i]=perform(input[i],i);console.timeEnd(1);
// 1: 68.000ms
4

1 に答える 1

4

まず第一に、あなたのテストは現実的ではありません: 関数の「実行」と Web ページ DOM の更新は、ループと「マップ」の使用の違いよりもはるかに遅いです。つまり、すべてのランナーがコーヒーを飲んで本を書く必要がある場合、100m のラッシュを比較するようなものです。

非常に高速な関数でテストを行う必要があります。

ブラウザごとに違いがある理由。

Map は次のように内部的に実装できます。

  • 最適化されたネイティブ/バイナリ関数: この場合、彼の使用ははるかに高速です。Chromeはおそらくそうします。
  • あなたがしたように、ループと同じように:この場合、パフォーマンスは似ていますが、「マップ」への追加の呼び出しと内部チェックにはもう少し時間がかかる場合があります。

ネイティブ実装の方が速い理由

Javascript は解釈されたコードです。つまり、実行可能ファイルはソース コードを取得し、要求された操作を実行しようとしますが、それはコードを解析し、結果のツリー (多くのジョブ) を実行することを意味します。ネイティブ コードは常にはるかに高速で最適化されています。

map がネイティブ コードで実装されている場合、最適化を実行でき、単なる JS ループよりもはるかに高速なコードを実行できます (両方の実装が正しく最適であると仮定します)。

于 2013-07-23T07:24:04.927 に答える