このJSPerfによると、While!未定義のスタイルの配列ループは、すべてのブラウザで最大10倍高速です。このスタイルのループの欠点は何ですか?
4 に答える
ご覧のとおり、1秒あたり数百万の操作のスケールで10倍高速/低速について話しているので、心配するほど重要ではありません。
このスタイルの考えられる欠点は、他の開発者にとって読みやすさです。これは、「パフォーマンスの向上」よりも重要です。
自分で判断してください、もっと読みやすいものは何ですか?
// Chrome 21: 5M operations per second
var a;
while ((a = arr[i++]) !== undefined) {
someFn(a);
}
// Chrome 21: 324k operations per second
for (var i = 0; i < arr.length; i++) {
someFn(arr[i]);
}
これは実際にはテストケースのバグであり、イテレータはテスト実行ごとにゼロにリセットされません(つまり、最初のテスト実行のみが完全なループをロールし、次の実行ではイテレータがすでに配列の終わりを超えているため、ロールしますゼロ回)。真のベンチマークについては、修正されたテストスイートを参照してください。
(注:すべてのテストケースを検査したわけではありません。他のテストケースにも欠陥がある可能性があります)
私が見ることができる主な欠点は、ループから抜け出せないことです!すぐに応答しないUIが表示されます。
不利な点:1。a [i]が使用された場合、それはもはや未定義ではありません。したがって、予想以上のことをする可能性があります。2.読みやすさ、エンドポイントを知ることは困難です(コメントを入れない限り;)他に何もありません。
新しいリビジョンはまだそれほど違いはありませんが、速度が必要な場合は、コメントを付けてテストしてください。
関数が「someFn(a);」の場合 これらのテストよりも多くのタイマーがあります。それが重要な場合は、独自のループをテストすることをお勧めします。
常にきちんとしたコーディングに固執するわけではありません。