Skip to content

搞英语 → 看世界

翻译英文优质信息和名人推特

Menu
  • 首页
  • 作者列表
  • 独立博客
  • 专业媒体
  • 名人推特
  • 邮件列表
  • 关于本站
Menu

Web 服务器“hello world”基准测试:Go、Node.js、Nim、Bun

Posted on 2023-10-07

肖像2018facebook.jpg

有许多流行的框架可用于编写小型 Web 应用程序。 Go 和 JavaScript (Node.js) 是最受欢迎的选择。据报道,Netflix 运行在 Node.js 上; Uber 从 Node.js 迁移到 Go 以获得更好的性能。还有一些不太受欢迎的选项,例如Nim 。

深入审查它们的性能特征将具有挑战性。但我只是编写了一个小玩具 Web 应用程序,我会看到差异吗?极简应用程序会告诉您可能的最佳速度,因为任何更复杂的应用程序都必须运行得更慢。

让我们尝试一下。我想要相当于网络服务器的“hello world”。我也不想做任何摆弄:让我们让事情变得简单。

一个极简的 Go 服务器可能如下所示:

包主  
   
导入(  
   
“ fmt ”  
   
“日志”  
   
“网络/http ”  
   
)  
   
函数主( ) {  
   
  http 。 HandleFunc ( " /simple " , func ( w http.ResponseWriter , r * http.Request ) {  
   
    FMt 。 Fprintf ( w , “你好! ” )  
   
} )  
   
  FMt 。 Printf ( "在端口 3000 处启动服务器\n " )  
   
如果错误: = http 。 ListenAndServe ( " :3000 " , nil ) ;错误! =零{  
   
    日志。致命(错误)  
   
}  
   
}  
   
  
   

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

 const f = require('fastify')()  
   
f.get('/simple', 异步 (请求) => {  
   
返回“你好”  
   
} )  
   
f.listen( {端口: 3000 } )  
   
  .then(() => console.log('监听3000端口'))  
   
  .catch(err => console.error(err))  
   
  
   

Nim 提供了一种实现相同结果的好方法:

导入选项,异步调度  
   
导入httpbeast  
   
proc onRequest ( req :请求) : Future [ void ] =  
   
如果需要。 httpMethod ==一些( HttpGet ) :  
   
    案例要求路径。得到( )  
   
    “/简单” :  
   
      要求。发送( “你好世界” )  
   
其他:  
   
      要求。发送( Http404 )  
   
运行( onRequest , initSettings (端口=端口( 3000 ) ) )  
   
  
   

我写了一个基准测试,我的源代码可用。我在一个强大的、基于 IceLake 的 64 核服务器上运行它。我使用一个简单的庞巴迪命令作为基准测试的一部分:

庞巴迪-c 10 http://localhost:3000/simple  
   

您可以将并发连接数增加到 1000 ( -c 1000 )。我最初的测试使用自动加农炮,这对于这项任务来说是一个糟糕的选择。

我的结果表明 Nim 在这个玩具示例上做得很好。

系统 请求/秒(10 个连接) 请求/秒(10000 个连接)
Nim 2.0 和 httpbeast 315,000 +/- 18,000 350,000 +/- 60,000
去1.19 45,000 +/- 10,000 250,000 +/- 45,000
Node.js 20(JavaScript) 45,000 +/- 7,000 41,000 +/- 10,000
小圆面包 1.04 *(JavaScript) 40,000 +/- 6,000 35,000 +/- 9,000

*Bun 的作者 Jarred Sumner 在 X 上表示,目前 Bun 中的 fastify 速度并不快,但 Bun.serve() 比 Bun 中的 node:http 快两倍多。

我的网络服务器几乎不做任何工作,所以这是一个边缘情况。我也没有进行任何配置:它是“开箱即用”的性能。此外,该服务器可能比 Web 开发人员在实践中使用的任何东西都更强大。

这个结果中有相当大的噪音,你不应该完全相信我的数字。我建议您尝试自己运行基准测试。

我查看了一些博客文章,所有结论都认为 Go 更快:

  • 在Http Server Performance: NodeJS vs. Go中,Sunavec 发现 Go 比 Node.js 快 34%。他们的基准更加复杂,而且可能更加现实。
  • 在服务器端 I/O 性能:Node vs. PHP vs. Java vs. Go 中,Peabody 发现 Go 的扩展性比 Node.js 和 Java 好得多,PHP 排在最后。在压力测试中,他们发现 Java 和 Node.js 不相上下,而 Go 的速度是前者的两倍。
  • 在性能基准测试:Bun vs. C# vs. Go vs. Node.js vs. Python 中,他们发现 Bun 和 Go 是赢家,而 Node.js 的运行速度约为一半。 C# 提供中等性能,而 Python 垫底。

一个有趣的问题是,通过使用完全用 C、C++、Rust 或 Zig 等语言编写的服务器是否可以获得更好的性能。我尝试用 C++ 构建等价的东西,但是太痛苦了,所以我最终放弃了。

在准备这篇博文时,我很高兴第一次编译用 Nim 语言编写的软件。我必须说它留下了很好的印象。作者表示 Nim 受到 Python 的启发。我确实感觉很像Python。稍后我会再次访问 nim。

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

本站文章系自动翻译,站长会周期检查,如果有不当内容,请点此留言,非常感谢。
  • Abhinav
  • Abigail Pain
  • Adam Fortuna
  • Alberto Gallego
  • Alex Wlchan
  • Answer.AI
  • Arne Bahlo
  • Ben Carlson
  • Ben Kuhn
  • Bert Hubert
  • Bits about Money
  • Brian Krebs
  • ByteByteGo
  • Chip Huyen
  • Chips and Cheese
  • Christopher Butler
  • Colin Percival
  • Cool Infographics
  • Dan Sinker
  • David Walsh
  • Dmitry Dolzhenko
  • Dustin Curtis
  • Elad Gil
  • Ellie Huxtable
  • Ethan Marcotte
  • Exponential View
  • FAIL Blog
  • Founder Weekly
  • Geoffrey Huntley
  • Geoffrey Litt
  • Greg Mankiw
  • Henrique Dias
  • Hypercritical
  • IEEE Spectrum
  • Investment Talk
  • Jaz
  • Jeff Geerling
  • Jonas Hietala
  • Josh Comeau
  • Lenny Rachitsky
  • Liz Danzico
  • Lou Plummer
  • Luke Wroblewski
  • Matt Baer
  • Matt Stoller
  • Matthias Endler
  • Mert Bulan
  • Mostly metrics
  • News Letter
  • NextDraft
  • Non_Interactive
  • Not Boring
  • One Useful Thing
  • Phil Eaton
  • Product Market Fit
  • Readwise
  • ReedyBear
  • Robert Heaton
  • Ruben Schade
  • Sage Economics
  • Sam Altman
  • Sam Rose
  • selfh.st
  • Shtetl-Optimized
  • Simon schreibt
  • Slashdot
  • Small Good Things
  • Taylor Troesh
  • Telegram Blog
  • The Macro Compass
  • The Pomp Letter
  • thesephist
  • Thinking Deep & Wide
  • Tim Kellogg
  • Understanding AI
  • 英文媒体
  • 英文推特
  • 英文独立博客
©2025 搞英语 → 看世界 | Design: Newspaperly WordPress Theme