首页 > 其他分享 >Echarts:渲染成Canvas还是SVG,该如何抉择?

Echarts:渲染成Canvas还是SVG,该如何抉择?

时间:2024-07-09 13:29:40浏览次数:12  
标签:Canvas 渲染器 SVG echarts 使用 图形 Echarts

ECharts 从初始一直使用 Canvas 绘制图表。而 ECharts v4.0 发布了 SVG 渲染器,从而提供了一种新的选择。在初始化图表实例时,只需设置 renderer 参数 为 'canvas' 或 'svg' 即可指定渲染器,比较方便。贝格前端工场带领大家看下如何选择。

一、Canvas和SVG的区分

Canvas和SVG都是用于在网页上绘制图形的技术,如果你了解位图和矢量图的区别,就很容易了解二者区分,但它们有一些重要的区别:

1. 绘图方式:

- Canvas:使用JavaScript绘制图形,它是一个位图绘图技术,通过在画布上绘制像素来创建图形。

- SVG:使用XML标记语言描述图形,它是基于矢量的绘图技术,通过描述图形的路径、形状和属性来创建图形。

2. 图形质量:

- Canvas:由于是位图绘图技术,当图形放大时会失真,因此在放大时可能会出现模糊或锯齿状的边缘。

- SVG:基于矢量的绘图技术,图形可以无损放大,因此在放大时保持较好的质量。

3. 缩放和变换:

- Canvas:缩放和变换需要手动计算和处理,较为复杂。

- SVG:支持内置的缩放、平移和旋转功能,可以更方便地进行图形变换和交互。

4. 事件处理:

- Canvas:需要手动处理鼠标事件和交互,如点击、拖动等。

- SVG:图形元素可以直接绑定事件处理程序,因此在交互性方面更加方便。

综上所述,Canvas适合处理大量的动态图形和游戏等场景,而SVG则更适合静态图形、图表和需要放大缩小的场景。在选择使用Canvas还是SVG时,需要根据具体的需求和场景来进行权衡。


二、渲染器的选择

一般来说,Canvas 更适合绘制图形元素数量较多(这一般是由数据量大导致)的图表(如热力图、地理坐标系或平行坐标系上的大规模线图或散点图等),也利于实现某些视觉 特效。但是,在不少场景中,SVG 具有重要的优势:它的内存占用更低(这对移动端尤其重要)、并且用户使用浏览器内置的缩放功能时不会模糊

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

  • 在软硬件环境较好,数据量不大的场景下,两种渲染器都可以适用,并不需要太多纠结。
  • 在环境较差,出现性能问题需要优化的场景下,可以通过试验来确定使用哪种渲染器。比如有这些经验:

在需要创建很多 ECharts 实例且浏览器易崩溃的情况下(可能是因为 Canvas 数量多导致内存占用超出手机承受能力),可以使用 SVG 渲染器来进行改善。大略的说,如果图表运行在低端安卓机,或者我们在使用一些特定图表如 水球图 等,SVG 渲染器可能效果更好。

数据量较大(经验判断 > 1k)、较多交互时,建议选择 Canvas 渲染器。


三、如何使用渲染器

如果是用如下的方式完整引入echarts,代码中已经包含了 SVG 渲染器和 Canvas 渲染器

import * as echarts from 'echarts';

如果你是按照 在项目中引入 Apache ECharts 一文中的介绍使用按需引入,则需要手动引入需要的渲染器

import * as echarts from 'echarts/core';
// 可以根据需要选用只用到的渲染器
import { SVGRenderer, CanvasRenderer } from 'echarts/renderers';

echarts.use([SVGRenderer, CanvasRenderer]);

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

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

// 使用 SVG 渲染器
var chart = echarts.init(containerDom, null, { renderer: 'svg' });

在echarts中,可以通过配置项来选择使用渲染器。具体来说,可以通过设置renderer属性来指定使用SVG或Canvas进行渲染。

// 使用SVG渲染
option = {
    renderer: 'svg',
    // 其他配置项
};

// 使用Canvas渲染(默认)
option = {
    // 其他配置项
};

通过在echarts的配置项中设置renderer属性为'svg'或'canvas',可以指定echarts使用相应的渲染器进行图表渲染。这样可以根据具体需求来选择使用SVG或Canvas渲染。

Hi,我是贝格前端工场,10年前端和UI老司机了,持续为大家分享有价值、有见地的观点、作品、干货,欢迎评论、关注、点赞、有事请私信。


 

标签:Canvas,渲染器,SVG,echarts,使用,图形,Echarts
From: https://blog.csdn.net/m0_57344393/article/details/140284220

相关文章

  • 前端画图引擎ZRender,echarts的渲染器,你知道吗?
    Zrender是一个轻量级的Canvas和SVG渲染库,它提供了一个高性能的图形绘制和交互的解决方案,用于在Web页面上创建丰富的数据可视化和交互式图形。可能大部分小伙伴不知道这个类库,本文给大家科普一下。一、Zrender是谁?该项目由EFE团队开发而来,项目托管在GitHub上。Zrender基于HT......
  • 提升ECharts图例可读性的实用技巧
    在使用echarts进行数据可视化时,图例(legend)是帮助用户理解图表中各个系列所代表含义的重要组件。然而,在实现过程中,我们可能会遇到一些常见问题,本文将分享一些关于echarts图例分页的注意事项和解决方案。1.图例中出现多余的undefined数据在使用echarts的legend组件时,如果未正确......
  • echarts 折线图拼接
    效果图: <scriptsetuplang="ts">import*asechartsfrom'echarts';import{ref,watch,nextTick,computed}from'vue';import{useRouteParams}from'@/hooks/useRouteParams';import{queryIncreaseTrend......
  • 获取Echarts的geoJson文件(省市/区县)
    1.获取市的级别直接使用阿里云提供的工具直接获取: https://datav.aliyun.com/portal/school/atlas/area_selector#&lat=32.62087018318113&lng=118.43261718749999&zoom=4和 https://map.easyv.cloud/和 https://geojson.hxkj.vip/  2.获取县和区的细到街道的geoJson,需......
  • 学习canvas(一些常用api)
    当然,以下是这些常用CanvasAPI的总结,按照Markdown格式编写:常用CanvasAPI总结1.获取绘图上下文constcanvas=document.getElementById('myCanvas');constctx=canvas.getContext('2d');//或'webgl'2.绘制矩形ctx.fillStyle='blue';ctx.fillRect(1......
  • 学习canvas(初步入门)
    canvas一些基础api用法首先需要创建一个canvas<canvasid="canvas"></canvas>然后获取到这个元素,可以用Document.getElementById('canvas')constcanvas=document.getElementById("canvas");然后拿到他的上下文对象ctx(然后可以在上下文的位置绘制内容)constcan......
  • 使用Canvas封装图片压缩功能
    最近在学习和工作中遇到这样一个场景:如何将前端上传的图片进行压缩传递给服务端?因为此前从未了解过图片压缩的功能,所以也是带着好奇进行了一番学习,那么我的解决思路如下展示整体思路创建input框实现图片上传将上传的文件转成base64格式前端通过base64进行原始图片展示,并将此......
  • canvas—元素样式设置
    一、色彩:fillStyle=colorstrokeStyle=color二、透明度: 三、线型:设置线条宽度:lineWidth=value设置线条末端样式:lineCap=type设定线条与线条间接合处的样式:lineJoin=type限制当两条线相交时交接处最大长度:miterLimit=value ......
  • React+TS前台项目实战(二十六)-- 高性能可配置Echarts图表组件封装
    文章目录前言CommonChart组件1.功能分析2.代码+详细注释3.使用到的全局hook代码4.使用方式5.效果展示总结前言Echarts图表在项目中经常用到,然而,重复编写初始化,更新,以及清除实例等动作对于开发人员来说是一种浪费时间和精力。因此,在这篇文章中,将封装一个“高......
  • 将svg格式的图片转为png格式的图
    ""D:\桌面\素材2-副本\coffee.svg"先安装Python中的cairosvg库pipinstallcairosvgimportcairosvgdefconvert_svg_to_png(svg_file_path,png_file_path):"""将SVG文件转换为PNG文件。:paramsvg_file_path:SVG文件的路径。:paramp......