兩天前,當我發現jsperf.com其中有很多javascript性能測試的集合時,我瀏覽了幾個測試。爲什麼在計算哪個數字更大時,Firefox和其他瀏覽器會執行相反的操作?
其中一項測試是this,它比較了Math.min(a,b)
和a<b?a:b
。當我在Google Chrome上運行此測試時,結果發現a<b?a:b
比Math.min(a,b)
快得多(在Chrome 14上,第一個是53,661,381 ops/s
,第二個是419,830,711 ops/s
)。其他網頁瀏覽器也有類似的結果。
但是,在Firefox上,結果是相反的。 Math.min(a,b)
比a<b?a:b
快得多!第一個是374,219,869 ops/s
和第二個是79,490,749 ops/s
在Firefox 6
當我張貼這在Facebook上,有人說,「由於Firefox是開源項目,開發人員優化Math.min
,但谷歌瀏覽器沒有,因爲Google Chrome只是對Chromium的修改「,但是(除了上述說法並不完全正確),因爲這並不能解釋Google Chrome的a<b?a:b
和Firefox的Math.min(a,b)
以相似的速度執行的原因,Google Chrome的Math.min(a,b)
和Firefox的a<b?a:b
以相同的速度執行,因爲如果Firefox比Google Chrome更快,那麼Googl Chrome的Math.min(a,b)
應該比Firefox的a<b?a:b
慢得多。
摘要:
- 在其他瀏覽器,
a<b?a:b
比Math.min(a,b)
更快。 - 但是,在Firefox上,
Math.min(a,b)
比a<b?a:b
快。 - 由於
Math.min(a,b)
在Firefox的速度≒的a<b?a:b
谷歌瀏覽器的速度和a<b?a:b
速度在Firefox≒的Math.min(a,b)
速度上的谷歌瀏覽器「Firefox是慢」或「火狐快」不能成爲理由。
這是怎麼發生的?
原因?除此之外,每個指定的瀏覽器都有自己的JavaScript實現,因此可以自由優化,不過他們喜歡。 – Jamiec
@Jamiec但是我認爲'a JiminP
@Jiminip對'Math.min'的調用將被編譯,並且該方法可能會被內聯。也許在Firefox中,它是用超快代碼來內聯的,而'if'仍然是'if'。 – xanatos