2011-08-26 12 views
5

Imagine la construcción de Google Maps para una gran planta con 3000 habitaciones.SVG rect vs div vs canvas

Necesito mostrar hasta 3000 rectángulos (lo mejor sería también poder representar polígonos aleatorios, pero en este punto, este no es el mayor problema). Cada uno de ellos debe tener eventos adjuntos, como mouseover y clic que tendrán algunos efectos en otros elementos dom en la página. También necesito poder acercar y alejar.

Sé que puedo hacerlo con SVG (Raphael.js), renderizado divs liso o lienzo.

Me pregunto si alguien tiene recomendaciones específicas para lo que estoy tratando de construir. Necesita procesarse lo suficientemente rápido (alrededor de 1 segundo o menos) en los navegadores más lentos. (IE8, Firefox 3.6 y es de esperar IE7, a pesar de que no estoy soñando demasiado ...)

Gracias por la ayuda, Nicolas.

PD: Hasta ahora, he experimentado que renderizar 3000 rectángulos toma hasta 7 segundos en IE8 con Raphael.js, que es bastante lento. También parece que renderizar div simple es hasta 6 veces más rápido en IE8.

Respuesta

6

3000 objetos DOM con eventos adjuntos va a ser muy doloroso para algunas máquinas para manejar. Generalmente, una vez que ingresas al rango "miles", el rendimiento de las soluciones basadas en DOM (divs, SVG) obtiene realmente malo. Es casi imposible obtener buenos tiempos de carga con tantos elementos DOM.

El rendimiento de excanvas también es realmente malo. En el momento en que hay animación, el rendimiento de Excanvas se vuelve horrible. Como excanvas simplemente imita a Canvas al crear VML (SVG), será al menos tan lento (y casi siempre más lento) que solo SVG/VML.

Véase mi respuesta aquí para un análisis detallado: HTML5 Canvas vs. SVG vs. div

creo que uno de los requisitos de la lista tiene que ir. La cantidad de objetos, el rendimiento o la plataforma.

Mi sugerencia para usted sería dejar de lado el soporte para los navegadores más antiguos si es posible e ir con Canvas.

+1

¡Gracias por la respuesta útil! Un comentario rápido sin embargo. En IE8 e IE7, parece que renderizar esas 3000 formas (75% son rectángulos) fue mucho más rápido con excanvas que con SVG. (Excanvas era casi tan rápido como renderizar esos rectángulos que si usaba divs simples, que es 4-6 veces más rápido que SVG). ¿Estás diciendo que va a ser mucho más lento si/cuando agrego animación y cierro/clic en eventos o que siempre debería ser más lento? ¡Gracias de nuevo! –