【问题标题】: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 请求的详细描述以及资产类型。或者,更好的是,您的测试代码的可重现示例。

标签: performance nginx http2


【解决方案1】:

在我看来,

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

  1. 许多并行请求
  2. 小型请求/响应负载
  3. 高 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 项目报告问题。
    猜你喜欢
    • 2016-02-13
    • 2016-04-01
    • 2016-09-10
    • 2020-12-28
    • 2017-12-14
    • 2019-04-28
    • 2017-12-08
    • 2017-06-17
    • 2014-11-02
    相关资源
    最近更新 更多