背景
我做在单个VPS上托管多个node.js应用程序已经有一段时间了,一切都很好。
通过使用nginx将流量路由到node.js应用程序所需的不同端口,我能够做到这一点。
升级到http2
使用最近的推动http2,我一直试图通过启用http2来支持我的应用程序。在nginx上,我通过遵循指南通过nginx做到了这一点。
问题所在
在进行基准测试时,性能似乎没有增加,而在一个为主页获取47个请求的测试网站上使用http2。
理论
这可能是因为nodejs服务于http1而不是http2吗?
我必须在nginx和我的nodejs应用程序之间设置任何东西吗?例如,proxy_http_version: 2.0,proxy_http_version 2.0 似乎还没到。
我的nodejs应用程序与快递服务,所以我真的是得到一个http2连接还是得到一个http连接呢?
当我使用http2指示器时,它会告诉我网站使用的是蓝光指示的http2。我必须使用molnarg http2模还是nginx http2模块足够了?
希望有人有更多的开发操作经验,可以帮助我澄清这一点,并希望其他许多开发人员。
发布于 2016-01-31 11:22:45
所以有几件事需要注意。
首先,有必要回顾一下http/2与http/1.1的不同之处,在那里这将有所帮助,而在那里却没有帮助。
当需要通过低延迟连接下载大量资源时,Http/2将主要受益于延迟。还有一些其他的好处,但这是主要的性能好处。
在http/1.1下,如果您请求一个页面(例如index.html),并且它加载了10个CSS资源和10个javascript资源,那么浏览器将依次请求这20个资源中的每一个,等待请求从浏览器一直传递到服务器,然后返回,直到它可以请求下一个资源。服务器可能会非常快地获得资源(特别是对于css和javascript这样的静态资源),因此大部分时间将用于在Internet上来回旅行,而不是在两端处理它。这些数字很小(例如,100 on往返),但每次多个请求加在一起(例如,2,000 on或2秒钟,对于这个示例,-ignoring处理时间在两边)。浏览器试图通过向服务器打开多个请求(通常为4-6)来解决这个问题,因此当有一个请求队列(如这里的20个请求)时,它们可以并行地获得4-6请求,而不是等待每个请求依次完成。因此,在本例中,我们可能可以将其拆分为在4个连接上加载20个资源中的5个,所以可能只需500 to就可以全部下载它们--这是对单个连接的很好改进。但是在建立和管理这些额外的联系方面,这是个莫名其妙的问题。
Http/2旨在通过允许通过单个连接以任何顺序发送请求,而不必等待响应,从而减少这种影响。因此,浏览器可以通过一个接一个的连接请求这20个资源,而不必等待每个资源返回。因此,这些请求同时在互联网上进行并行传输。因此,在最好的情况下,我们只需要等待单个往返(100 to )的长度,才能交付所有20个资源。
关键是,对于单个资源,http/2本身并不“更快”。对很多资源来说更快。在一个完全优化的场景中(例如0MS的延迟),http/1.1和http/2请求将几乎完全相同,没有真正的性能改进。
因此,随着这个理论的支持,让我们用你的具体情况指出几点:
https://stackoverflow.com/questions/34892701
复制相似问题