La respuesta corta:
SVG sería más fácil para usted, ya que la selección y el desplazamiento ya están integrados. Los objetos SVG son objetos DOM, por lo que tienen controladores de "clic", etc.
Los DIV están bien pero son torpes y tienen una carga de rendimiento horrible en grandes cantidades.
Canvas tiene el mejor rendimiento sin dudas, pero debe implementar todos los conceptos de estado administrado (selección de objetos, etc.) usted mismo o usar una biblioteca.
La respuesta larga:
HTML5 Canvas es simplemente una superficie de dibujo para un mapa de bits. Se configura para dibujar (digamos con un color y grosor de línea), dibuja esa cosa, y luego el lienzo no tiene conocimiento de esa cosa: no sabe dónde está o qué es lo que acaba de dibujar, es solo píxeles Si desea dibujar rectángulos y hacer que se muevan o sean seleccionables, debe codificar todo desde cero, incluido el código para recordar que los dibujó.
SVG, por otro lado, debe mantener referencias a cada objeto que representa. Cada elemento SVG / VML que cree es un elemento real en el DOM. De forma predeterminada, esto le permite realizar un seguimiento mucho mejor de los elementos que crea y facilita el manejo de cosas como los eventos del mouse de manera predeterminada, pero se ralentiza significativamente cuando hay una gran cantidad de objetos
Esas referencias SVG DOM significan que parte del trabajo de pies para lidiar con las cosas que dibujas se hace por ti. Y SVG es más rápido cuando se procesan objetos realmente grandes , pero más lento cuando se procesan muchos objetos.
Un juego probablemente sería más rápido en Canvas. Un gran programa de mapas probablemente sería más rápido en SVG. Si desea utilizar Canvas, tengo algunos tutoriales sobre cómo poner en marcha objetos móviles y ejecutarlos aquí .
Canvas sería mejor para cosas más rápidas y manipulación de mapas de bits pesados (como la animación), pero tomará más código si desea mucha interactividad.
He corrido un montón de números en un dibujo hecho con HTML DIV versus un dibujo hecho en Canvas. Podría hacer una gran publicación sobre los beneficios de cada uno, pero daré algunos de los resultados relevantes de mis pruebas para considerar para su aplicación específica:
Hice páginas de prueba Canvas y HTML DIV, ambas tenían "nodos" móviles. Los nodos de lienzo eran objetos que creé y seguí en Javascript. Los nodos HTML eran Divs móviles.
Agregué 100,000 nodos a cada una de mis dos pruebas. Se desempeñaron de manera bastante diferente:
La pestaña de prueba de HTML tardó una eternidad en cargarse (cronometrado en poco menos de 5 minutos, Chrome le pidió que matara la página la primera vez). El administrador de tareas de Chrome dice que esa pestaña está ocupando 168MB. Toma 12-13% de tiempo de CPU cuando lo estoy mirando, 0% cuando no estoy mirando.
La pestaña Lienzo se cargó en un segundo y ocupa 30 MB. También ocupa el 13% del tiempo de CPU todo el tiempo, independientemente de si uno lo está mirando o no. (Edición 2013: en su mayoría lo han solucionado)
Arrastrar en la página HTML es más suave, lo que se espera del diseño, ya que la configuración actual es volver a dibujar TODO cada 30 milisegundos en la prueba de 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, el rediseño selectivo, etc., solo depende de cuánto desee implementar)
No hay duda de que podría hacer que Canvas sea más rápido en la manipulación de objetos como los divs en esa simple prueba, y por supuesto mucho más rápido en el tiempo de carga. El dibujo / carga es más rápido en Canvas y también tiene mucho más espacio para optimizaciones (es decir, excluir cosas que están fuera de la pantalla es muy fácil).
Conclusión:
- SVG es probablemente mejor para aplicaciones y aplicaciones con pocos elementos (¿menos de 1000? Depende realmente)
- Canvas es mejor para miles de objetos y una manipulación cuidadosa, pero se necesita mucho más código (o una biblioteca) para despegarlo.
- Los Divs HTML son torpes y no se escalan, hacer un círculo solo es posible con esquinas redondeadas, hacer formas complejas es posible pero involucra cientos de pequeños y diminutos divisiones de píxeles. La locura se produce.