内联base64编码的图像或HTTP请求?

时间:2011-03-04 10:56:58

标签: css optimization

在CSS中至少有两种使用图像的方法:

  • 带有HTTP请求;

    URL(/path/to/image.png)

  • 带有数据网址。

    URL(数据:图像/ PNG; BASE64,BASE64_ENCODED_DATA_HERE)

但是我想知道,因为base64编码的数据占用的空间增加了33%,因此加载时间增加了33%,是否值得,或者我应该只发出HTTP请求 - 如果有几个请使用sprite图象?

3 个答案:

答案 0 :(得分:4)

单独的请求几乎总是可取的,因为使用data: URI,

  • 它在旧IE中不起作用,在IE8中限制为32k

  • 可以说它违背了样式和内容的分离

  • 样式表文件被炸毁,如果浏览器的开发人员从不希望CSS文件达到这些大小,可能会造成麻烦

我会在没有其他选择时使用它。

答案 1 :(得分:4)

Web服务器应该通过GZIP处理所有文本文件来节省33%的空间,这样就不会出现这么大的问题。这与减少HTTP请求的数量(which is very important performance-wise)一起使得该方法值得。此外,图像仍然被缓存,但现在在CSS文件中,而不是在单独的文件中。

优选地,嵌入应该使用插入数据URI的构建脚本来完成。这样,在编辑CSS文件时,我们不必关心大块base64编码的数据。此外,如果图像在文件中出现多次,请记住要有一个好的解决方案。重写CSS规则。我们不希望文件大于必要的大小。

虽然IE存在问题。 IE< = 7根本无法处理数据URI,IE8无法处理大于32K的URI。后者可以通过简单地不嵌入太大的图像来解决(也许你不应该这样)。关于IE< = 7,可以通过使用MHTML来解决问题,并使用IE条件注释为不同的浏览器指定不同的CSS文件。

这是一篇关于在CSS中嵌入图像以及如何解决IE问题的好文章:http://blog.meebo.com/?p=2320

答案 2 :(得分:1)

就个人而言,我总是会另外提出要求。我以前在使用Internet Explorer和数据方面遇到了麻烦:url images。

似乎IE8将网址长度限制为32KB,这对图像来说通常是不够的。

Wikipedia on Browser Support