Date
Nov. 21st, 2024
 
2024年 10月 21日

Post: Why SVG?

Why SVG?

Published 12:11 Nov 01, 2016.

Created by @ezra. Categorized in #Programming, and tagged as #HTML.

Source format: Markdown

Table of Content

SVG是什么?

SVG是一种可缩放矢量图形 (英语: Scalable Vector Graphics, SVG) 是基于可扩展标记语言 (XML) , 用于描述二维矢量图形的图形格式。SVG由W3C制定, 是一个开放标准。

简单的理解, 它是图形的另一种格式例如它和常见的图片格式.png、.jpg、.gif等是一类。

SVG发展历程

  • 2001年9月4日, 发布SVG 1.0
  • 2003年1月4日, 发布SVG 1.1
  • 2003年1月14日, 推出SVG移动子版本: SVG Tiny和SVG Basic
  • 2008年12月22日, 發布SVG Tiny 1.2
  • 2011年8月16日, 發布SVG 1.1 (第2版) , 成为W3C目前推荐的标准
  • W3C目前仍正在研究制定SVG 2

他在2001年就已经被加入到W3C的标准中去了, 历时这么久终于到了该翻身的时候了。

它和传统图片格式有什么不同?

1. 兼容现有图片能力前提还支持矢量

SVG提供的功能集涵盖了嵌套转换、裁剪路径、Alpha通道、滤镜效果等能力, 它还具备了传统图片没有的矢量功能, 在任何高清设备都很高清。点击查看下面这张SVG图形:

这样一张高质量的矢量图片它的质量仅仅只有:

2. 可读性好, 有利于SEO与无障碍

由于SVG采用的是XML语法, 图形的里面的文本内容可以直接被浏览器, 搜索引擎SEO和无障碍读屏软件读取, 具体用法如下代码设置title与desc标签即可:

为什么要用SVG?svg与iconfont、图片多维度对比

与icon font对比

1. 渲染方式不同

icon font采用的是字体渲染, icon font在一倍屏幕下渲染效果并不好, 在细节部分锯齿还是很明显的, SVG上面我说过它是图形所以在浏览器中使用的是图形渲染, 所以SVG却没有这种问题, 请看下图对比:

为什么要用SVG?svg与iconfont、图片多维度对比

2. icon font只能支持单色

icon font做为字体无法支持多色图形, 这就对设计造成了许多限制, 因此这也成为了icon font的一个瓶颈。

3. icon font可读性不好

icon font主要在页面用Unicode符号调用对应的图标, 这种方式不管是浏览器, 搜索引擎和对无障碍方面的能力都没有SVG好

SVG的制作成本与维护成本

目前制作SVG设计软件有: Adobe Illustrator、Visio以及CorelDRAW等, 用AI画图对设计师是否会产生额外成本, 我还专门咨询了组内几个设计师: "用PS画一个图形和用AI画一个图形的所需时间是一样" (来自我组峰哥, 华D哥, 登哥, 丹哥原话) , AI做好后直接导出成SVG格式给前端同学即可使用。相比制作字体包要步骤简单许多。

在维护性方面: 做成SVG对设计师之前的工作量也有一定的提升, 过去他们同一个图不同尺寸在PS输出都需要调整一次图形, 因为如果直接等比例缩放图形尺寸, 会出现图片有锯齿。但是用SVG以后, 不同尺寸的控制都有前端同学直接调整SVG宽高参数就能实现不同尺寸切换, 且不会有锯齿。

SVG的性能测试

性能应该是大家最关注的为题了, 为了测试的可靠性, 我在icomoon挑选了 491个 免费ICON, 分别生成了svg图标和icon font在Chrome Timeline做了测试, 测试内容分别对demo页面491图标的 Loading、Rendering、Painting 这三个指标做了测试

1. svg与ion font性能对比

(1) 结果svg整体是的 Rendering项基本上是碾压了icon font, 数据如下:

页面图标数量: 491个

为什么要用SVG?svg与iconfont、图片多维度对比

上图SVG案例中我用了两种不同引用方式, 一种是在页面直接inline svg方式插入的方法和用svg sprite合并后引用图标的两种, 结果显示svg sprite的性能是最高的。

(2) 大批量的测试结果SVG性能已经比较有保证了, 但实际项目中一个页面不可能会存在这么多图标, 我们按正常页面出现图标10-30个这个区间, _取15个图标为中间值在进行一次测试看看, 结果如何:

页面图标数量: 15个

为什么要用SVG?svg与iconfont、图片多维度对比

Rendering的渲染结果和之前差不多, icon font所用时间依旧比svg icon要多很多, 但是inline svg和svg sprite两种不同用法之间的差异却变得非常小, 几乎Rendering的时间是差不多的。

2. svg sprites与png sprites性能对比

这个测试通过将svg sprites生成对应的1倍图png sprites来进行测试, 图标在页面的实际大小是相等的。

测试图标数量: 491个

为什么要用SVG?svg与iconfont、图片多维度对比

文件大小上面svg sprites大了png sprites将近一倍, Rendering也比图片要长很多, 但最终两者之间综合所消耗时间差不多

测试图标数量: 15个

为什么要用SVG?svg与iconfont、图片多维度对比

文件大小svg sprites与png sprites差不多, Rendering也比图片要长很多, 但最终两者之间综合所消耗时间差不多。

SVG动画

SVG还有一项动画的能力, 目前在许多H5中的有趣动画很多都是用SVG做的。

兼容性

为什么要用SVG?svg与iconfont、图片多维度对比

关于兼容性, 在咱祖国一直是一个比较伤感的话题, 不过从IE9开始已经开始兼容SVG了, 安卓3.X开始局部支持。

总结

通过上面所述, SVG在既能满足现有图片的功能的前提下, 又是矢量图, 在可访问性上面也非常不错, 并且有利于SEO和无障碍, 在性能和维护性方面也比icon font要出色许多, 总之大家可以根据项目实际情况去尝试使用。

Pinned Message
HOTODOGO
The Founder and CEO of Infeca Technology.
Developer, Designer, Blogger.
Big fan of Apple, Love of colour.
Feel free to contact me.
反曲点科技创始人和首席执行官。
开发、设计与写作皆为所长。
热爱苹果、钟情色彩。
随时恭候 垂询