4

C# についても同様の質問がありますが、JavaScript についてはありませんでした。

ループ内で変数を宣言することは認められていますか?

200 回の反復のループを想定します。

サンプル 1 よりもサンプル 2 を使用する場合、パフォーマンス (メモリと速度) が不可欠ですか? jQuery を使用してループしています。var をループ内に保持することでコードの可読性が向上しますが、それがベスト プラクティスでない場合、またはパフォーマンスが大幅に低下したり、メモリ使用量が増加したりする場合は切り替えます。

**Sample 1:**
$(this).each( function() {
   var i = $(some_div).clone();
   *** edit i ***
   $(another_div).append( i );
});



**Sample 2:**
var i = null;
*** edit i ***
$(this).each( function() {
   i = $(some_div).clone();
   $(another_div).append( i );
});
4

4 に答える 4

4

これはマイクロ最適化です。やめてください。

代わりに、読みやすいコードを書き、ドキュメントを作成し、コードをテストすることにエネルギーを注ぎます。

ただし、最適化する価値のある高レベルの問題がいくつかあります。

  • 桁違いに遅くなるjQueryのような肥大化した抽象化を削除します。
  • 画面上で行っているレンダリングと描画の量を減らす
  • アルゴリズムの大きな複雑さを軽減する
  • サーバーとクライアントのトリップの待ち時間を短縮します。
于 2012-04-05T00:24:07.487 に答える
4

サンプル 1 (内部変数) の方が高速です: http://jsperf.com/variable-outside-faster

しかし、その違いは気にするほどの価値はありません。

于 2012-04-04T23:58:50.517 に答える
0

これらは意味的に異なる可能性があるため、これはリンゴとオレンジの比較です。たとえば、同期ではなく内部で ajax コールバックを使用していた場合、この変更を行った場合、異なる値のそれぞれではなく、iほぼ確実に最後の割り当てを数回使用することになります。 i.

純粋な推測は次のとおりです。

したがって、内側のフォームの可能性を最大限に活用varする場合は、それぞれに異なるメモリ アドレスが必要iであり、より多くの作業を行う必要があることがわかります。

$.eachがコールバック引数を同期的に使用していると判断するには、かなりの分析が必要です。したがって、これが有効な最適化である場合、ほとんどの JS コンパイラはそれを行うことができず、手動で行うことで (一定時間) 速度とメモリが向上するはずです。

その他の考慮事項:

字句スコープが増えると、変数を検索するコストが直線的に増加する可能性があります。

于 2012-04-05T00:07:36.810 に答える
0

実装にもよるでしょうが、基本的に性能に目立った違いはないと思います。ループに jQuery を使用しているため、i変数は最初のケースでは関数スコープ内にあり、2 番目のケースでは外側のスコープ内にあります。それはメモリ割り当てにわずかに異なる影響を与える可能性がありますが、それが顕著になるとは思えません. 実装を選択し、そのパフォーマンスを測定しようとすることを確認する唯一の方法。

于 2012-04-04T23:58:56.390 に答える