3

最初の例では、長さ 1000 の空の配列を作成しました。

var arr = new Array(1000);

for (var i = 0; i < arr.length; i++)
  arr[i] = i;

2 番目の例では、長さ 0 の空の配列を作成しました。

var arr = [];

for (var i = 0; i < 1000; i++)
  arr.push(i);

OS X 10.10.3 上の Chrome 41.0.2272.118 でのテストと最初のブロックの実行速度が向上しました。なんで?JavaScriptエンジンが配列サイズを知っているからですか?

ベンチマークはこちらhttp://jsperf.com/poerttest/2です。

4

3 に答える 3

6

配列サイズを指定しない場合は、より多くのスペースを割り当て続ける必要があります。ただし、最初にサイズを指定すると、一度しか割り当てられません。

于 2015-04-12T07:27:37.743 に答える
0

別の可能性としてpush()は、固定職に割り当てるよりも費用がかかるということも考えられます。しかし、テストはそうではないことを示しています。

何が起こるかというと、空の配列の初期容量 (ハッシュ プールまたは実際の配列のいずれか) が比較的小さく、そのプールを増やすにはコストがかかります。Array(100)より小さいサイズで試してみると、要素数が 100 になると、とのパフォーマンスの差が[]なくなります。

于 2015-04-12T07:36:09.350 に答える
0

はい。サイズを割り当てると、インタープリターは 1000 要素のメモリ/スペースしか割り当てていないことを認識します。したがって、要素を挿入するときは、1 回の操作で済みます。ただし、動的配列を宣言する場合、2番目のシナリオの場合、インタープリターは配列のサイズを増やしてから要素をプッシュする必要があります。2操作です!

于 2015-04-12T07:31:13.667 に答える