ATSvg

SVG 文件太大怎么办:svgo 与手动清理

承接搜索意图:性能

首页 › SVG 使用指南 › SVG 文件太大怎么办:svgo 与手动清理

一份从设计工具直接导出的 SVG,体积里常常有一半是编辑器元数据、注释、隐藏图层和过高的小数精度。精简不是可选项:图标会在列表里重复出现几十次,每多 1KB 都会被乘上这个次数。

本文目录

先看文件里到底有什么

用文本编辑器打开,常见冗余包括 <metadata>、<!-- 注释 -->、编辑器命名空间、未使用的 <defs>、transform 包裹层、以及 6 位以上的小数。线性图标如果超过 2KB,多半有可压空间;插画大图超过几十 KB 也值得处理。

svgo 做什么,哪些插件要谨慎

svgo 是社区常用的 SVG 优化工具,默认会做去注释、去元数据、合并路径、压缩数字、精简颜色等。但有几项默认或可选行为要留意:removeViewBox 会破坏响应式缩放,通常应关掉;cleanupIDs 在多个 SVG 内联到同一页时可能造成 id 冲突,需要加前缀;convertShapeToPath 会让后续编辑变困难。

手动清理的三个高收益动作

① 删除所有写死的 fill / stroke,改成 currentColor;② 把重复的 transform="translate(...)" 折进 path 坐标;③ 如果同一页要放多个图标,考虑做成一张 SVG sprite,用 <use> 引用,减少请求数。

<!-- sprite 用法示意 -->
<svg style="display:none"><symbol id="i-close" viewBox="0 0 24 24">
  <path d="M6 6l12 12M18 6L6 18"/></symbol></svg>
<svg width="24" height="24"><use href="#i-close"/></svg>

压缩之外的两件事

给静态 SVG 配好缓存头与 gzip / brotli;列表里非首屏的图标加 loading="lazy"。体积减小和请求减少要一起做,单靠 svgo 解决不了首屏堆几十张大插画的问题。

压缩前后怎么验收

别只盯着文件小了多少。压完做三件事:把优化前后的 SVG 并排渲染在同一尺寸下,看线条有没有位移、圆角有没有变尖;把文件重新导进设计工具,确认还能正常编辑;最后在目标浏览器里看一次,尤其是用了 <use> 或 clipPath 的文件。svgo 的某些插件会合并看起来「等价」的路径,结果在低版本渲染引擎里出现细微差别。把这套验收放进构建流程,比每次上线前靠肉眼抽查可靠。

常见问题

优化后图标显示变小或裁掉了?多半是 viewBox 被插件删掉或改过。保留 viewBox,并检查 width/height 是否还与实际比例一致。
所有 SVG 都要压吗?几百字节的线性图标收益有限;从设计工具导出、带元数据的大图收益最明显。

← 返回全部使用指南 · 许可与使用常见问题 →

相关素材 · 12 个素材

继续读

指南总览