Node.js runtime Cơ bản
Nhiều vấn đề hiệu năng của service Node.js không nằm ở database hay mạng, mà ở một đoạn JavaScript đang giữ main thread, hoặc ở dữ liệu vào nhanh hơn nơi ghi. Nhóm này gom ba kiến thức nền của runtime.
Phạm vi của nhóm này: chỉ nói về runtime Node.js. Chưa có bài về TypeScript (type system, cấu hình tsconfig, build); khi có, chúng sẽ được thêm vào đây.
Lộ trình đọc
Phần tiêu đề “Lộ trình đọc”| Thứ tự | Bài | Mức | Trả lời câu hỏi |
|---|---|---|---|
| 1 | Event loop Node.js | Trung cấp | Callback chạy theo thứ tự nào, vì sao timer trễ, việc gì chặn main thread? |
| 2 | Streams và backpressure | Trung cấp | Dữ liệu vào nhanh hơn nơi ghi thì chuyện gì xảy ra với memory? |
| 3 | AsyncLocalStorage | Trung cấp | Giữ requestId hay tenant cho từng request thế nào khi nhiều request xen kẽ? |
Chọn bài theo triệu chứng
Phần tiêu đề “Chọn bài theo triệu chứng”| Triệu chứng | Bắt đầu từ |
|---|---|
Mọi route chậm cùng lúc, kể cả route trả pong |
Event loop (main thread bị chiếm) |
setTimeout(fn, 0) chạy muộn hoặc thứ tự setImmediate khó đoán |
Event loop |
| RSS tăng theo số upload hoặc client chậm | Streams và backpressure |
Log của request này mang requestId của request khác |
AsyncLocalStorage |
Liên quan
Phần tiêu đề “Liên quan”Nếu dùng NestJS, request lifecycle và provider scopes giả định sẵn mô hình trên: một handler chiếm CPU làm chậm mọi request của cùng process, bất kể pipeline cấu hình thế nào.