我服务http或http2?

use*_*154 2 nginx node.js http2

背景

我已经在一个VPS上托管了多个node.js应用程序一段时间,而且一切都很好.

我可以通过使用nginx将流量路由到node.js应用程序所需的不同端口来实现.

升级到http2

随着最近对http2的推动,我一直试图通过启用http2来支持我的应用程序.在nginx上,我可以按照 nginx 的指南进行操作.

问题

在进行基准测试时,在测试网站上使用http2获取主页的47个请求时,性能似乎没有增加.

httphttp2的性能似乎相似.

理论

可能是因为nodejs服务于http1而不是http2?

我必须在nginx和我的nodejs应用之间设置任何东西吗?例如,proxy_http_version: 2.0然而,proxy_http_version 2.0 似乎没有可用还.

我的nodejs应用程序服务于快递,所以我真的得到一个http2连接或获得HTTP连接?

当我使用http2指示器时,它告诉我该网站通过指示蓝灯使用http2.我是否必须使用molnarg的http2模块或nginx http2模块是否足够?

希望有更多开发经验的人可以帮助我清除这一点,并希望其他许多开发人员.

Bar*_*ard 6

所以有一些事情需要注意.

首先,值得回到http/2与http/1.1的不同之处,这将有所帮助,而不会有所帮助.

Http/2主要有利于延迟,并且需要通过低延迟连接下载大量资源.还有一些其他好处,但这是主要的性能优势.

在http/1.1下如果你请求一个页面(比如index.html),并且它加载10个CSS资源和10个javascript资源,那么浏览器将依次请求这20个资源中的每一个,等待请求从浏览器到服务器并返回,直到它可以请求下一个资源.服务器可能非常快速地获取资源(特别是对于像css和javascript这样的静态资源),所以这段时间大部分时间用于在Internet上来回传输而不是在任何一端处理它.这些数字很小(例如100ms往返),但是它们加起来的次数是多次(例如,这个例子为2,000ms或两秒 - 两侧的处理时间).浏览器试图通过向服务器打开多个请求(通常为4-6)来解决这个问题,所以当有一个请求队列(如此处的20请求)时,它们可以并行获得4-6而不是等待每个请求完成连续.因此,在这个例子中,我们可以将它拆分为在4个连接中的每个连接上加载20个资源中的5个,因此可能只需要500ms即可全部下载 - 这是对单个连接的一个很好的改进.但这有点像软糖,并且在设置和管理这些额外连接时有自己的问题.

Http/2旨在通过允许在单个连接上以任何顺序发送请求来减少这种影响,而无需等待响应.因此,浏览器可以通过单个连接一个接一个地请求这20个资源,而无需等待每个资源返回.因此,请求同时在Internet上同时传输.因此,在最佳情况下,我们只需要等待所有20个资源的单次往返(100ms)的长度.

关键点在于http/2本身对于单个资源来说并不"更快".它对许多资源来说速度更快.在完全最佳的情况下(例如0ms的延迟),http/1.1和http/2请求几乎完全相同,没有真正的性能改进.

因此,有了我们背后的理论,让我们针对您的具体情况指出一些事项:

  1. 关于Nginx-> Node连接比Browser-> Nginx更重要.这是因为该连接的延迟会更糟(假设您的Nginx和Node位于一起足够接近的服务器上(或者甚至可能是同一台服务器),因此这些服务器之间的延迟最小).我想你的Nginx-> Node连接仍然 http/1.1,但由于这个原因,这并不是真正的问题,也因为Nginx能够同时打开多个连接到不同的节点服务器(甚至多个连接到相同的节点服务器).

  2. 您在哪里测试以及您的网络服务器有多少跳?例如,如果在公司网络上进行测试,并且在与数据中心相同的网络上进行测试,那么延迟将会很低,因此改进可能并不明显.我从您的屏幕截图中看到,您在开发人员工具中设置了与"Wi-Fi"的连接,但仍然可能不足以看到性能提升.

  3. 延迟是否适用于您的网页/应用?它可能是您的网站如此超级优化,它按需要获得所需的资源,并且几乎无法跟上所有20个请求.然后在任何一端处理这些请求/响应需要时间 - 在浏览器中解析和渲染CSS/JavaScript或在服务器中提供请求(例如,因为它必须进行大量处理或连接到DB以返回那个资源).因此,网络延迟实际上可能不会对您的网站造成问题(但是,除了最简单的网站之外的所有网站都存在问题).

  4. 如何衡量改进,鉴于http/2仍然相当流行?我听说过轶事证据表明,Chrome开发者工具还没有准确地准确报告http/2次,并且正在销售这些优势.其他性能测试工具甚至可能根本不知道http/2,因此可能会回退到http/1.1.这是一个http/2测试资源的列表btw但是,就像Chrome开发人员工具可能做的那样,大多数似乎都有助于测试你是否使用http/2而不是它的任何性能优势:https://blog.cloudflare. COM /工具-用于调试测试功能和使用-HTTP-2 /