工作原理
SVG 是 XML,因此 XML 允许的一切在它里面都合法:注释、处理指令、命名空间声明、元数据元素以及外来命名空间中的任意属性。渲染器会忽略其中绝大部分。Inkscape 的命名空间声明、sodipodi 的 namedview 元素、Adobe 的生成器注释、图层标签和 RDF 元数据块,合起来占了典型导出文件的多数体积,却完全不影响绘制结果。移除它们是收益最大且完全安全的一步。
属性级清理是第二遍。许多属性被写成了默认值——fill-opacity 为 1、stroke-linecap 为 butt、stroke-width 为 1——而所谓默认值,定义上就是属性缺失时渲染器会采用的值,因此删除它什么都不会改变。xml:space、version、enable-background 之类的噪声属性要么已废弃,要么根本不会被读取。未引用的 id 只有在文件中确实没有任何东西指向它时才会被删除,因为 id 是 url(#)、clip-path、mask、filter 等引用的目标,删掉被引用的那个会破坏图形。
坐标精度是文件能在毫无视觉代价的情况下大幅减重的地方。矢量编辑器产出的路径经常带六位小数,于是坐标写成 48.1234567,而 48.12 在任何屏幕能呈现的尺寸下渲染结果都完全相同。保留两位小数通常能让路径的 data 属性长度减半。把精度降到两位以下也是可以的,对大型插画偶尔有用,但降到一位或更少时曲线上的伪影就会变得可见。
gzip 解释了为什么原始体积的变化幅度会低估真实收益。由于 SVG 是文本,HTTP 服务器会压缩它,而冗长形式中的冗余意味着压缩后的体积往往比原始数字所暗示的更接近优化后的体积——原始缩小 70% 的文件,在网络上可能只缩小 40%。两个数字都会给出,让实际收益可见而不是靠假设。唯一必须看原始体积的场景,是把 SVG 直接内联进 HTML 文档:那里没有单独的压缩步骤,原始体积的节省就是全部的节省。
常见应用场景
- 在提交之前,清除从 Figma 或 Illustrator 导出的图标里的编辑器元数据。
- 为处于页面加载关键路径上的内联 SVG 标志减重。
- 在嵌入邮件模板或 PDF 流程之前清理 SVG。
- 查看一个文件的体积里有多少是真实图形、多少是工具开销。
- 对以过高精度程序化生成的地图或图表 SVG 做坐标取整。
- 生成紧凑的 SVG,直接粘贴进 HTML 或 JSX 文件。
最后更新: 2026-10-14