HTTP/2和响应图像

问题描述:

我目前正在试验http/2和服务器推送规则。实现js和css文件的推送规则非常容易,但似乎无法有效地使用响应图像的推送功能,如图片标记和/或srcset属性。 当然,我可以将每个版本的图像都推送给客户端,但这会造成交通灾难,特别是在流量有限的移动设备上。HTTP/2和响应图像

据我所知,浏览器获得的每个文件推的承诺。当文件已被缓存时,诺言用于中断推送。我希望这种说法是正确的。

有没有办法告诉浏览器,使得图像仅仅是一个特殊的屏幕尺寸或像素比例是多少?

当然,我可以将图像的每一个版本推向客户端,但 这将是一个灾难的交通,特别是在与 交通限制的移动设备。

是的,这将打败使用不同版本(主要是作为带宽节省)。

据我所知,浏览器得到了每个文件推送的承诺。当缓存文件已经 时, 承诺用于中断该推送。我希望这种说法是正确的。

是的,但是,如果您认为可以让浏览器取消取消请求,那么您需要认识到1)浏览器通常只会对缓存中已存在的请求执行此操作, 2)取消需要花费时间,由此推送资源的一些(或者甚至全部)可能已经被不必要地下载。

有没有办法告诉浏览器,一个图像只是一个 特殊的屏幕尺寸或像素比例?

您不会将图像推送到屏幕上,而是推送到浏览器缓存,因此推送的资源将根据页面(如正确的srcset值)适当使用。但是,如上所述,您不希望它们被不必要地推送,或者您正在浪费带宽。

的关键成功使用服务器推送是要合理确定资源需要 - 或者你实际上会造成性能瓶颈。我诚恳地建议不要推动所有的东西,而只是推动那些几乎可以肯定需要(CSS,JavaScript)的关键,呈现阻止的资源。图像通常不会被屏蔽,因此通常不需要大量推送图像。

这可以用cookie来处理。如果没有设置cookie,那么它可能是一个新的会话,因此推送关键的CSS文件并设置“cssLoaded”cookie。如果请求页面,并且设置了该cookie,则不要推送CSS文件。我在博客中介绍了Apache的简单实现:https://www.tunetheweb.com/performance/http2/http2-push/。这仍然可能导致过度推动 - 例如,如果客户端不允许cookie - 但对于大多数用户来说,它会很好。

你可以扩展这个进一步,通过使JavaScript的设定与屏幕尺寸的饼干,然后后续的页面加载时,服务器可以读取该cookie,知道屏幕尺寸,并推动适当大小的图像。这对初始页面加载没有帮助,但是如果您的访问者在同一会话中访问您网站上的多个页面,将有助于其他页面加载。但说实话,这听起来像是矫枉过正,我只是不推动图像。

+0

谢谢你的解释。这对我有很大的帮助 –