浅谈浏览器图表渲染及前端适配

一、关于浏览器图表渲染

前端绘制图表一般是借助数据可视化框架去完成,数据可视化是个很火的领域,如果在 Github 上搜索 chart 会发现有 7.9w 个结果,出名的Echarts, Highcharts,D3,AntV G2…等等。关于框架的选择不是今天讨论的重点,关键点在于其背后的技术基础。
Echarts.js是基于canvas的,而D3.js和Highcharts.js是基于SVG去做的。
尽管前端绘图技术有很多种,今天主要来说一下canvas和SVG,也是面试被问几率比较高的问题。

1、SVG

SVG 指可伸缩矢量图形 (Scalable Vector Graphics)
基于可扩展标记语言(XML),用于描述二维矢量图形的一种图形格式。SVG是W3C制定的一种新的二维矢量图形格式,也是规范中的网络矢量图形标准。SVG严格遵从XML语法,并用文本格式的描述性语言来描述图像内容,因此是一种和图像分辨率无关的矢量图形格式。
这意味着 SVG DOM 中的每个元素都是可用的,图像在放大或改变尺寸的情况下其图形质量不会有所损失,不依赖分辨率,支持事件的绑定。

2、canvas

canvas是HTML5标准中的一个元素,javascript为其提供了一些绘图API,通过canvas生成的图像是栅格形式的,即像素图像。
这意味着canvas是逐像素进行渲染的,依赖分辨率,不支持事件处理器。

3、二者区别

Canvas

  • html5的新标签
  • 依赖分辨率
  • 标量图
  • 不支持事件处理器
  • 弱的文本渲染能力
  • 绘制图形通常是通过javascript来实现
  • 能够以 .png 或 .jpg 格式保存结果图像
  • 最适合图像密集型的游戏,其中的许多对象会被频繁重绘

SVG

  • 历史相对久远
  • 不依赖分辨率
  • 矢量图
  • 支持事件处理器
  • 更多的是通过标签来实现
  • 最适合带有大型渲染区域的应用程序(比如谷歌地图)
  • 复杂度高会减慢渲染速度
  • 不适合游戏应用

为了体会二者技术差异,做了一个小demo。
在这里插入图片描述同样的柱状图,通过svg和canvas两种方式如何去实现:

<?xml version="1.0" standalone="no"?>
<!DOCTYPE ht
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值