微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

“Hello world”Rust 网络服务器从 Chrome 而非 curl 测量时比 Node 慢

如何解决“Hello world”Rust 网络服务器从 Chrome 而非 curl 测量时比 Node 慢

我创建了一个存储库,其中包含一个 Node.js based一个 Rocket.rs based 网络服务器。

考虑以下步骤:

  1. 通过 cargo run --release 启动 Rocket.rs 服务器
  2. 通过 node server.js 启动 Node.js 服务器
  3. 在 Chrome 中并排打开 http://localhost:8000/ (Rocket) 和 http://localhost:8090/ (Node)。
  4. 打开开发者控制台后,我不断刷新两个选项卡,并观察到 ​​Node 选项卡总是在 5 毫秒内完成,而火箭选项卡有时需要超过 300 毫秒才能完成:

enter image description here

我也用 actix-web 观察到类似的事情,但程度较小:在这种情况下,如果我没有刷新选项卡大约 5 秒,我只会得到大约 300 毫秒的延迟。如果我不断刷新它,那么请求会在 5 毫秒内完成。

有趣的是,如果我通过像 thisthis 这样的 curl 进行测量,似乎不会发生延迟。我的两台服务器都有大约 4 毫秒的延迟。

我注意到 Rocket 和 actix-web 不会在它们的响应中发送 Keep-Alive 标头。如果我理解正确,这对于 HTTP 1.1 请求应该无关紧要。

我在安装了 Ubuntu 的情况下使用 WSL 2。 Chrome 在主机 Windows 中运行。

有人可以解释一下这里发生了什么吗?

更新: 忘了说我用的是 nightly 编译器来构建火箭服务器(Rocket v0.4.6 似乎需要它)。直接从主分支更改为稳定和构建摆脱了延迟。尽管如此,actix-web 延迟仍然有点令人担忧,因为我使用了稳定的编译器。

解决方法

全部从窗口运行,在节点中响应时间大约为 2-4 ms,在火箭中为 1-2 ms。您的环境中发生了一些奇怪的事情。

也尝试从 WSL 提供服务,结果相同。

即使在 debug(rust) 时,它也比发布时花费的时间平均多 +1ms,这可能是一些奇怪的浏览器问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。