编写一个 “Hello World” 的 Web 服务器,Go、Node.js、Nim 和 Bun 谁更快?

【CSDN 编者按】作者通过简单内容分别测试Go、Node.js、Nim、Bun服务器的性能状态,一起来学习下!

原文链接:https://lemire.me/blog/2023/10/07/web-server-hello-world-benchmark-go-vs-node-js-vs-nim-vs-bun/

未经允许,禁止转载!

作者 | Daniel Lemire       译者 | 弯月
责编 | 夏萌出品 | CSDN(ID:CSDNnews)

编写小型Web应用程序有许多流行的框架。Go和JavaScript(Node.js)是最流行的选择。据说,Netflix 选择了 Node.js,而 Uber 为了更好的性能从 Node.js 迁移到了 Go 上。还有一些不那么流行的选择,比如 Nim。

详细分析它们的性能很难。不过使用这些框架编写一个非常小的Web应用程序,能看出明显的区别吗?最小的应用程序可以作为基准参考,因为更复杂的程序通常会更慢。

我们来试试看。我需要一个相当于“hello world”的Web服务器。我不想要任何复杂的东西,一切保持简单就好。

最简单的Go服务器如下所示:

最基本的JavaScript(Node.js)服务器如下所示:

这段程序在Bun等其他运行时中可以直接运行,但为了获得Bun运行时的最佳性能,你需要编写Bun的专用代码:

Nim提供了一种方便的方法来实现同样的结果:

另一种很有趣的方法是在Node下使用uWebSockets.js:

也可以使用C++和lithium库:

我做了一次性能评测。程序跑在一台强大的IceLake架构的64核服务器上。通常,这种大型服务器的时钟频率比较低(基频2GHz,最高能到3.2GHz)。性能测试采用了一个简单的bombardier命令:

bombardier -c 10 http://localhost:3000/simple

上面的并发连接数可以一直加到1000(-c 1000)。一开始时我用了autocannon,但发现不太好用。

测试结果表明,在这个小型应用程序上,Nim的表现非常好。

系统

每秒请求数(10连接)

每秒请求数(1000连接)

Nim 2.0 和  httpbeast

315,000  +/- 18,000

350,000  +/- 60,000

GCC12  (C++) + lithium

190,000  +/- 60,000

385,000  +/- 80,000

Go 1.19

95,000 +/-  30,000

250,000  +/- 45,000

Node.js 20 和uWebSockets.js

100,000  +/- 25,000

100,000  +/- 35,000

Bun 1.04

80,000 +/-  15,000

65,000 +/-  20,000

Node.js 20  (JavaScript)

45,000 +/-  7,000

41,000 +/-  10,000

Bun +  fastify

40,000 +/-  6,000

35,000 +/-  9,000

* Bun的作者Jarred Sumner在X上说,bun中的fastify还不够快,但Bun.serve()比node:http快两倍以上。

我的Web服务器的任务非常小,所以只是一种特殊情况。我也没有进行任何配置,这只是“原始”的性能。何况,这台服务器也比通常程序员们使用的服务器更强大。

这个结果有很大的干扰,所以你不应该盲从这些数字。建议你自己跑一次性能测试。

我还看了一些其他的文章,大家都认为Go更快:

  • Http Server Performance: NodeJS vs. Go(https://betterprogramming.pub/http-server-performance-nodejs-vs-go-397751e8d275) 一文认为Go比Node.js快34%。他们的测试更贴近实际情况,所以更真实一些。

  • Server-side I/O Performance: Node vs. PHP vs. Java vs. Go https://www.toptal.com/back-end/server-side-io-performance-node-php-java-go)一文认为GoNode.jsJava容易扩展得多,而PHP排在最后。在压力测试中,他们发现JavaNode.js平手,而Go的速度是它们的两倍。

  • Performance Benchmarking: Bun vs. C# vs. Go vs. Node.js vs. Pythonhttps://www.wwt.com/blog/performance-benchmarking-bun-vs-c-vs-go-vs-nodejs-vs-python) 一文认为BunGo是赢家,而Node.js只有大概一半的速度。C#的性能尚可,而Python最慢。

很想看看C、Rust和Zig在这个测试中的结果。

关于C++实现,我一开始遇到了许多问题。事实证明使用Lithium非常简单。最困难的地方就是确保你的系统上装了OpenSSL和Boost。我的解决方案和其他方案同样简单。Lithium的作者非常善解人意地给出了怎样在docker容器中运行Lithium服务器。这就意味着你不需要在系统上安装库。在docker容器中运行服务器非常合理,但有性能的额外开销,所以我在测试中没有使用。

在撰写本文时,我很开心第一次编译Nim语言的软件。不得不说,Nim给我留下了很好的印象。作者声称,Nim的创意来自Python。它的确很像Python。稍后我会重新看看Nim。

推荐阅读:

重构“彻底”的百度文库,如何成为内容生产的新起点?

▶一图速览!1024 程序员节亮点抢先看

媲美GPT-4,百度公布文心大模型4.0;英伟达芯片将被出口管制,多家国内厂商回应;微软AutoGen爆火|极客头条

相关推荐

  • 中国大模型掌门人首次集结、全球研发中心掌门人齐聚现场,1024 程序员节「岳麓对话」重磅官宣!
  • 如何在亚马逊少走弯路?从DIY定制生意开始
  • 北大机器人当上亚运志愿者,全靠学生把多模态大模型结合具身智能
  • 算法人才vs工程人才,大模型时代谁更重要?|对话澜舟科技
  • 超火迷你GPT-4视觉能力暴涨,GitHub两万星,华人团队出品
  • 大模型搞“人肉搜索”,准确率高达95.8%!研究作者:已提醒OpenAI谷歌Meta
  • Nature发文:该放开「一稿多投」了
  • 马斯克一觉醒来,纯视觉NOA已在中国开跑:上海闹市一镜到底0接管,高速城区全都不用自己开
  • LeCun和Bengio“吵”起来了,人工智能是“潘多拉魔盒”吗?
  • 让大模型真正学会1+1=2!谷歌教会模型自动学习推理规则,大模型的幻觉有救了
  • 偏偏不信文心大模型4.0比肩GPT-4!我为它们安排了一场龙虎斗!
  • 研发深恶痛绝,业界持续热捧,DDD 到底是啥?
  • 程序员真实薪资变化
  • 使用FHE实现加密大语言模型
  • 再玩玩B端搭建
  • Node.js 21正式发布
  • 小米澎湃OS界面曝光
  • 程序员在AI时代何去何从?一起来源创会聊聊
  • 大神用Scratch手搓RISC-V模拟器,成功运行Linux内核
  • 忘记交换机密码?别慌,这里有详细的解决方案!