优化文件缓存和HTTP2

spa*_*223 8 performance browser-cache pagespeed http2

我们的网站正在考虑切换到http2.

我的理解是http2渲染文件连接等优化技术已经过时,因为使用http2的服务器只发送一个请求.

相反,我看到的建议是,最好保持较小的文件大小,以便它们更有可能被浏览器缓存.

它可能取决于网站的大小,但如果网站的文件使用http2并希望专注于缓存,它应该有多小?

在我们的例子中,我们的许多单独的js和css文件都在1kb到180kb的范围内.Jquery和bootstrap可能更多.累积起来,我们网站上新下载的页面通常不到900 kb.

所以我有两个问题:

这些文件大小是否足够小,可以被浏览器缓存?

如果它们小到可以缓存,那么对于使用不支持http2的浏览器的用户来说,连接文件是否合适.

在这种情况下拥有更大的文件大小并使用HTTP2会不会有害?这样,运行任一协议的用户都会受益,因为站点可以针对http和http2进行优化.

Bar*_*ard 9

让我们澄清一些事情:

我的理解是http2渲染文件连接等优化技术已经过时,因为使用http2的服务器只发送一个请求.

HTTP/2渲染优化技术(如文件串联)有点过时,因为HTTP/2允许许多文件在同一连接上并行下载.以前,在HTTP/1.1中,浏览器可以请求文件,然后必须等到该文件完全下载才能请求下一个文件.这导致了诸如文件串联(以减少所需文件的数量)和多个连接(允许并行下载的黑客)之类的变通方法.

然而,有一个反驳论点,即仍然存在多个文件的开销,包括请求它们,缓存它们,从缓存中读取它们等等.它在HTTP/2中大大减少但没有完全消失.另外,gzipping文本文件在较大的文件上工作得更好,而不是分别对大量较小的文件进行gzipping.就个人而言,我认为其缺点超过了这些问题,我认为一旦HTTP/2无处不在,连接就会消失.

相反,我看到的建议是,最好保持较小的文件大小,以便它们更有可能被浏览器缓存.

它可能取决于网站的大小,但如果网站的文件使用http2并希望专注于缓存,它应该有多小?

文件大小与它是否会被缓存无关(除非我们讨论的是比缓存本身更大的真正大量文件).将文件拆分为较小块的原因更适合缓存,因此如果进行任何更改,则仍可以从缓存中使用任何未触摸的文件.如果您在一个大的.js文件中拥有所有的javascript(例如),并且您更改了一行代码,则需要再次下载整个文件 - 即使它已经在缓存中.

类似地,如果你有一个图像精灵图,那么这对于减少HTTP/1.1中的单独图像下载非常有用,但是如果你需要编辑它以添加一个额外的图像,则需要再次下载整个精灵文件.更不用说整个东西都被下载了 - 即使对于只使用其中一个图像精灵的页面也是如此.

然而,说了这么多,有一种思路认为长期缓存的好处已经过时了.请参阅此文章,特别是有关HTTP缓存的部分,该部分显示大多数人的浏览器缓存比您想象的要小,因此您的资源不太可能被缓存很长时间.这并不是说缓存并不重要 - 但更重要的是它在该会话中而不是长期浏览时非常有用.因此,每次访问您的网站都可能会再次下载您的所有文件 - 除非他们是非常频繁的访问者,拥有非常大的缓存,或者不在网上冲浪.

对于使用不支持http2的浏览器的用户来说,连接文件是否合适.

有可能.但是,除了在Android上,HTTP/2浏览器支持实际上非常好,因此大多数访问者可能已启用HTTP/2.

如果说,在HTTP/2下连接文件没有额外的缺点,而这些文件在HTTP/1.1下已经不存在了.好吧,可以说有一些小文件可以通过HTTP/2并行下载,而较大的文件需要作为一个请求下载,但我不会购买它会减慢任何速度.没有这方面的证据,但直觉感觉表明仍然需要发送数据,因此无论是哪种方式都存在带宽问题,或者您没有.此外,请求许多资源的开销虽然在HTTP/2中大大减少,但仍然存在.对于大多数用户和站点而言,延迟仍然是最大的问题 - 而不是带宽.除非您的资源非常庞大,否则我怀疑您是否注意到我在下载1大资源之间的区别,或者将相同的数据拆分为10个并行下载的HTTP/2小文件(尽管您会在HTTP/1.1中) .更不用说上面讨论的gzipping问题了.

所以,在我看来,连续一段时间连续没有害处.在某些时候,您需要调用下方是否超过给定用户配置文件的好处.

在这种情况下拥有更大的文件大小并使用HTTP2会不会有害?这样,运行任一协议的用户都会受益,因为站点可以针对http和http2进行优化.

绝对不会受伤.如上所述,在HTTP/2下连接文件(基本上)没有额外的缺点,而这些文件在HTTP/1.1下已经不存在了.它只是在HTTP/2下不再需要并且有缺点(可能减少缓存使用,需要构建步骤,使调试更加困难,因为部署的代码与源代码不同......等等).

使用HTTP/2,你仍然可以看到任何网站的巨大好处 - 除了最简单的网站,可能看不到任何改善,但也没有负面.而且,由于旧版浏览器可以坚持使用HTTP/1.1,因此它们没有任何缺点.何时,或者如果您决定停止实施HTTP/1.1性能调整,如连接是一个单独的决定.

事实上,只有使用HTTP/2的原因是实现仍然相当容易,所以你可能不习惯在它上面运行你的生产网站.

****2016年8月编辑****

这个帖子来自图像重,带宽限制,网站最近引起了对HTTP/2社区的一些兴趣,作为HTTP/2实际上比HTTP/1.1慢的第一个文档示例之一.这突出了HTTP/2技术和理解仍然是新的事实,并且需要对某些站点进行一些调整.似乎没有免费午餐这样的东西!非常值得一读,但值得注意的是,这是一个极端的例子,大多数网站受到更多影响,性能明智,延迟问题和HTTP/1.1下的连接限制而不是带宽问题.