Base64内联图片真的能提升性能吗?为什么我用了反而更慢了?
最近在做页面性能优化,听说把小图标转成 Base64 内联到 CSS 里可以减少 HTTP 请求,就试了一下。但上线后发现首屏加载反而变慢了,而且 HTML 文件体积明显变大。
我用的是 Webpack 的 url-loader,配置阈值是 8KB 以下的图片自动转 Base64。比如这个 SVG 图标:
.icon-home {
background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwIDE5djNoNGwtMTQgNXYtM2wxNC01ek0xMiAzbC05IDYgOSA2IDktNi05LTZ6Ii8+PC9zdmc+');
}
是不是我理解错了?什么情况下才适合用 Base64 内联?还是说现在 HTTP/2 下已经不推荐这么做了?
拿去改改这个配置,把阈值降到2KB试试:
记住Base64会增加33%左右的体积,小图标还好说,超过2KB就别转了。现在HTTP/2下多请求开销没那么大,反而大文件内联会影响首屏渲染。
另外建议看看是不是重复加载了多个相同图标,这种情况用CSS Sprite可能更合适。总之优化这事得看具体场景,不能盲目跟风。累死我了,又一个被网上的“最佳实践”坑了的...