C语言、Go、Node.js、Nim后端Web代码性能对比

用C++编写一个小型Web应用程序
源码:

include

int main() {
li::http_api my_api;

my_api.get("/simple") = 
[&](li::http_request& request, li::http_response& response) {
response.write("hello world.");
};
li::http_serve(my_api, 3000);
}

Go语言:

package main
import (
"io" "fmt" "log" "net/http"
)
func main() {
http.HandleFunc("/simple", func(w http.ResponseWriter, r *http.Request){
io.WriteString(w, "Hello!")
})
fmt.Printf("Starting server at port 3000\n")
if err := http.ListenAndServe(":3000", nil); err != nil {
log.Fatal(err)
}
}

 JavaScript (Node.js) :

const f = require('fastify')()
f.get('/simple', async (request) => {
return "hello"
})
f.listen({ port: 3000})
.then(() => console.log('listening on port 3000'))
.catch(err => console.error(err))

BunJS:
为了充分利用Bun 运行时,您可能需要编写特定于 Bun 的代码:

const server = Bun.serve({
port: 3000,
fetch(req) {
let url = new URL(req.url);
let pname = url.pathname;
if(pname == '/simple'){
return Response('Hello');
}
return new Response("Not Found.");
}
});

Nim
Nim 是一种静态类型编译系统编程语言。它结合了 Python、Ada 和 Modula 等成熟语言的成功概念。

  • Nim 生成本机无依赖性可执行文件,不依赖于虚拟机,这些可执行文件很小并且允许轻松重新分发。

  • Nim 编译器和生成的可执行文件支持所有主要平台,如 Windows、Linux、BSD 和 macOS。

  • Nim 的内存管理是确定性的,并且可以通过析构函数和移动语义进行自定义,其灵感来自于 C++ 和 Rust。它非常适合嵌入式硬实时系统。

  • 现代概念(如零开销迭代器和用户定义函数的编译时评估)与在堆栈上分配的基于值的数据类型的偏好相结合,可以产生极其高性能的代码。

  • 支持各种后端:它编译为 C、C++ 或 JavaScript,以便 Nim 可以用于所有后端和前端需求。

Nim 提供了一种很好的方法来达到同样的效果:

import options, asyncdispatch
import httpbeast
proc onRequest(req: Request): Future[void] =
if req.httpMethod == some(HttpGet):
case req.path.get()
of "/simple":
req.send("Hello World")
else:
req.send(Http404)
run(onRequest, initSettings(port=Port(3000)))

基准测试
bombardier -c 10 http://localhost:3000/simple

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

Nim 2.0和httpbeast :
请求/秒(10 个连接):315,000 +/- 18,000
请求/秒(1000 个连接):350,000 +/- 60,000

GCC12 (C++) + lithium:
请求/秒(10 个连接):190,000 +/- 60,000
请求/秒(1000 个连接):385,000 +/- 80,00

Go 1.19:
请求/秒(10 个连接):95,000 +/- 30,000
请求/秒(1000 个连接):250,000 +/- 45,000

Node.js 20 and uWebSockets.js:
请求/秒(10 个连接):100,000 +/- 25,000
请求/秒(1000 个连接):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

建议您尝试自己运行基准测试。

一些博客文章结论都认为 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 垫底。

https://www.jdon.com/68945.html

你可能感兴趣的:(javascript,reactjs)