“Hello world” Rust webserver在Chrome测量时比Node慢,但在curl中不慢。

10

我创建了一个包含基于Node.js的和基于Rocket.rs的 Web 服务器的存储库。

按照以下步骤操作:

  1. 通过 cargo run --release 启动 Rocket.rs 服务器。
  2. 通过 node server.js 启动 Node.js 服务器。
  3. 在 Chrome 中并排打开 http://localhost:8000/(Rocket)和 http://localhost:8090/(Node)。
  4. 打开开发者控制台,同时刷新这两个选项卡,并观察到 Node 标签页始终在 5ms 以下完成,而 Rocket 标签有时需要超过 300ms 才能完成:

进入图像描述

我也观察到在 actix-web 中类似的事情,尽管程度较小:在那种情况下,只有在约 5 秒钟没有刷新选项卡时,我才会出现 ~300ms 的延迟。如果我一直刷新它,那么请求会在 5ms 以下完成。

有趣的是,如果我像这样通过curl进行测量,这个这个,延迟似乎不会发生。两个服务器的延迟都大约为4毫秒。
我注意到Rocket和actix-web没有在其响应中发送Keep-Alive头。如果我理解正确的话,这对于HTTP 1.1请求不应该有影响。
我正在使用安装了Ubuntu的WSL 2。Chrome在主机Windows上运行。
能否有人解释一下这里发生了什么?
更新:忘记提到我在使用夜间编译器构建火箭服务器(火箭v0.4.6似乎需要它)。切换到stable并直接从master分支构建后,延迟消失了。然而,actix-web的延迟仍然有点令人担忧,因为我在那个项目中使用了stable编译器。

你尝试过分别运行这两个应用程序来测量性能吗?这样做是否仍然表现出相同的性能特征? - Ted Klein Bergman
@TedKleinBergman 是的,同样的行为。 - Attila Kun
1
"网站速度很慢,无论如何都会是我的回答 :p 我怀疑出了什么问题,因为这看起来像是一个很大的间隔。" - Stargateur
1
与其手动和非正式地使用chrome/curl进行这些基准测试,您应该使用专门用于基准测试Web服务器的某些CLI工具。如果基准测试的结果仍然表明Rocket&actix-web比node.js慢,那么您应该在Rocket&actix-web Github存储库上开启问题。 - pretzelhammer
1
@pretzelhammer 感谢提供链接。使用ApacheBench无法重现此问题;正如预期的那样,Rust服务器始终优于Node服务器。 - Attila Kun
可能是浏览器的问题。查看瀑布流和时间信息,看看请求是否被阻止或等待。 - Alex W
1个回答

1
在Windows上运行,使用Node响应时间大约为2-4毫秒,而在Rocket上为1-2毫秒。 在您的环境中发生了一些奇怪的事情。
还尝试从WSL提供服务,结果相同。
即使在调试(Rust)中,平均需要比发布版多+1毫秒,这可能是一些奇怪的浏览器问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接