2010-07-01 74 views
7

我寫了這個小遊戲在http://amarnus.me/games/dodge。現在,如果您嘗試在Firefox和Chrome中玩遊戲,您會清楚地注意到它在Firefox中顯着較慢。你可以把它稱爲一個無意的作弊碼,是的。 ;-)Javascript Speed - Chrome v Firefox

所以我的問題是 - 這是因爲與Chrome瀏覽器相比,Firefox的JavaScript引擎速度較慢?或者它與壞coding有什麼關係? (在我的防守中,我是一個Javascript新手)

假設它是前者,那麼這是不是反對(劣勢)的HTML5遊戲? (使用像我的<canvas>標籤的那些)

+2

不錯的項目,順便說一句:) – galambalazs 2010-07-01 10:18:19

+0

上癮的遊戲。第17級,Chrome上有83次閃避,1級,Firefox上閃0次。 Firefox的速度太慢了,我不得不移動欄。 – Anurag 2010-07-01 10:23:00

+1

也許8ms間隔對於ff來說太小了.. – galambalazs 2010-07-01 10:24:38

回答

6

Firefox在JavaScript中比Chrome要慢。不過,我相信使用畫布標籤的速度也較慢。這可能會改善與ff4(你有沒有嘗試過測試?)。

在網絡上還有一個使用js和canvas的nes模擬器,它在chrome上運行速度約爲30fps(如果我記得正確的話),但ff中只有10個左右。

時間可能是你最好的朋友:-P,儘管你可以嘗試優化。

我相信瀏覽器遊戲會及時到來,但它還沒有準備好,至今還沒有任何先進的。也許關於時間ie12出來:-P。

[編輯] btw:我在FF4b1上試過遊戲,我認爲它運行的很好。可能沒有鉻合金那麼快,但離它不遠:)。

+0

對於「canvas」評論+1。 Chrome優化了該元素,遠遠超過了FF 3. – 2010-07-01 15:09:57

+0

Chrome並沒有比Firefox更「優化」畫布。 Firefox 4具有GPU加速功能,使其在魚缸演示中的性能優於MSIE 9。 – itpastorn 2010-07-02 09:51:10

+0

在FF4b1中默認禁用硬件加速,請參閱https://wiki.mozilla.org/Platform/GFX/Direct2DDemo以激活它 – 2010-07-02 14:30:56

0

jQuery animate做了類似於您的DOM對象移動。

我會查看他們的代碼,看看他們是如何進行實際移動的,這可能是自jQuery構建以來最有效的方法。

0

鉻是designed有一個更快的Javascript引擎。

我不認爲它說什麼有關HTML5遊戲。您總能找到比其他設備更快或更慢的設置的用戶,無論是硬件,軟件還是用戶保持同時運行多個應用程序的個人習慣。如果您的遊戲是使用Flash或Java編寫的,那麼硬件較慢的用戶會看到類似的減速。

您可以對代碼進行更改以加快速度。我沒有詳細檢查過它,但我看到你的構造像if(dodge.goRight == true ...。雖然不是緩慢的原因,但這暗示你可能沒有在任何地方使用最佳解決方案。

+0

儘管在大多數速度測試中V8的性能都優於Tracemonkey,但我認爲「旨在具有更快的JavaScript引擎「有點混亂。我會自己寫更有意義的評論來更詳細地解釋這一點。 – itpastorn 2010-07-02 09:53:13

+0

+1好比喻。與硬件的比較對我來說確實有意義,但它是如此明顯?然後再次,這將取決於應用程序。嗯.. – 2010-07-02 10:57:18

0

你可以用IE瀏覽器測試你的瀏覽器javascript引擎。

http://ie.microsoft.com/testdrive/

他們斷言,以JavaScript引擎,他們與IE9

+0

你認爲他們會這麼說嗎? (不是說我是一個downvoted的) – Yacoby 2010-07-02 10:17:40

+0

這裏是測試網站。他在此測試瀏覽器。只需從Chrome和Firefox進入本網站。你低估了它不是關於這個話題。好吧,不管 – onurbaysan 2010-07-02 10:34:22

1

最高速度我上的setTimeout和setInterval具有10ms的〜最小的瀏覽器如IE和Firefox怪很大一部分。這最初是爲了阻止頁面消耗整個CPU,只要它們天真地使用0ms來儘可能快地運行。 Chrome無限制地推出,但現在是moving to a 4ms minimum以符合HTML5中的建議。

John Resig hassomeawesomeposts調查setTimeout限制和準確性。

Mozilla瀏覽器實際上可以告訴你他們每次setInterval調用運行得有多遲(或早!)。查看MDC setTimeout文章(google「mdc settimeout」並查看語法部分的灰色註釋)。

除計時器問題外,Firefox在JS執行方面通常比較慢(至少現在是這樣),並且感覺Skia(Chrome的圖形庫)在光柵化方面也更快。

希望這有助於:)

(我本來有一堆這裏有用的鏈接,但它是我的第一篇文章和垃圾郵件過濾器摑我失望。)

2

爲了獲得幫助,你可以考慮提供腳本的非縮小版本。

我看到代碼中有8ms的setIntervals。如上所述,Firefox永遠不會低於10毫秒(尚)。儘管如此,在FFox 4中玩遊戲非常有趣。我看到了兩個非常小的垃圾郵件,顯然是垃圾收集造成的。 Chrome在這方面比Fox有優勢。儘管SpiderMonkey(用於處理Firefox中的GC)已經從3.5版本大幅提升到了3.6版本,但它仍然不適合許多遊戲。在4.0版本中,它好得多,但仍不如Chrome或Opera中的好。 (這是正在進行這項工作。)

玩遊戲,並在你的代碼簡單地看,我看不到複雜性會導致Firefox不能夠處理什麼事情。另外,Firefox 4的硬件加速畫布比IE9稍微快一些,比Chrome快很多。

在網絡上有一個概念,Chrome在畫布方面比Gecko快,但那是因爲人們很少介紹他們的頁面。事實上,Firefox 3.6中的canvas已經至少和Chrome一樣快,但是由於JavaScript速度較慢,許多測試並未顯示它。 (並且一些JavaScript測試比較慢,因爲Firefox不能很好地處理測試工具。)

所有這些都會導致大量混淆和錯誤信息。底線是您的遊戲應該在Firefox 4中正常運行。您應該查看是否有任何可以避免觸發不必要的GC的操作。例如。你是否重新使用變量或創建不必要的新變量?

但是,在Opera 10.53中,它並不令人愉快。並不是因爲歌劇無法跟上速度,而是因爲它沒有移動底部,而是保持靜止不動,整個比賽場地移動。 (儘管如此,我仍然在第一次嘗試中進入了17級。)在Opera 10.6中,頁面無法正確加載。

您可能需要調試您的代碼 - 或者如果是迴歸,則可能會對Opera發出bug。 (我會鳴叫這引起他們的注意。)

+0

從遊戲源代碼:「{if($。browser.webkit){browserName =」Chrome「} else {if($。browser.mozilla){browserName =」Firefox「}}」。這使得它在Opera中發生異常而失敗,因爲browserName在這種情況下沒有被定義在任何地方。請解決這個問題。 – 2010-07-02 10:34:49

+0

並使用功能檢測來修復它。瀏覽器嗅探不是必需的,也是不好的做法。 – itpastorn 2010-07-02 10:55:43