0

このJSPerfによると、While!未定義のスタイルの配列ループは、すべてのブラウザで最大10倍高速です。このスタイルのループの欠点は何ですか?

4

4 に答える 4

1

ご覧のとおり、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]);
}
于 2012-06-18T20:33:48.877 に答える
1

これは実際にはテストケースのバグであり、イテレータはテスト実行ごとにゼロにリセットされません(つまり、最初のテスト実行のみが完全なループをロールし、次の実行ではイテレータがすでに配列の終わりを超えているため、ロールしますゼロ回)。真のベンチマークについては、修正されたテストスイートを参照してください。

(注:すべてのテストケースを検査したわけではありません。他のテストケースにも欠陥がある可能性があります)

于 2012-06-18T20:36:48.627 に答える
0

私が見ることができる主な欠点は、ループから抜け出せないことです!すぐに応答しないUIが表示されます。

于 2012-06-18T20:32:24.457 に答える
0

不利な点:1。a [i]が使用された場合、それはもはや未定義ではありません。したがって、予想以上のことをする可能性があります。2.読みやすさ、エンドポイントを知ることは困難です(コメントを入れない限り;)他に何もありません。

新しいリビジョンはまだそれほど違いはありませんが、速度が必要な場合は、コメントを付けてテストしてください。

関数が「someFn(a);」の場合 これらのテストよりも多くのタイマーがあります。それが重要な場合は、独自のループをテストすることをお勧めします。

常にきちんとしたコーディングに固執するわけではありません。

于 2012-06-18T20:53:29.450 に答える