ホームページ > 記事 > ウェブフロントエンド > JavaScript ループ ステートメントのパフォーマンスの問題
最初の 3 つのループは他の言語でも非常に一般的ですほとんどのプログラミング言語では、ループステートメントがほとんどの時間を消費します
そして、ループ ステートメントは非常に重要なプログラミング パターンです。JavaScript には 4 種類のループがあります: -in ループ
for-in ループは学生にとっては初めてかもしれません。学校で C/C++ を学んだ人
各反復のプロパティでインスタンスとプロトタイプを同時に検索するため、反復ごとにより多くのオーバーヘッドが生成されますこのようにオブジェクトをクリアします
var props = ['prop1', 'prop2'], i = 0;while(i < props.length){ fn(obj[props[i++]]); }
for(var prop in obj){ if(obj.hasOwnProperty(prop)){ //... } }コストは、各反復でプロパティが継承されたプロパティではなくオブジェクト自身のプロパティであるかどうかを判断する必要があることです。
プログラミングを学んだばかりの友達は皆ループの書き方に慣れていると思います
for(var i = 0; i < arr.length; i++){ fn(arr[i]); }
for(var i = 0, len = arr.length; i < len; i++){ fn(arr[i]); }配列の長さの値をローカル変数にキャッシュすることで、問題は解決されますwhile と do-while についても同じことが当てはまります
配列の長さに応じて, 多くのブラウザ 実行時間の約 25% を節約できます
配列の順序を逆にすることで、パフォーマンスをわずかに改善することもできます
for(var i = items.length; i--;){ process(items[i]); }
var j = items.length;while(j--){ process(items[j]); }
var k = items.length - 1;do { process(items[k]); }while(k--);
このようにして、各反復制御条件は 2 つの時間 (数値が
Reduce 1 つの判断 (True かどうか) については、ループ速度がさらに向上します
最後にいくつかの言葉
誰もが次のような配列メソッドを使用したことがあるかもしれません。 arr.forEach() または jQuery の $() などのフレームワーク反復メソッド、 each() を使用して配列を反復処理します。これらのメソッドは配列の各要素に対して関数を実行します
これらは便利ですが、通常よりもはるかに遅くなります。ループ (外部メソッドの呼び出し)そのため、通常のループ (for、while、do-while) を使用できる場合は、これらの通常のループ (for、while、do-while) を使用するようにしています。ループ (for、while、do-while) を使用して問題を解決します
上記は JavaScript ループ ステートメントのパフォーマンスの問題の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) を参照してください。 !