2010-07-01 7 views
7

Ich schrieb dieses kleine Spiel um http://amarnus.me/games/dodge. Wenn Sie jetzt versuchen, das Spiel sowohl in Firefox als auch in Chrome zu spielen, würden Sie deutlich bemerken, dass es in Firefox wesentlich langsamer ist. Du kannst es einen unbeabsichtigten Cheat-Code nennen, ja. ;-)Javascript Geschwindigkeit - Chrome v Firefox

Also meine Frage ist - Ist das wegen einer langsameren Javascript-Engine in Firefox im Vergleich zu Chrome? Oder hat es etwas mit schlechtem coding zu tun? (In meiner Verteidigung, ich bin ein Javascript newb)

Angenommen, dass es die ehemalige ist, dann ist das kein Punkt gegen (Nachteil von) HTML5-Spiele? (Die mit den <canvas> Tag wie meine)

+2

nettes Projekt, btw :) – galambalazs

+0

Addictive Spiel. Level 17 mit 83 Ausweichen auf Chrome und Level 1 mit 0 Ausweichen bei Firefox. Das Ding war bei Firefox so verdammt langsam, dass ich die Bar bewegen musste. – Anurag

+1

vielleicht 8ms Intervall ist zu klein für ff .. – galambalazs

Antwort

6

Firefox ist langsamer als Chrom in Javascript. Ich glaube jedoch, dass es auch langsamer ist, wenn man den Canvas-Tag benutzt. Dies wird sich wahrscheinlich mit ff4 verbessern (hast du die Beta ausprobiert?).

Es gibt auch einen nes Emulator irgendwo im Internet mit js und canvas, und es läuft in etwa 30fps auf Chrom (wenn ich mich recht erinnere), aber nur etwa 10 in ff.

Die Zeit ist wahrscheinlich dein bester Freund :-P, obwohl du immer versuchen kannst zu optimieren.

Ich glaube, dass Browser-Spiele in der Zeit kommen werden, aber es ist noch nicht zu etwas zu weit fortgeschritten. Vielleicht über die Zeit ie12 kommt heraus :-P.

[Bearbeiten] Btw: Ich habe versucht, das Spiel in FF4b1, und ich dachte, es lief super. Wahrscheinlich nicht so schnell wie in Chrom, aber nicht weit davon :).

+0

+1 für den Kommentar "Leinwand". Chrome optimiert dieses Element viel mehr als FF 3. –

+0

Chrome "optimiert" Canvas nicht mehr als Firefox. Firefox 4 hat eine GPU-Beschleunigung, die es in der Fischtank-Demo sogar besser macht als MSIE 9. – itpastorn

+0

Hardwarebeschleunigung wird standardmäßig in FF4b1 deaktiviert, siehe https://wiki.mozilla.org/Platform/GFX/Direct2DDemo es –

0

jQuery animate macht etwas ähnliches wie Ihre DOM-Objektbewegung.

Ich würde in ihren Code schauen und sehen, wie sie die tatsächliche Bewegung tun, es ist wahrscheinlich der effizienteste Weg, da es in jQuery eingebaut ist.

0

Chrome ist designed, um eine schnellere Javascript-Engine zu haben.

Ich glaube nicht, dass es etwas über HTML5-Spiele sagt. Sie werden immer Benutzer mit schnelleren oder langsameren Setups als andere finden, sei es Hardware, Software oder die Gewohnheit eines Benutzers, viele Anwendungen gleichzeitig laufen zu lassen. Wenn Ihr Spiel in Flash oder Java geschrieben wäre, würde ein Benutzer mit langsamer Hardware eine ähnliche Verlangsamung sehen.

Sie können möglicherweise Änderungen an Ihrem Code vornehmen, um ihn zu beschleunigen. Ich habe es nicht sehr detailliert untersucht, aber ich sehe, dass Sie Konstrukte wie if(dodge.goRight == true ... haben. Obwohl dies keine Quelle der Langsamkeit ist, deutet dies darauf hin, dass Sie möglicherweise nicht überall die optimale Lösung verwendet haben.

+0

aktivieren Es stimmt zwar, dass V8 als Tracemonkey auf den meisten Speed-Tests besser abschneidet, ich denke, die Formulierung " entwickelt, um eine schnellere JavaScript-Engine zu haben "ist ein bisschen verwirrend. Ich werde einen eigenen Kommentar schreiben, um dies ausführlicher zu erklären. – itpastorn

+0

+1 Gute Analogie. Der Vergleich mit Hardware macht für mich Sinn, aber ist es so auffällig? Das hängt wiederum von der App ab. Hmm .. –

0

Sie können Ihr Browser-JavaScript-Modul mit IE-Site testen.

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

Sie behaupten, auf die höchste Geschwindigkeit JavaScript-Engine sie mit IE9 haben

+0

Haben Sie gedacht, dass sie das sagen würden? (Nicht, dass ich der jenige war, der downvoerte) – Yacoby

+0

Hier ist die Testseite. Er testet Browser dazu. einfach diese Seite von Chrome und Firefox eingeben. Sie haben es nicht über diese Themen downvoted. Ok egal – onurbaysan

1

ich einen großen Teil davon Schuld würde auf setTimeout und setInterval ein ~ 10 ms Minimum in Browsern wie IE und Firefox mit . Dies wurde ursprünglich angenommen, um Seiten daran zu hindern, die gesamte CPU zu verbrauchen, sollten sie naiv 0ms verwenden, um so schnell wie möglich zu laufen. Chrome wurde ohne Limit gestartet, ist jetzt aber moving to a 4ms minimum, um der Empfehlung in HTML5 zu entsprechen.

John Resig hassomeawesomeposts Untersuchen von SetTimeout Grenzen und Genauigkeit.

Mozilla-Browser können Ihnen tatsächlich sagen, wie spät (oder früh!) Sie mit jedem setInterval-Aufruf ausgeführt werden. Schauen Sie sich den Artikel MDC setTimeout an (google "mdc settimeout" und sehen Sie sich die graue Notiz im Abschnitt Syntax an).

Abgesehen von Timer-Problemen ist Firefox in JS-Ausführung nur langsam langsamer (zumindest jetzt) ​​und es fühlt sich an, als ob Skia (Chrome's Grafikbibliothek) beim Rastern einfach schneller ist.

this helps :)

(I ursprünglich hier ein paar nützliche Links hatte, aber es ist mein erster Post und der Spam-Filter schlug mich.)

2

Um Hilfe zu erhalten, Sie sich anschauen sollten Bereitstellung einer nichtminimierten Version Ihres Skripts.

Ich sehe, dass es 8ms setIntervals in Ihrem Code gibt. Wie oben erwähnt, geht Firefox (noch) nie unter 10 ms. Das Spiel in FFox 4 ist sehr angenehm. Ich sah zwei sehr kleine Hickups, die eindeutig durch Müllsammlung verursacht wurden. Chrome hat in dieser Hinsicht einen Vorteil gegenüber dem Fox. Obwohl SpiderMonkey (das GC in Firefox behandelt) sich von 3.5 auf 3.6 dramatisch verbessert hat, ist es immer noch nicht gut genug für viele Spiele. In 4.0 ist es viel besser, aber immer noch nicht so gut wie in Chrome oder Opera. (Es wird gerade gearbeitet.)

Wenn ich das Spiel anschaue und kurz auf deinen Code schaue, sehe ich keine Komplexität, die dazu führen würde, dass Firefox mit dem, was vor sich geht, nicht umgehen kann. Auch Firefox 4 hat hardwarebeschleunigtes Canvas, das geringfügig schneller ist als IE9 und viel schneller als Chrome.

Es gibt eine Vorstellung im Web, dass Chrome schneller ist als Gecko, wenn es um Canvas geht, aber das liegt daran, dass Leute ihre Seiten selten profilieren. Tatsächlich ist Canvas in Firefox 3.6 bereits mindestens so schnell wie in Chrome, aber viele Tests zeigen es nicht, da das JavaScript langsamer ist. (Und einige JavaScript-Tests sind langsamer, weil Firefox den Test-Kabelbaum nicht gut verarbeitet.)

All dies führt zu vielen Verwirrungen und Fehlinformationen. Die Quintessenz ist, dass Ihr Spiel in Firefox 4 in Ordnung sein sollte. Sie sollten sehen, ob Sie etwas tun können, um unnötige GC zu vermeiden. Z.B. Verwenden Sie Variablen erneut oder erstellen Sie unnötige neue Variablen?

Allerdings war es in Opera 10.53 nicht angenehm. Nicht, weil Opera mit der Geschwindigkeit nicht mithalten konnte, aber statt das untere Stück zu bewegen, wurde es stationär gehalten und stattdessen das gesamte Spielfeld bewegt. (Ich schaffte es trotzdem, bei meinem ersten Versuch auf Stufe 17 zu gehen.) In Opera 10.6 wird die Seite nicht richtig geladen.

Sie müssen wahrscheinlich Ihren Code debuggen - oder vielleicht einen Fehler mit Opera einreichen, wenn es eine Regression ist. (Ich werde diesen Tweet ihre Aufmerksamkeit zu bekommen.)

+0

Aus dem Spiel Quelltext: "{if (. $ Browser.webkit) {browser =" Chrome "} else {if ($ browser.mozilla.) {Browser =" Firefox "}}". Das macht es mit einer Ausnahme in Opera fehl, da browserName nirgendwo für diesen Fall definiert ist. Bitte beheben Sie das. –

+0

Und reparieren Sie es mit Capability-Erkennung. Browser-Sniffing ist nicht erforderlich und schlechte Praxis. – itpastorn

Verwandte Themen