SVG rect vs div vs canvas

时间:2011-08-26 19:24:00

标签: html canvas svg raphael excanvas

想象一下,为拥有3000间客房的大型楼宇平面图构建Google地图。

我需要显示多达3000个矩形(最好也是能够渲染随机多边形,但此时,这不是最大的问题)。它们中的每一个都应该附加事件,例如鼠标悬停和单击,这将对页面上的其他dom元素产生一些影响。我还需要能够放大和缩小。

我知道我可以用SVG(Raphael.js),普通div渲染或画布来做。

我想知道是否有人有具体的建议来为我想要建立的东西。它需要在最慢的浏览器上足够快地渲染(大约1秒左右)。 (IE8,Firefox 3.6,希望IE7,即使我没有做太多梦想......)

感谢您的帮助, 尼古拉斯。

PS:到目前为止,我经历过使用Raphael.js在IE8上渲染3000个矩形需要长达7秒,这相当慢。它似乎也比在IE8上渲染普通div快6倍。

1 个答案:

答案 0 :(得分:7)

附带事件的3000个DOM对象对于某些机器来说将是非常痛苦的。一般来说,一旦进入“数千”范围,基于DOM的解决方案(div,SVG)的性能就会变得非常。使用那么多DOM元素几乎不可能获得良好的加载时间。

excanvas本身的表现也非常糟糕。第二个是任何动画,excanvas的表现变得糟糕。因为excanvas只是通过制作VML(SVG)来模仿Canvas,所以它至少与单独使用SVG / VML一样慢(并且几乎总是更慢)。

请在此处查看我的答案,以获取详细分析:HTML5 Canvas vs. SVG vs. div

我相信你的清单上的要求之一必须要去。对象数,性能或平台。

我建议您尽可能放弃对旧版浏览器的支持,并使用Canvas。