SVG 性能优化:循序渐进 4 步法
目标:先减负 → 再复用 → 后加速 → 最后按场景微调
① 精简—把包袱先丢掉
- 删除无用元素 
- 隐藏/被遮挡的 
<path>、未引用的<defs>里渐变、滤镜。 
 - 隐藏/被遮挡的 
 - 合并路径 
- 同填充色或描边的路径 ⇒ SVGO / SVGOMG「Merge paths」。
 
 - 转模板复用 
- 把可复用图形放进 
<symbol viewBox="…">,实例用<use href="#id">。 
 - 把可复用图形放进 
 
② 复用—同一份资源多次用
| 做法 | 作用 | 提示 | 
|---|---|---|
<symbol> + <use> | 只渲染一次,内存轻 | SVG2 用 href,别再写 xlink:href | 
| 外链 SVG spritemap | 浏览器可缓存 | <use href="sprite.svg#icon-star"> | 
CSS currentColor | 主题换色 0 成本 | 图标自动跟随字体色 | 
③ 加速—动画与渲染
- 动画只动“transform / opacity”
@keyframes float {to {transform: translateY(-10px)}} svg g.bubble {will-change: transform; animation: float 2s infinite;} - 避免帧改 
<path d>:手写效果用stroke-dashoffset。 - 开启合成层:
will-change或在第一次动画前transform: translateZ(0)触发 GPU。 
④ 微调—针对大文件 / 低端机
| 场景 | 优化点 | 
|---|---|
| 文件 > 30 KB | <img loading="lazy">(Chrome/Edge/Opera)+ decoding="async" | 
| 复杂滤镜 | 预烘焙成 PNG / WebGL | 
| 大图当背景 | preserveAspectRatio="xMidYMid slice",保证填充不变形 | 
| 子像素锯齿 | 保持默认抗锯齿,勿强设 shape-rendering="crispEdges" | 
📌 记忆口诀
“删冗余 → 设模板 → 变形动 → 按需载”
遵循这四步,复杂 SVG 也能在移动端轻松跑满 60 fps。