Nếu bạn đang phân vân lựa chọn giữa Node.js và Golang thì thí nghiệm nhỏ này sẽ cho bạn biết một tiêu chí về tốc độ của 2 ứng dụng web server tối giản hết mức có thể được viết bằng Node.js và Golang.

Tôi không sử dụng thêm bất kỳ thư viện thứ 3 nào để tránh các hiệu ứng phụ do thư viện đó quá phức tạp hoặc code không tối ưu.

Công cụ kiểm thử là hey. Lệnh kiểm thử hey -n 5000 -c 120 http://localhost:8000
Code web server Node.js và Golang như sau:

Node.js - nodeweb.js

var http = require('http');
http.createServer(function (req, res) {
    res.write('Hello World');
    res.end();
}).listen(8000);

Chạy Node.js web server như sau 

node nodeweb.js

Golang - goweb.go

package main

import (
	"fmt"
	"log"
	"net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "Hello World")
}

func main() {
	http.HandleFunc("/", handler)
	log.Fatal(http.ListenAndServe(":8000", nil))
}

Biên dịch file goweb ở trên ra binary rồi mới chạy 

go build goweb.go
./goweb

Kết quả sau khi chạy nhiều lần lấy trung bình các mẫu

Số lượng request mà Golang web xử lý được trong 1 giây gấp 2 lần số lượng request mà Node.js  xử lý được

Response time, thời gian phản hồi của Golang web server phân bố  ở giải có tốc độ cao hơn thời gian phản hồi của Node.js . Hãy xem phần Response time histogram

Nếu phải viết một web server, microservice tốc độ cao, cần ít bộ nhớ hãy chọn Golang. Nếu chỉ muốn dùng duy nhất JavaScript để lập trình front end và back end, hãy chọn Node.js

Node.js

Summary:
  Total:	0.2276 secs
  Slowest:	0.0167 secs
  Fastest:	0.0001 secs
  Average:	0.0054 secs
  Requests/sec:	21612.6167


Response time histogram:
  0.000 [1]	|
  0.002 [38]	|■
  0.003 [0]	|
  0.005 [2403]	|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.007 [2078]	|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.008 [246]	|■■■■
  0.010 [35]	|■
  0.012 [39]	|■
  0.013 [34]	|■
  0.015 [25]	|
  0.017 [21]	|

Golang

Summary:
  Total:	0.1065 secs
  Slowest:	0.0149 secs
  Fastest:	0.0001 secs
  Average:	0.0025 secs
  Requests/sec:	46190.7606

  Total data:	54120 bytes
  Size/request:	11 bytes

Response time histogram:
  0.000 [1]	|
  0.002 [1399]	|■■■■■■■■■■■■■■■■■■■■■■■■
  0.003 [2375]	|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.005 [768]	|■■■■■■■■■■■■■
  0.006 [136]	|■■
  0.008 [124]	|■■
  0.009 [59]	|■
  0.010 [48]	|■
  0.012 [4]	|
  0.013 [3]	|
  0.015 [3]	|