我一直在寻找一个Greasemonkey的userscript的来源,发现在他们的CSS如下:将背景图像数据嵌入到CSS中作为Base64的好坏做法?
.even { background: #fff url(data:image/gif;base64,R0lGODlhBgASALMAAOfn5+rq6uvr6+zs7O7u7vHx8fPz8/b29vj4+P39/f///wAAAAAAAAAAAAAAAAAAACwAAAAABgASAAAIMAAVCBxIsKDBgwgTDkzAsKGAhxARSJx4oKJFAxgzFtjIkYDHjwNCigxAsiSAkygDAgA7) repeat-x bottom}
我可以理解,Greasemonkey的脚本将要捆绑源内任何它可以相对于在承载它一个服务器,这很明显。但因为我还没有看到这种技术以前,我认为它的使用,似乎吸引了许多的原因:
- 这将减少对页面加载的HTTP请求的数量,从而提高性能
- 如果没有CDN,那么它会降低通过cookie产生的业务量,图像
- CSS文件可以被缓存
- CSS文件可以用gzip压缩
考虑到被一起发送的IE6(FO r实例)有背景图像缓存的问题,这似乎是不是最坏的想法...
所以,这是一个好或坏的做法,为什么你不会使用它,你会用什么工具来base64编码图像?
更新 - 测试的结果与图像
测试:http://fragged.org/dev/map-shot.jpg - 133.6Kb
专用CSS文件: http://fragged.org/dev/base64.css - 178.1Kb
GZIP编码服务器侧
发送到客户机得到的尺寸(YSlow的 组件测试):59.3Kb
发送到的客户端浏览器的数据保存:74.3 Kb
不错,但会略少我猜,对较小的图像有用。
UPDATE:布莱恩·麦奎德,在谷歌的软件工程师,上的PageSpeed工作,表达了ChromeDevSummit 2013的数据:在CSS的URI被认为是阻止呈现反模式为他的演讲
#perfmatters: Instant mobile web apps
期间提供关键/最少的CSS 。请参阅http://developer.chrome.com/devsummit/sessions并记住这一点 - actual slide
做一些测试运行?有趣的是,压缩能够弥补你base64对它进行编码的事实。 – Dykam 2009-07-14 08:39:24
发布了测试的结果,也可以在我的博客http://fragged.org/compressing-jpeg-images-via-base64-data-and-gzip-deflating_1264.html – 2011-02-18 15:35:39
好问题。只是想补充说,它不适用于IE7及以下版本。但是有一些解决方法。这是一个很好的文章http://jonraasch.com/blog/css-data-uris-in-all-browsers – MartinF 2011-06-29 14:46:32