Node.js vs Springboot: So sánh hiệu suất Hello world
Tiếp tục nhiệm vụ so sánh hiệu suất của tôi, bài viết này nói về Node.js và Springboot. Khởi động mùa xuân là một công nghệ máy chủ nhẹ được xây dựng trên Java, chủ yếu được sử dụng cho các dịch vụ web. Spring Boot giúp dễ dàng tạo các Ứng dụng dựa trên Spring cấp độ sản xuất, độc lập mà bạn có thể “chỉ cần chạy”. Khởi động mùa xuân khá phổ biến trong thế giới java.
Bạn nghĩ ai là người nhanh hơn đối với trường hợp chào thế giới đơn giản? Tôi đoán câu trả lời có thể là Springboot vì nó được biên dịch thành mã byte trong khi Node.js được diễn giải. Nếu bạn quan tâm đến việc tìm ra câu trả lời chính xác, hãy đọc tiếp. Bạn có thể ngạc nhiên!
Cài đặt
Bài kiểm tra được thực hiện trên MacBook Pro M1 với 16G RAM. Thử nghiệm được thực hiện bằng trình kiểm tra HTTP nổi tiếng: Bombardier . Thử nghiệm được thực hiện cho 50, 100 và 200 kết nối đồng thời.
Các phiên bản là:
- Node.js v19.6.0
- Springboot 3.0.2 với Java17
Node.js
Mã Node.js có một bộ định tuyến tối thiểu làm cho nó tương đương với chức năng do máy chủ gốc của Spring cung cấp.
import http from "node:http";
http.createServer((req, resp) => {
try {
if (req.method !== "GET") {
return resp.writeHead(405).end();
}
if (req.url !== "/") {
return resp.writeHead(404).end();
}
resp.writeHead(200, {
"content-type": "text/plain",
});
resp.end("Hello world");
} catch (e) {
resp.writeHead(500).end();
}
}).listen(3000);
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.http.ResponseEntity;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@GetMapping("/")
public String handleRequest() {
return "Hello World!";
}
}
Tổng cộng có 5 triệu (5 triệu) yêu cầu được thực hiện cho mỗi cấp độ đồng thời.
Các phép đo sau đây được thực hiện:
- Mất thời gian
- Yêu cầu mỗi giây
- Độ trễ : Trung bình, trung bình, q25, q75, q90, tối đa (tính bằng mili giây)
- Sử dụng hệ thống : Mức sử dụng CPU và bộ nhớ trung bình
Dưới đây là các biểu đồ thể hiện kết quả cho từng loại phép đo:
(Lưu ý rằng tất cả độ trễ đều tính bằng mili giây)
phân tích của tôi
Đầu tiên, Spring/Java là một ứng dụng sử dụng nhiều tài nguyên. Đối với trường hợp hello world đơn giản với 200 kết nối đồng thời, Spring sử dụng ~190% CPU và 470M bộ nhớ. Để so sánh, Node.js sử dụng 95% CPU và 82M bộ nhớ.
Bây giờ đối với độ trễ, độ trễ của mùa xuân thấp hơn Node.js cho đến phần tư thứ 3. Mùa xuân không thành công với số lần đọc độ trễ tối đa tính bằng giây, trong khi độ trễ tối đa của Node.js đạt 123 mili giây. Ngay cả độ trễ trung bình của Spring (0,6ms) cũng tốt hơn đáng kể so với của Node.js (2,5ms).
Tóm lại, Node.js cung cấp nhiều RPS hơn bằng cách sử dụng ít tài nguyên hệ thống hơn đáng kể.
CẬP NHẬT : Khi bài viết này trở nên khá phổ biến trong cộng đồng, tôi đã nhận được nhận xét rằng việc so sánh máy chủ gốc của Node với một khung như Springboot là không công bằng. Một điểm rất hợp lệ. Tôi đã xuất bản các bài viết để so sánh Express và Fastify với Springboot. Các liên kết là:

![Dù sao thì một danh sách được liên kết là gì? [Phần 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































