跳到正文
在线 SVG 编辑器

如何为网页优化 SVG 文件

更小的 SVG,肉眼看不出差别。

发布于 2026-03-08

网页上的大多数 SVG 比它们需要的体积大 2–4 倍。Figma、Illustrator 和 Inkscape 导出时都会塞入元数据、隐藏图层和冗长的路径数据,这些重量最终都要发给用户。好消息是:SVG 优化完全是机械的流程,在浏览器里就能搞定。

会被剥离的内容

一个典型的优化器会跑 30–40 条规则,每条做一件事。最大的几项收益来自:

  • 元数据 —— <metadata><title><desc>、Inkscape 命名空间和 Figma 注释。对视觉没有任何影响。
  • 注释与 CDATA —— 从不显示,生产环境不需要。
  • 隐藏图层 —— 导出工具漏下的 display="none" 或透明度为 0 的元素。
  • 冗余 transform —— 一个什么都不做的 translate(0,0) 或已合并的矩阵。
  • 精度 —— 路径坐标从 6 位小数取整到整数像素。
  • 默认属性 —— 一个本来就是黑色的元素上写着 fill="black"
  • ID —— 没被引用或自动生成的 ID。

要保留的内容

  • viewBox —— 没有它,响应式缩放会失效。
  • 无障碍标题 —— 如果 SVG 是内容(而不是装饰),要为屏幕阅读器保留 <title><desc>
  • 语义化类名 —— 如果你用 CSS 为 SVG 加动画或样式,不要让优化器重命名这些类。

运行优化器

把你的 SVG 粘贴进 SVG 优化器 然后点击优化。它在浏览器里运行(不会上传),并会显示优化前后的体积对比。

一个典型的 Figma 导出通常能瘦身 30–60%。手写的 SVG 瘦身幅度会小一些(一般 10–20%),因为本来就没什么可剥离的。

优化出问题时

激进的优化有时会打破几件具体的事:

  • 用 ID 引用元素的动画 —— 如果 ID 被重命名,动画会失效。
  • 查询特定类名的脚本 —— 如果类名被压缩,脚本会出错。
  • 带稀有效果的滤镜 —— 如果数值精度压得太低,渲染结果会不一样。

如果优化后的 SVG 渲染异常,先把 cleanupIds: falseremoveHiddenElems: false 作为起点,然后用二分法找到真正引发问题的那个插件。

自动化

对构建流程来说,用 npm 的 svgo 包加到资源管道里。对一次性的任务,浏览器里的工具更快。目标其实一样:只发送浏览器真正需要的内容。