gpt4 book ai didi

node.js - 我正在提供http或http2吗?

转载 作者:搜寻专家 更新时间:2023-11-01 00:17:29 24 4
gpt4 key购买 nike

背景

我已经有一段时间hosting multiple node.js apps on a single VPS了,一切都很好。

通过使用nginx将流量路由到node.js应用程序所需的不同端口,我能够做到这一点。

升级到http2

对于最近的push for http2,我一直在尝试通过启用http2来支持我的应用程序。在nginx上,我能够通过nginx的following the guide做到这一点。

问题

在进行基准测试时,性能似乎并没有增加,而在测试网站上使用http2却可以获取47个首页请求。

httphttp2的性能似乎相似。

理论

可能是由于nodejs服务于http1而不是http2吗?

我必须在Nginx和Node.js应用之间进行任何设置吗?例如proxy_http_version: 2.0但是,proxy_http_version 2.0 doesn't seem to be available yet

我的nodejs应用程序与express一起提供,所以我是否真的获得了http2连接或获得了http连接?

当我使用http2 indicator时,它通过指示蓝灯告诉我该网站正在使用http2。
我必须使用molnarg's http2 module还是nginx http2模块足够?

希望有更多开发运营经验的人可以帮助我,甚至希望其他开发人员也能解决这个问题。

最佳答案

因此,需要注意一些事项。

首先,值得回顾一下http/2与http/1.1的不同之处,这将在哪里有所帮助,而在何处没有帮助。

当需要通过低延迟连接下载大量资源时,Http/2将主要使延迟受益。还有其他一些好处,但这是主要的性能好处。

在http/1.1下,如果您请求一个页面(例如index.html),并且该页面加载了10个CSS资源和10个javascript资源,那么浏览器将依次请求这20个资源中的每一个,并等待请求从头开始。浏览器返回到服务器,然后返回,直到它可以请求下一个资源。服务器可能可以很快地真正获得资源(尤其是对于诸如CSS和javascript之类的静态资源),因此大部分时间将花费在Internet上来回移动,而不是在两端进行处理。这些数字很小(例如100ms往返),但是它们乘以多个请求的时间(例如本示例为2,000ms或2秒-忽略了双方的处理时间)。浏览器尝试通过向服务器打开多个请求(通常为4-6个)来解决此问题,因此当存在请求队列(例如此处的20个请求)时,他们可以并行获取4-6个,而不必等待每个请求完成连续地。因此,在此示例中,我们可能能够将其拆分为通过4个连接中的每一个加载20个资源中的5个,因此下载所有资源可能只需要500毫秒-与单个连接相比,这是一个很好的改进。但这有点不正确,在建立和管理这些额外的连接时也有其自身的问题。

Http/2旨在通过允许在单个连接中以任意顺序发送请求,而不必等待响应来减少这种影响。因此,浏览器可以通过单个连接请求这20个资源,一个接一个地请求,而不必等待每个资源返回。因此,请求同时并行地在Internet上传输。因此,在最佳情况下,我们只需要等待一次往返的时间(100毫秒)即可交付所有20种资源。

关键在于,对于单个资源,http/2本身并不是“更快”的。对于许多资源来说,这只是更快。在完全最佳的情况下(例如,延迟为0毫秒),http/1.1和http/2请求几乎相同,而实际性能没有任何改善。

因此,根据我们所掌握的理论,让我们指出您的特定情况下的一些注意事项:

  • Nginx-> Node连接的重要性比Browser-> Nginx的重要性小。这是因为该连接的延迟会更加糟糕(假设您的Nginx和Node位于彼此足够靠近的服务器(甚至可能是同一台服务器)上,因此它们之间的延迟最小。我可以想象您的Nginx-> Node连接仍然是 http/1.1,但这并不是真正的问题,并且因为Nginx能够同时打开到不同 Node 服务器的多个连接(甚至多个连接)到同一 Node 服务器)。
  • 您要在哪里进行测试以及到您的Web服务器的跃点数?例如,如果在公司网络上以及与数据中心相同的网络上进行测试,则延迟将很低,因此改进可能不会很明显。我从您的屏幕截图中看到,您已在开发人员工具中将连接设置为“Wi-Fi”,但仍然可能不够慢,无法看到性能提高。
  • 延迟是您的网页/应用程序的问题吗?可能是您的网站已经过 super 优化,以至于它可以按需要的顺序获取所需的资源,并且几乎不能满足所有20个请求的需求。然后在两端处理这些请求/响应都需要时间-在浏览器中解析和呈现CSS/JavaScript或在服务器中处理请求(例如,因为它必须进行大量处理或连接到DB才能返回)该资源)。因此,网络延迟实际上可能不是您的网站的问题(尽管,但除了最简单的网站以外,对于所有网站而言,这都是一个问题)。
  • 在http/2仍处于相当前沿的情况下,如何衡量改进?我听说过一些轶事证据,表明Chrome开发者工具尚未准确报告http/2次,并且正在销售这些好处。其他性能测试工具甚至可能根本不了解http/2,因此可能会回退到http/1.1。以下是http/2测试资源的列表,但是,就像Chrome开发人员工具可能会使用的一样,大多数似乎对测试您是否正在使用http/2而不是它的任何性能优势很有帮助:https://blog.cloudflare.com/tools-for-debugging-testing-and-using-http-2/
  • 关于node.js - 我正在提供http或http2吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34892701/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com