Velocidad de Javascript – Chrome v Firefox

Escribí este pequeño juego en http://amarnus.me/games/dodge . Ahora, si intenta jugar el juego tanto en Firefox como en Chrome, notará claramente que es significativamente más lento en Firefox. Puedes llamarlo un código de trampa no intencional, sí. 😉

Entonces mi pregunta es: ¿esto se debe a un motor JavaScript más lento en Firefox en comparación con el de Chrome? ¿O tiene algo que ver con una mala encoding ? (En mi defensa, soy un Javascript nuevo)

Suponiendo que sea el primero, ¿no es esto un punto en contra (desventaja) de los juegos HTML5? (Los que usan la label <canvas> como la mía)

Firefox es más lento que Chrome en JavaScript. Sin embargo, creo que también es más lento con la label canvas. Esto probablemente mejorará con ff4 (¿has probado la versión beta?).

También hay un emulador de nidos en la web en algún lugar con js y canvas, y se ejecuta en aproximadamente 30 fps en cromo (si mal no recuerdo), pero solo alnetworkingedor de 10 en ff.

El time es probablemente tu mejor amigo: -P, aunque siempre puedes intentar optimizarlo.

Creo que los juegos de browser llegarán a time, pero aún no está listo para nada demasiado avanzado. Tal vez sobre el time sale ie12 :-P.

[Editar] Por cierto: Probé el juego en FF4b1, y pensé que funcionaba genial. Probablemente no tan rápido como en cromo, pero no muy lejos :).

Para get ayuda, podría considerar proporcionar una versión no miniaturizada de su secuencia de commands.

Veo que hay 8ms setIntervals en su código. Como se mencionó anteriormente, Firefox nunca baja de los 10 ms (todavía). Sin embargo, jugar tu juego en FFox 4 es muy divertido. Vi dos muestras muy pequeñas que claramente fueron causadas por la recolección de basura. Chrome tiene una ventaja sobre Fox en ese sentido. A pesar de que SpiderMonkey (que maneja GC en Firefox) ha mejorado dramáticamente de 3.5 a 3.6, todavía no es lo suficientemente bueno para muchos juegos. En 4.0 es mucho mejor, pero aún no es tan bueno como en Chrome u Opera. (Se está trabajando en eso)

Jugando el juego y mirando brevemente tu código, no veo complejidad que pueda causar que Firefox no sea capaz de manejar lo que está sucediendo. También Firefox 4 tiene Canvas acelerado por hardware que es marginalmente más rápido que IE9 y mucho más rápido que Chrome.

Existe una noción en la web de que Chrome es más rápido que Gecko en lo que respecta al canvas, pero eso se debe a que las personas raramente perfilan sus páginas. De hecho, el canvas en Firefox 3.6 ya es al less tan rápido como en Chrome, pero muchas testings no lo muestran ya que JavaScript es más lento. (Y algunas testings de JavaScript son más lentas porque Firefox no maneja bien el arnés de testing).

Todo esto conduce a mucha confusión y desinformación. La conclusión es que su juego debería estar bien en Firefox 4. Debería ver si hay algo que pueda hacer para evitar la activación innecesaria de GC. Por ejemplo, ¿estás reutilizando variables o creando nuevas innecesarias?

Sin embargo, en Opera 10.53 no fue agradable. No porque Opera no pudiera seguir el ritmo de la velocidad, sino porque en lugar de mover la pieza inferior, se mantuvo estacionaria y todo el campo de juego se movió en su lugar. (Logré pasar al nivel 17 en mi primer bash a pesar de esto). En Opera 10.6 la página no se carga correctamente.

Probablemente necesites depurar tu código, o quizás presentar un error con Opera si se trata de una regresión. (Voy a tuitear esto para llamar su atención.)

Yo culparía a una gran parte de setTimeout y setInterval con un mínimo de ~ 10ms en browseres como IE y Firefox. Esto fue adoptado originalmente para evitar que las páginas consumieran toda la CPU si ingenuamente usaban 0ms para funcionar lo más rápido posible. Chrome se lanzó sin límite, pero ahora se está moviendo a un mínimo de 4 ms para que coincida con la recomendación en HTML5.

John Resig tiene algunas publicaciones impresionantes que investigan los límites y la precisión de setTimeout.

Los browseres de Mozilla pueden decirle qué tan tarde (¡o temprano!) Se están ejecutando con cada llamada setInterval. Consulte el artículo de MDC setTimeout (google "mdc settimeout" y revise la nota gris en la sección de syntax).

Además de los problemas con el timer, Firefox es generalmente más lento en la ejecución de JS (al less por ahora) y se siente como si Skia (la lib de charts de Chrome) fuera más rápido en rasterizar también.

Espero que esto ayude 🙂

(Originalmente tenía un montón de enlaces útiles aquí, pero es mi primera publicación y el filter de spam me abofeteó).

jQuery animate hace algo similar a tu movimiento de objects DOM.

Me gustaría ver su código y ver cómo hacen el movimiento real, es probablemente la forma más eficiente ya que está construido en jQuery.

Chrome está diseñado para tener un motor de JavaScript más rápido.

No creo que diga nada sobre los juegos de HTML5. Siempre encontrará usuarios con configuraciones más rápidas o más lentas que otros, ya sea hardware, software o el hábito personal de un usuario de mantener muchas aplicaciones ejecutándose a la vez. Si su juego fue escrito en Flash o Java, entonces un usuario con hardware más lento vería una desaceleración similar.

Es posible que pueda hacer cambios en su código para acelerarlo. No lo he examinado con gran detalle, pero veo que tienes construcciones como if(dodge.goRight == true ... Aunque no es una fuente de lentitud, esto sugiere que es posible que no hayas usado la solución óptima en todas partes.

Puede probar el motor de JavaScript de su browser con el sitio de IE.

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

Afirman que el motor de javascript de mayor velocidad que tienen con IE9

Pruebe esta técnica: setTimeout con un retraso más corto

Avíseme si ayuda. Soy un poco curioso ahora. 🙂

¡Buena suerte!