做前端开发时,遇到图形渲染总会碰到一个选择题:用SVG还是Canvas?网上说法五花八门,有人说SVG灵活,有人说Canvas快。其实,哪个更高效,得看你在画什么、怎么用。
SVG:基于DOM的矢量画布
SVG是“可缩放矢量图形”的缩写,本质是HTML标签的一种,每个图形元素都是一个DOM节点。比如画个圆:
<svg width="200" height="200">
<circle cx="100" cy="100" r="50" fill="blue" />
</svg>
这个circle标签可以被JavaScript操作,也能绑定点击事件,就像普通div一样。如果你要做交互丰富的图表,比如地图上的区域点击、动态高亮,SVG天生就适合。
但问题也在这儿——DOM节点越多,页面越慢。要是你要画上千个图形,浏览器得维护上千个节点,内存占用上来了,操作卡顿也就难免了。
Canvas:像素级的绘图板
Canvas不一样,它是一块画布,你通过JavaScript在上面“一笔一笔”地画。比如同样画个圆:
<canvas id="myCanvas" width="200" height="200"></canvas>