ECharts官方教程(十四)【使用 Canvas 或者 SVG 渲染】

本文探讨了ECharts中SVG和Canvas渲染器的选择与应用。SVG渲染器在移动端具有内存占用低、渲染性能高的优势,适合中等数据量的图表。而Canvas渲染器则适用于大数据量和复杂交互的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用 Canvas 或者 SVG 渲染

浏览器端图表库大多会选择 SVG 或者 Canvas 进行渲染。对于绘制图表来说,这两种技术往往是可替换的,效果相近。但是在一些场景中,他们的表现和能力又有一定差异。于是,对它们的选择取舍,就成为了一个一直存在的不易有标准答案的话题。

ECharts 从初始一直使用 Canvas 绘制图表(除了对 IE8- 使用 VML)。而 ECharts v3.8 发布了 SVG 渲染器(beta 版),从而提供了一种新的选择。只须在初始化一个图表实例时,设置 renderer 参数 为 ‘canvas’ 或 ‘svg’ 即可指定渲染器,比较方便。

SVG 和 Canvas 这两种使用方式差异很大的技术,能够做到同时被透明支持,主要归功于 ECharts 底层库 ZRender 的抽象和实现,形成可互换的 SVG 渲染器和 Canvas 渲染器。

选择哪种渲染器

一般来说,Canvas 更适合绘制图形元素数量非常大(这一般是由数据量大导致)的图表(如热力图、地理坐标系或平行坐标系上的大规模线图或散点图等),也利于实现某些视觉 特效。但是,在不少场景中,SVG 具有重要的优势:它的内存占用更低(这对移动端尤其重要)、渲染性能略高、并且用户使用浏览器内置的缩放功能时不会模糊。例如,我们在一些硬件环境中分别使用 Canvas 渲染器和 SVG 渲染器绘制中等数据量的折、柱、饼,统计初始动画阶段的帧率,得到了一个性能对比图:

<iframe src="http://echarts.baidu.com/gallery/view.html?c=doc-example/canvas-vs-svg&amp;reset=1" width="90%" height="400"></iframe>

上图显示出,在这些场景中,SVG 渲染器相比 Canvas 渲染器在移动端的总体表现更好。当然,这个实验并非是全面的评测,在另一些数据量较大或者有图表交互动画的场景中,目前的 SVG 渲染器的性能还比不过 Canvas 渲染器。但是同时有这两个选项,为开发者们根据自己的情况优化性能提供了更广阔的空间。

选择哪种渲染器,我们可以根据软硬件环境、数据量、功能需求综合考虑。

在软硬件环境较好,数据量不大的场景下(例如 PC 端做商务报表),两种渲染器都可以适用,并不需要太多纠结。
在环境较差,出现性能问题需要优化的场景下,可以通过试验来确定使用哪种渲染器。比如有这些经验:
    在须要创建很多 ECharts 实例且浏览器易崩溃的情况下(可能是因为 Canvas 数量多导致内存占用超出手机承受能力),可以使用 SVG 渲染器来进行改善。大略得说,如果图表运行在低端安卓机,或者我们在使用一些特定图表如 水球图 等,SVG 渲染器可能效果更好。
    数据量很大、较多交互时,可以选用 Canvas 渲染器。

我们强烈欢迎开发者们 反馈 给我们使用的体验和场景,帮助我们更好的做优化。

注:目前的 SVG beta 版中,富文本、阴影、材质功能尚未实现。

如何使用渲染器

ECharts 默认使用 Canvas 渲染。如果想使用 SVG 渲染,ECharts 代码中须包括有 SVG 渲染器模块。

ECharts 的 预构建文件 中,常用版 和 完整版 已经包含了 SVG 渲染器,可直接使用。而 精简版 没有包括。
如果 在线自定义构建 ECharts,则需要勾上页面下方的 “SVG 渲染”。
如果 线下自定义构建 ECharts,则须引入 SVG 渲染器模块,即:
import 'zrender/lib/svg/svg';

然后,我们就可以在代码中,初始化图表实例时,传入参数 选择渲染器类型:

// 使用 Canvas 渲染器(默认)
var chart = echarts.init(containerDom, null, {renderer: 'canvas'});
// 等价于:
var chart = echarts.init(containerDom);

// 使用 SVG 渲染器
var chart = echarts.init(containerDom, null, {renderer: 'svg'});
### EChartsSVG 渲染Canvas 渲染的区别 ECharts 支持两种渲染模式:CanvasSVG。这两种技术在底层实现上有显著区别。 #### 技术特性对比 - **SVG (Scalable Vector Graphics)** 是一种基于 XML 的矢量图形格式,允许图像无限缩放而不失真[^5]。这使得 SVG 特别适合用于需要高质量显示的场合。 - **Canvas** 则是一个位图绘制环境,在 HTML 页面中通过 JavaScript 来操作像素点进行绘图。它更适合处理大量数据和复杂动画效果[^1]。 #### 初始化配置 当使用 ECharts 创建图表时,可以通过设置 `renderer` 参数来选择渲染引擎: ```javascript var myChart = echarts.init(document.getElementById('main'), null, { renderer: 'svg' // or 'canvas' }); ``` 对于预构建版本,默认已经包含了 SVG 渲染器的支持;但对于精简版则需额外引入相应模块[^3]。 ### 使用场景分析 根据不同应用场景的特点可以选择合适的渲染方式: - **PC端商务报表** - 当软硬件条件良好且数据量适中时,两者均可胜任此任务,具体选择取决于个人偏好[^4]。 - **移动端尤其是低端设备** - 如果目标平台为性能较弱的移动终端(如某些老旧型号或低配 Android 设备),建议优先尝试 SVG 渲染器以减少内存消耗并提高稳定性。 - **高负载情况下的大数据集展示** - 对于涉及大规模数据可视化的需求,Canvas 显示出更好的效率优势,尤其是在频繁更新或存在较多交互行为的情况下。 - **特殊类型的图表** - 如水球图这类特定样式的设计,可能会因为其独特的视觉表现形式而在不同的渲染环境下有不同的呈现质量,此时应根据实际测试结果做出最佳决策。 ### 性能考量因素 除了上述提到的应用场景外,还需要关注以下几个方面的影响: - 浏览器兼容性及优化程度; - 图表组件的数量及其复杂度; - 用户界面响应速度的要求等。 综上所述,在决定采用何种渲染方案之前,应当充分评估项目背景以及预期的工作负荷等因素后再做定夺。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值