http - 在 HTTP/2 中使用图像 Sprite 有意义吗?

标签 http png jpeg http2 image-optimization

JS和CSS文件的捆绑won't be necessary in HTTP/2 ,但是图像 Sprite 呢?

查看the demo它似乎已经比 HTTP/1.1 运行得更快,但是将图像捆绑到 sprite 中不会使它更快吗?我的意思是,当所有数据都在一个文件中时,PNG 的优化算法不会更好地工作吗?

最佳答案

这取决于您的图片大小和格式。如果图像足够大,使用 sprite 不会有太多好处,但对于小图像,即使使用 HTTP/2 也会有显着的好处。使 HTTP/2 更好的是 header 的开销要少得多,而且往返次数可能更少(前提是服务器实现了 PUSH)。问题是,您的文件应该多小才能考虑将它们捆绑在一起?

对于位图,您提出了一个很好的观点,即 PNG 的优化算法有利于 Sprite ,特别是当它们的尺寸足够小时。例如,虽然 this article from Gabriel Bouvigne 中的图像是 17.4 kb,切片它会产生 132 个单独的图像,总计 135 kb。当您为传输添加少量但仍然存在的额外开销时,它接近十倍。是的,当服务器和客户端之间的带宽有限时,大小仍然很重要。

实际上,这也涉及文本资源,例如javascript、css 和SVG 文件。如果它们足够小并且不经常变化,您仍然可以考虑将它们捆绑在一起。例如,ng folder 中的 Javascript如果作为单独的、缩小的和压缩的 js 传输,Angular 的源代码需要 69.6 kb。如果在 gzip 之前将它们连接起来,它只有 31.9 kb。然而,这里的因素略高于 2,如果 HTTP/2 节省连接时间和往返次数,它可能不会那么重要。这进一步平衡了单独缓存资源的可能性。

最后一点,如果您的小图像/图标是 SVG 矢量(它们应该!),那么它们算作文本资源。此外,SVG 矢量往往更大一些,例如 Firefox's SVG icon压缩后为 15.7 kb。在这种规模下,如果 HTTP/2 好东西在工作,链接到它与内联或捆绑的决定是显而易见的。

关于http - 在 HTTP/2 中使用图像 Sprite 有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32160790/

相关文章:

http - Azure IoT 中心将协议(protocol)从 AMQP 更改为 HTTP

ios - 避免在 UIImageView 中使用白色背景

r - 设置knitr输出单独的图像

德尔福2006 : Run-time assignment of PNG to TImage loses alpha transparency

c# - 如何获得磁盘/文件上图像的宽 x 高比?

PHP JPEG 函数不工作

javascript - 使用 javascript/css 将 64 位字符串转换为 jpeg

angularjs - 预检响应具有无效的 HTTP 状态代码 403

http - 带有数据参数的 ionic 2 inappbrowser POST 表单

asp.net - 您如何确定禁用 cookie *没有* javascript 和 *没有* 重定向?