TECHDEV · Flagship · Công cụ mã nguồn mở
runverdict
Đo app của bạn trên các JavaScript runtime đã cài trên máy của bạn và nhận kết luận nâng cấp kèm lý do — không phải benchmark headline đo trên app của người khác, trên máy của người khác.
TypeScript · CLI · MIT · Node 20+ · Không phụ thuộc runtime · Không cần tài khoản, không chạm mạng ngoài localhost, không dữ liệu nào rời khỏi máy. Không bao giờ tải runtime về.
Vấn đề mà công cụ trả lời
Node 26 bước vào Active LTS ngày 2026-10-28. Nhóm dùng Node 20 trở xuống đang chạy runtime không còn bản vá bảo mật. Nhóm dùng Node 22 và 24 phải lên kế hoạch di chuyển. Nhóm cân nhắc giữa Node và Bun chỉ có benchmark headline. Không công cụ headline nào trả lời, cho app của bạn trên máy của bạn: app có load được trên runtime đích không, chạy nhanh tới đâu ở đó, và có nên nâng cấp không — kèm lý do, không phải headline.
runverdict chỉ đo các runtime đã cài sẵn và báo các runtime còn lại là chưa cài. Nó không bao giờ tải runtime về.
Đo gì, trên mỗi runtime
| Chỉ số | Cách đo |
|---|---|
| Version và trạng thái EOL | Từ bảng lịch tích hợp sẵn (chỉ Node; xem bên dưới) |
| Kiểm tra load | Entry được spawn; nếu lỗi, đuôi stderr được ghi nguyên văn — chính nó chỉ ra addon native hỏng hay module thiếu |
| Thời gian khởi động | Trung vị của 5 lần spawn, từ lúc spawn tới dòng stdout đầu tiên |
| Workload HTTP | Chỉ dùng client http tích hợp sẵn: requests/giây, độ trễ p50/p95 và peak RSS, cùng một workload, cùng thứ tự, trên cùng một máy cho mọi runtime |
Repo đi kèm một sample app không phụ thuộc thư viện, có endpoint /health và /json (examples/sample-app.js). App lắng nghe trên process.env.PORT.
Kết luận
| Kết luận | Quy tắc | Mã thoát |
|---|---|---|
| BLOCKED | Runtime đích lỗi kiểm tra load, hoặc không runtime nào cho ra số đo. Lý do nêu tên runtime lỗi và đuôi stderr của nó. | 1 |
| UPGRADE-READY | Runtime hiện tại đã EOL hoặc Maintenance, runtime đích load được, và req/s của nó không kém runtime hiện tại quá 10%. | 0 |
| STAY | Các trường hợp còn lại, kèm lý do và con số. Hồi quy đã đo vượt quá 10% là lý do để ở lại, nêu rõ cả hai con số. | 0 |
Định nghĩa: runtime hiện tại là runtime đầu tiên theo thứ tự --runtimes có số đo; runtime đích là runtime còn lại có hiệu năng tốt nhất đã đo được, nếu có. Chỉ có một runtime đo được thì không có đích để so sánh, nên kết luận là STAY. Mã thoát 1 cũng áp dụng khi không có số đo runtime dùng được; mã thoát 2 là lỗi sử dụng. Manifest JSON mang version runtime, trạng thái EOL, mọi con số đã đo, số lần chạy, kết luận kèm lý do, và ghi chú về máy: "single-machine measurement, not a general claim".
Bảng lịch EOL Node tích hợp sẵn
| Node major | Trạng thái | EOL |
|---|---|---|
| 20 | EOL | 2026-04-30 |
| 22 | Maintenance | 2027-04-30 |
| 24 | Maintenance | 2028-04-30 |
| 26 | Active LTS | 2029-04-30 |
Node major không rõ được báo là UNKNOWN, không bao giờ đoán. Bun không có lịch LTS/EOL: runverdict chỉ báo version Bun và không bao giờ bịa ngày EOL cho Bun. Deno rõ ràng ngoài phạm vi v1: không được phát hiện, và truyền --runtimes deno là lỗi, không phải bỏ qua âm thầm.
Cách dùng
# Cài đặt 3 bước (cần Node >= 20), rồi link binary một lần để dùng local
git clone https://github.com/techdevfun/runverdict
cd runverdict
npm install
npm link# Ví dụ chạy được
runverdict runtimes
runverdict measure --entry examples/sample-app.js --url /json --runtimes node,bun --duration 5 --connections 20 --json out.json
runverdict --versionLệnh chép đúng từ README của runverdict (package.json v0.1.0). --duration mặc định 10 giây và --connections mặc định 20. README không nêu cách cài từ npm registry, nên trang này không tuyên bố điều đó: cài đặt là luồng clone + npm install + npm link ở trên. Bản ghi nguyên văn một lần chạy demo thật trên máy build nằm trong examples/demo-transcript.txt của repo; chạy lại các lệnh sẽ cho con số mới, vì các con số là số đo.
Số liệu đã đo (README: phương pháp, không phải con số cố định)
- README không đưa con số benchmark cố định nào — và trang này cũng không tuyên bố con số nào. Mọi con số trong một lần chạy đều là số đo của lần chạy đó, trên máy đó, cho app và workload đó.
- Thời gian khởi động là trung vị của 5 lần spawn, từ lúc spawn tới dòng stdout đầu tiên.
- Workload HTTP báo requests/giây, độ trễ p50/p95 và peak RSS, với cùng workload, cùng thứ tự, trên cùng một máy cho mọi runtime.
- Ngưỡng kết luận là 10%: đích trong khoảng 10% so với req/s của runtime hiện tại có thể là UPGRADE-READY (khi các điều kiện khác thỏa); hồi quy đã đo vượt quá 10% là lý do để STAY, nêu rõ cả hai con số.
- Mặc định:
--duration10 giây,--connections20.
Đây KHÔNG phải gì — và đối thủ hơn chúng ta ở đâu
- Công cụ không profile. Về flame graph và chẩn đoán event-loop, clinic.js hơn chúng ta. Không mô hình hóa outlier thống kê; hyperfine hơn chúng ta. Không có tùy chọn load HTTP; autocannon hơn chúng ta. Công cụ này làm quyết định nâng cấp, điều mà không công cụ nào trong số đó làm.
- Kiểm tra load chỉ chứng minh entry load được, không phải tương thích đầy đủ. Kiểm tra load đạt không đảm bảo app hành xử giống hệt trên runtime khác.
- Số liệu là của máy này. Runtime nhanh hơn ở đây không phải tuyên bố về bất kỳ máy, app hay workload nào khác.
Lộ trình (README): thêm định dạng báo cáo cho manifest JSON; đánh giá có tài liệu về một mục inventory runtime thứ ba, chỉ nếu đo được bằng cùng kiểm tra load, khởi động và workload; workload dài hơn, cấu hình được, mà không đổi quy tắc kết luận xác định.
Giới hạn
- Không bao giờ tải runtime, không chạm mạng ngoài localhost, và không đọc file ngoài thư mục app trừ binary runtime.
- Không bao giờ tải runtime về: chỉ đo các runtime đã cài sẵn và báo các runtime còn lại là chưa cài.
- Deno rõ ràng ngoài phạm vi v1 (xem mục EOL ở trên).
Giấy phép
MIT. Xem LICENSE trong repo.
Công cụ liên quan
Các công cụ mã nguồn mở khác của TECHDEV: gheist-guard, vetgate, context-diet, ci-failure-detective, agent-seatbelt, devsecops-os, env-doctor, skill-audit, logtrim, testguard, breakcheck, keymap, memgraph, ggufit, leaseguard, factfence, jsonfold
Đóng góp ý kiến
Bình chọn cho công cụ này, đề xuất tính năng, hoặc thảo luận với các vận hành khác trên bảng cộng đồng.