为啥我的 HTTP/2 流比 HTTP/1.1 和 HTTPS 慢
Posted
技术标签:
【中文标题】为啥我的 HTTP/2 流比 HTTP/1.1 和 HTTPS 慢【英文标题】:Why is my HTTP/2 stream slower than HTTP/1.1 and HTTPS为什么我的 HTTP/2 流比 HTTP/1.1 和 HTTPS 慢 【发布时间】:2017-07-14 06:44:04 【问题描述】:在我的研究中,我正在分析 HTTP/2 与 HTTP/1.1 和 HTTPS 的性能对比。
在我的测试中,我加载了一组 128 张图像,以查看 HTTP/2 是否因其多路复用流而受益。在每次测试中,图像的大小分别为 2KB、20KB 和 50KB。
I got the following results for Page Load Time
最初,我会假设 HTTP/2 会比 HTTP/1.1 更快,或者最大速度与 HTTP/1.1 一样快。但是为什么 HTTP/2 在 20KB 和 50KB 的测试运行中要慢 20% 以上。有谁知道原因可能是什么?
我在服务器端使用 nginx 1.10.0。 在客户端 chrome 上。延迟:50 毫秒。丢包率低。
【问题讨论】:
只有结果,没有关于您正在衡量的案例的更多细节,没有多少人可以提供建议。也许您可以详细说明正在加载的确切内容,例如资产数量、http 请求的详细描述以及资产类型。或者,更好的是,您的测试代码的可重现示例。 【参考方案1】:在我看来,
当满足这些条件(但不限于)时,由其机制决定的 HTTP/2 显示出比 HTTP/1.1 的速度优势:
-
许多并行请求
小型请求/响应负载
高 RTT 值
如果上述大多数条件都没有满足(例如下载单个大文件),那么 HTTP/2 的性能可能比 HTTP/1.1 差。
【讨论】:
【参考方案2】:我刚刚使用 Jetty 进行了测试(免责声明,我是 HTTP/2 Jetty 维护者)。
Jetty 9.4.2,JDK 8u121,模拟网络往返 50 毫秒(通过 tc
)。
20 张图片,每张 2k:
HTTP/1.1: ~275 ms
HTTP/2: ~170 ms
HTTP/2 Push: ~155 ms
20 张图片,每张 20k:
HTTP/1.1: ~380 ms
HTTP/2: ~200 ms
HTTP/2 Push: ~155 ms
20 张图片,每张 50k:
HTTP/1.1: ~380 ms
HTTP/2: ~220 ms
HTTP/2 Push: ~155 ms
除了这个快速测试之外,我们的经验是 HTTP/2 多路复用确实有效地减少了最终用户的延迟。 HTTP/2 和 HTTP/2 Push 更好。 您可以在网上找到大量 HTTP/2 演示也证实了这一点。
上面的快速测试代码可以在here找到。
我怀疑这可能是一些 nginx 问题,可能与流量控制有关(因为您只在较大的图像尺寸时遇到问题)。
【讨论】:
感谢您的回答!我怀疑同样的事情,流量控制是问题所在。有什么想法可以用 nginx 解决这个问题吗? 向 nginx 项目报告问题。以上是关于为啥我的 HTTP/2 流比 HTTP/1.1 和 HTTPS 慢的主要内容,如果未能解决你的问题,请参考以下文章