2011-07-09 37 views
4

ここにはテストがあります:http://jsperf.com/forloopspeedなぜFirefoxでは(var i = 100; i--;){}が(var i = 100; i→0;){}よりもずっと遅く(70%)ですか?

ご覧のとおり、Firefoxの違いは、Safariではほとんどなく、ChromeとOperaには存在しません。

類似したものは、しばらくして起こるが、あまりにもループ:http://jsperf.com/whileloopspeed

+2

理由を知りたいですか?あなたはfirefox bugtrackerにあなたの発見を提出することができ、ロールアウト時の修正を楽しむことができます。 – Szocske

+0

十分に公正。ちょうど興味があると思う。 – zjmiller

+0

実際には関係はありませんが、私が最近出会った別の奇妙なものです:http://jsperf.com/array-vs-object-jamie/3なぜFirefoxはインデックスよりも配列要素へのアクセスがChromeより5倍高速ですか? –

答えて

2

私の推測では、(数)iかどうかをチェックするということですfalsy値は、より計算コストtrue/false(比較の結果)をチェックするよりもです。

2

booleanと比較してnumberが与えられたときに、表現の結果に対して実行される内部のToBoolean()が少し遅くなると仮定します。

In this testブール値からブール値への変換時のパフォーマンスが、!!を使用した数値との差です。

+0

あなたのテストは面白いですが、その違いはわずかで、ブラウザ間でも同じように見えるので、Firefoxが私の最初のテストに関して他のブラウザと大きく異なる動作をする理由を説明できないでしょう。 – zjmiller

+0

@zjmiller:まあ私の答えは確かに推測です。正確な理由を明らかにするために、実装の知識があまりにも多くの人をここに迎え入れるだろうと私は想像しません。しかし、誰が知っている?私は、Mozillaでバグレポートを提出すれば、あなたの好奇心を解決する大きな可能性を秘めていると思います。 – user113716

関連する問題