为什么我的HTTP / 2流比HTTP / 1.1和HTTPS慢

时间:2017-02-23 16:46:07

标签: performance nginx http2

对于我的研究,我正在分析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一样快。但是为什么在20KB和50KB的测试运行中,HTTP / 2减慢了20%以上。有谁知道原因是什么?

我在服务器端使用nginx 1.10.0。 在客户端铬。延迟:50ms。丢包率很低。

2 个答案:

答案 0 :(得分:0)

我刚刚使用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推送甚至更好。 您可以在线找到大量的HTTP / 2演示证实了这一点。

上面的快速测试代码可以找到here

我怀疑它可能是一些nginx问题,可能与流量控制有关(因为只有较大的图像尺寸才会出现问题)。

答案 1 :(得分:0)

在我看来,

由其机制决定的 HTTP/2 在满足这些条件(但不限于)时显示出比 HTTP/1.1 的速度优势:

  1. 许多并行请求
  2. 小的请求/响应负载
  3. 高 RTT 值

如果上述大多数条件都没有满足(例如下载单个大文件),那么 HTTP/2 的性能可能比 HTTP/1.1 差。