ここにはテストがあります:http://jsperf.com/forloopspeedなぜFirefoxでは(var i = 100; i--;){}が(var i = 100; i→0;){}よりもずっと遅く(70%)ですか?
ご覧のとおり、Firefoxの違いは、Safariではほとんどなく、ChromeとOperaには存在しません。
類似したものは、しばらくして起こるが、あまりにもループ:http://jsperf.com/whileloopspeed
ここにはテストがあります:http://jsperf.com/forloopspeedなぜFirefoxでは(var i = 100; i--;){}が(var i = 100; i→0;){}よりもずっと遅く(70%)ですか?
ご覧のとおり、Firefoxの違いは、Safariではほとんどなく、ChromeとOperaには存在しません。
類似したものは、しばらくして起こるが、あまりにもループ:http://jsperf.com/whileloopspeed
私の推測では、(数)i
かどうかをチェックするということですfalsy値は、より計算コストtrue
/false
(比較の結果)をチェックするよりもです。
boolean
と比較してnumber
が与えられたときに、表現の結果に対して実行される内部のToBoolean()
が少し遅くなると仮定します。
In this testブール値からブール値への変換時のパフォーマンスが、!!
を使用した数値との差です。
あなたのテストは面白いですが、その違いはわずかで、ブラウザ間でも同じように見えるので、Firefoxが私の最初のテストに関して他のブラウザと大きく異なる動作をする理由を説明できないでしょう。 – zjmiller
@zjmiller:まあ私の答えは確かに推測です。正確な理由を明らかにするために、実装の知識があまりにも多くの人をここに迎え入れるだろうと私は想像しません。しかし、誰が知っている?私は、Mozillaでバグレポートを提出すれば、あなたの好奇心を解決する大きな可能性を秘めていると思います。 – user113716
これは、Jaegermonkeyに固有の問題のようです。 Tracemonkeyの下でテストを実行すると、その効果は消えます。
理由を知りたいですか?あなたはfirefox bugtrackerにあなたの発見を提出することができ、ロールアウト時の修正を楽しむことができます。 – Szocske
十分に公正。ちょうど興味があると思う。 – zjmiller
実際には関係はありませんが、私が最近出会った別の奇妙なものです:http://jsperf.com/array-vs-object-jamie/3なぜFirefoxはインデックスよりも配列要素へのアクセスがChromeより5倍高速ですか? –