私はベンチマーク サイトjfprefsをいじっていて、 http: //jsperf.com/prefix-or-postfix-increment/9で独自のベンチマークを作成しました。
ベンチマークは、前置インクリメンタと後置インクリメンタを使用し、インプレース インクリメンタを使用しない Crockford jslint スタイルを使用した Javascript for ループのバリエーションです。
for (var index = 0, len = data.length; index < len; ++index) {
data[index] = data[index] * 2;
}
for (var index = 0, len = data.length; index < len; index++) {
data[index] = data[index] * 2;
}
for (var index = 0, len = data.length; index < len; index += 1) {
data[index] = data[index] * 2;
}
ベンチマークを数回実行して数値を取得した後、Firefox は平均して 1 秒あたり約 15 回の操作を実行し、Chrome は約 300 回の操作を実行していることに気付きました。
JaegerMonkey と v8 は、速度の点でかなり匹敵すると思いましたか? 私のベンチマークには何らかの欠陥がありますか、Firefox はここで何らかのスロットリングを行っていますか、それとも Javascript インタープリターのパフォーマンスのギャップは本当に大きいのでしょうか?
更新: jfriend00のおかげで、このバージョンのテストケースに見られるように、パフォーマンスの違いはループの繰り返しによるものではないと結論付けました。ご覧のとおり、Firefox の方が遅いですが、最初のテスト ケースで見たほどの差はありません。
では、なぜその声明は、
data[index] = data[index] * 2;
Firefox ではそんなに遅いですか?