2010-09-09 14 views
10

Estoy interesado en hacer un juego usando html y javascript. Me preguntaba si realmente es mucho más rápido dibujar en html5 y javascript que en imágenes y div en html y javascript.¿Cuál es la diferencia de velocidad entre dibujar con html5 canvas y html y javascript?

Ejemplo de un juego usando HTML y JavaScript que funciona muy bien: http://scrabb.ly/

Ejemplo de un juego usando HTML5 y Javascript que funciona muy bien: http://htmlchess.sourceforge.net/demo/example.html

Respuesta

13

He pasado un montón de números en drawi hechos en HTML ng versus dibujo hecho en lona. Podría hacer una gran publicación sobre los beneficios de cada uno, pero daré algunos de los resultados relevantes de mis pruebas para su aplicación específica:

Hice páginas de prueba de Canvas y HTML, ambas tenían "nodos" móviles. Los nodos de lienzo fueron objetos que creé y seguí en JavaScript. Los nodos HTML eran <div> s, aunque también podían ser <image> o .

Agregué 100.000 nodos a cada una de mis dos pruebas. Se comportaron de forma bastante diferente:

La pestaña de prueba HTML tardó en cargarse (cronometrada en poco menos de 5 minutos, Chrome solicitó que se mate la página la primera vez). El administrador de tareas de Chrome dice que esa pestaña está tomando 168MB. Toma 12-13% de tiempo de CPU cuando lo miro, 0% cuando no estoy buscando.

La pestaña de lienzo se carga en un segundo y ocupa 30 MB. También ocupa un 13% del tiempo de CPU todo el tiempo, independientemente de si uno lo está mirando o no.

Arrastrar en la página HTML es más suave, lo que supongo que se espera, ya que la configuración actual es volver a dibujar TODO cada 30 milisegundos en la prueba Canvas. Hay muchas optimizaciones para Canvas para esto. (la invalidación del lienzo es la más fácil, también las regiones de recorte, redibujado selectivo, etc.solo depende de cuánto te apetezca implementar)

Video en la página HTML, mientras que no estoy moviendo objetos, es realmente perfectamente liso.

Sobre lienzo el video siempre es lento, ya que estoy redibujando constantemente porque apagué la invalidación de mi lienzo de dibujo. Por supuesto, hay mucho margen de mejora.

Dibujar/cargar solo es ahora más rápido en Canvas y tiene mucho más espacio para optimizaciones, también (es decir, excluir las cosas que están fuera de la pantalla es muy fácil).

+3

¿Tiene una demostración que podría proporcionar para cada uno como ejemplos? – Steropes

2

Ninguno de esos juegos requiere HTML 5. scrabb. Hace todo con objetos rectangulares, que divs maneja muy bien, y el juego de ajedrez ni siquiera utiliza la animación. Si ese es el tipo de juego que estás pensando construir, entonces lo que uses debe decidirse por motivos de familiaridad y compatibilidad en lugar de por rendimiento.

3

¿Rápido como en una representación más rápida o un desarrollo más rápido? Yo diría que la respuesta a ambos es el lienzo HTML5. Aunque es una tecnología bastante nueva, y ni siquiera es compatible con todos los navegadores mainstream, ya tiene mucha más funcionalidad de la que tendría con DIVs con HTML normal. He hecho dibujos con divs antes y fue increíblemente frustrante solo hacer que algo funcione. Con lienzo, ya tiene un marco en su lugar para hacer el dibujo más básico. Además, html5 es nuevo. Incluso si es relativamente más lento que dibujar con div en este momento (lo cual probablemente no sea así), ese rendimiento aumentará a medida que aumente el desarrollo y la adopción. No puedo decir lo mismo para dibujar con divs.

Pros al uso de HTML5 Canvas:

  • Al igual que en otros marcos de dibujo (OpenGL, DirectX)
  • seguirá aumentando en el rendimiento y la funcionalidad
  • puede llegar a ser acelerado por hardware en el futuro
  • Posible marco 3D en el futuro
Cuestiones relacionadas