如果使用http2,Browserpaint是否有任何变化?

如果使用http2,Browserpaint是否有任何变化?,http,paint,http2,Http,Paint,Http2,我们正在考虑将一个包含许多网站的服务器迁移到http2。现在有一个问题是,如果使用http2并并行下载所有Resources,浏览器可能需要更长的时间才能开始绘制/呈现仅使用http的页面,因为它正在等待下载所有Resources,而不是只从已经存在的资源开始,并在下载时继续重新绘制内容 我认为这是错误的,但我没有找到文章或很好的解释,因此我可以向那些认为这可能是事实的人证明这一点。浏览器将在有绘制所需的资源时绘制,这在HTTP/2下基本不会改变 我不知道你为什么认为浏览器会等待下载HTTP/2

我们正在考虑将一个包含许多网站的服务器迁移到http2。现在有一个问题是,如果使用http2并并行下载所有Resources,浏览器可能需要更长的时间才能开始绘制/呈现仅使用http的页面,因为它正在等待下载所有Resources,而不是只从已经存在的资源开始,并在下载时继续重新绘制内容


我认为这是错误的,但我没有找到文章或很好的解释,因此我可以向那些认为这可能是事实的人证明这一点。

浏览器将在有绘制所需的资源时绘制,这在HTTP/2下基本不会改变

我不知道你为什么认为浏览器会等待下载HTTP/2下的所有资源,而不是HTTP/1.1下的所有资源

某些资源(例如CSS和Javascript,除非设置为async属性)是渲染块,必须在进行初始绘制之前下载它们。理论上,HTTP/2对于多次下载来说速度更快,所以如果您转到HTTP/2,那么应该发生的就是这些下载会更快,所以它会更早绘制

现在,浏览器在HTTP/1.1(通常为6-8)下使用的连接数量有限,这就产生了一种自然的排队机制,浏览器必须将这些关键资源优先于图像等非关键资源,并首先发送它们。对于HTTP/2,有一个更高的限制(通常是100-120次并行下载,具体取决于服务器),因此浏览器不再优先考虑,而且存在一个问题,即如果所有资源都并行下载,那么它们可能会相互减慢速度。例如,下载50个大打印质量的图像将占用大量带宽,同时可能会使更重要的CSS资源下载花费更长的时间。事实上

这是通过HTTP/2中的优先级和依赖关系来解决的,在HTTP/2中,服务器可以以比其他资源类型(例如图像)更高的优先级发送某些资源类型(例如CSS、JavaScript),而不是以相同的优先级发送所有资源。因此,即使所有51个资源同时运行,CSS数据也应该先发送,然后再发送图像。客户机也可以建议优先级,但最终由服务器决定。这确实取决于服务器实现是否具有良好的优先级策略,因此在切换之前进行测试是很好的

另一件值得记住的事情是,如何在HTTP/2下度量这种变化。如果一个低优先级映像在HTTP/1下排队4秒,等待有限数量的HTTP/1连接中的一个变为免费,然后在2秒内下载,那么您以前可能已经将其测量为2秒下载时间(这在技术上是不正确的,因为您没有包括排队时间,所以实际上是6秒)。因此,如果这显示为HTTP/2下立即发送的5秒,您可能会认为它慢了3秒,而实际上它快了整整一秒。在分析任何迁移到HTTP/2的影响时,需要注意一些事项。因此,在衡量影响时,最好查看总体关键指标(第一次绘制、文档完成等),而不是单个请求


顺便说一句,这是一个非常有趣的话题,超出了合理预期的答案。这是一个无耻的插件,但如果有兴趣了解更多信息,我会介绍很多这方面的内容。

如果web服务器遵守浏览器请求的优先级,则理想情况下不会发生您提到的事情。在http2上,浏览器通常请求具有最高优先级的css和具有较低优先级的异步js图像。这将确保即使同时请求图像、js和css,服务器也会首先返回css

只有在浏览器配置不正确的情况下才会发生这种情况

您可以在ChromeDevTools中查看任何页面的各种资源的优先级