
Trả lời nhanh: Quá trình build Next.js có hai giai đoạn nặng theo hai kiểu khác nhau. Cài thư viện đọc ghi hàng chục nghìn file nhỏ, đây là công việc của ổ đĩa và là nơi ổ NVMe bỏ xa ổ thường. Giai đoạn biên dịch và tối ưu chủ yếu ăn CPU, trong đó nhiều bước chạy tuần tự nên xung nhịp quan trọng hơn số nhân. Muốn biết mình nghẽn ở đâu, chạy lệnh đo trong lúc build và xem chỉ số I/O wait cùng mức dùng từng nhân.
Build mất bốn phút, sửa một dòng lại build tiếp bốn phút. Một ngày mất cả tiếng chỉ để ngồi chờ. Trước khi nâng cấp máy, hãy xác định đúng thứ đang làm bạn chậm.
- Cài thư viện là công việc của ổ đĩa: hàng chục nghìn file nhỏ, đúng kiểu đọc ghi ngẫu nhiên.
- Biên dịch và tối ưu là công việc của CPU, nhiều bước chạy tuần tự nên cần xung cao.
- Đo bằng cách chạy top hoặc iostat song song với lệnh build.
- Bộ nhớ đệm build giúp nhiều nhất nhưng chỉ hiệu quả khi ổ đĩa đủ nhanh.
Bốn giai đoạn và thứ chúng ngốn
| Giai đoạn | Ngốn gì nhất | Ghi chú |
|---|---|---|
| Cài thư viện | Ổ đĩa | Hàng chục nghìn file nhỏ, đọc ghi ngẫu nhiên |
| Biên dịch mã | CPU | Chia được cho nhiều nhân ở một mức nhất định |
| Tối ưu và đóng gói | CPU | Nhiều bước tuần tự, xung nhịp quyết định |
| Ghi kết quả ra thư mục | Ổ đĩa | Nhiều file nhỏ |
Nhìn bảng này thấy ngay vì sao câu hỏi ổ đĩa hay CPU không có đáp án chung: tuỳ dự án của bạn nặng ở giai đoạn nào.
Cách đo chính xác
Mở hai phiên làm việc. Phiên một chạy build, phiên hai chạy lệnh theo dõi:
iostat -x 2Quan sát trong lúc build:
- Cột %util gần 100 trong lúc cài thư viện nghĩa là ổ đĩa đang là nút thắt.
- Một nhân chạm 100 phần trăm còn các nhân khác rảnh ở giai đoạn tối ưu nghĩa là bạn bị giới hạn bởi xung nhịp.
- Tất cả các nhân đều bận nghĩa là thêm nhân sẽ giúp ích.
Ghi lại thời gian từng giai đoạn qua vài lần build để biết mình đang mất thời gian ở đâu nhiều nhất.
Cách rút ngắn thời gian build
- Bật bộ nhớ đệm build và bộ nhớ đệm trình quản lý gói. Đây là thứ hiệu quả nhất, nhưng bản thân bộ nhớ đệm cũng đọc ghi ổ đĩa nên ổ nhanh vẫn cần.
- Chỉ cài thư viện cần cho môi trường chạy thật. Bỏ bớt phần chỉ dùng khi phát triển.
- Dùng trình quản lý gói nhanh hơn. Khác biệt chủ yếu nằm ở cách chúng xử lý số lượng lớn file nhỏ.
- Tách build khỏi máy chạy thật. Có máy build riêng thì máy phục vụ khách không bị ảnh hưởng.
- Nâng ổ trước khi nâng nhân. Với phần lớn dự án web, đây là khoản đầu tư cho cảm giác nhanh rõ rệt nhất.
Đo từng giai đoạn, không đo tổng
# Tach thoi gian cai thu vien va thoi gian build time npm ci time npm run build # Xem chi tiet tung buoc bien dich NEXT_TELEMETRY_DISABLED=1 npm run build -- --profile # Do song song o phien thu hai iostat -x 2 # cot %util va await vmstat 2 # cot wa, si, so htop # bam phim 1 de xem tung nhan
Cách đọc nhanh: npm ci lâu mà npm run build nhanh là nghẽn ổ đĩa. Ngược lại là nghẽn vi xử lý. Cả hai đều lâu và vmstat có swap là thiếu bộ nhớ, phải sửa cái đó trước.
Cấu hình đề xuất theo quy mô dự án
| Dự án | RAM | Ổ đĩa | CPU | Thời gian build tham khảo |
|---|---|---|---|---|
| Trang giới thiệu, dưới 50 trang | 4 GB | NVMe 40 GB | 2 nhân | 1 tới 2 phút |
| Ứng dụng web vừa, có xác thực và cơ sở dữ liệu | 8 GB | NVMe 80 GB | 4 nhân xung cao | 2 tới 4 phút |
| Thương mại điện tử, hàng nghìn trang tĩnh | 16 GB | NVMe 160 GB | 6 tới 8 nhân | 5 tới 10 phút |
| Kho mã nguồn gộp nhiều ứng dụng | 32 GB | NVMe 320 GB | 8 nhân trở lên | tùy cấu hình chia việc |
Bộ nhớ là thứ cần trước tiên. Quá trình build hiện đại có thể chiếm vài gigabyte, và khi hết bộ nhớ thì tiến trình bị hệ thống dừng giữa chừng với thông báo khó hiểu. Nếu bạn gặp lỗi hết bộ nhớ, tăng giới hạn tạm bằng NODE_OPTIONS=--max-old-space-size=4096, nhưng cách bền là thêm bộ nhớ thật.
Năm cách rút ngắn, xếp theo hiệu quả
- Giữ bộ nhớ đệm build giữa các lần chạy. Trên máy riêng thì tự có. Trên hệ thống tích hợp liên tục, phải khai rõ thư mục đệm để lưu và khôi phục, nếu không mỗi lần chạy là bắt đầu từ đầu.
- Chỉ build lại phần đã đổi. Với kho mã nguồn gộp, dùng công cụ quản lý kho gộp để bỏ qua các gói không thay đổi.
- Xem lại các trang tạo sẵn. Sinh sẵn hàng nghìn trang lúc build là chậm nhất. Cân nhắc chuyển sang sinh khi có yêu cầu đầu tiên rồi giữ lại, cách này rút thời gian build xuống rất nhiều với trang thương mại điện tử.
- Bỏ bớt thư viện nặng. Kiểm bằng công cụ phân tích gói. Một thư viện biểu đồ hay một thư viện xử lý ngày tháng đầy đủ có thể chiếm phần lớn thời gian đóng gói.
- Tách bước kiểm kiểu dữ liệu ra khỏi build. Chạy kiểm kiểu song song ở bước riêng thay vì nằm trong đường build chính.
Khi nào nên chuyển sang máy chủ tự quản
Hệ thống tích hợp liên tục miễn phí thường chậm vì hai lý do cộng lại: máy dùng chung cấu hình thấp, và mỗi lần chạy là môi trường mới nên mọi bộ nhớ đệm đều trống. Đội build từ mười lần một ngày trở lên nên tính lại: một máy chủ nhỏ ổ NVMe giữ được bộ nhớ đệm sống, thời gian chờ giảm hẳn, và chi phí thường thấp hơn khi tính đủ thời gian lập trình viên ngồi chờ.
Câu hỏi thường gặp
Build Next.js cần bao nhiêu RAM?
Dự án vừa thường cần 4GB để thoải mái. Dự án lớn có nhiều trang tĩnh có thể cần 8GB trở lên, thiếu RAM sẽ khiến quá trình build bị hệ thống tắt giữa chừng.
Ổ NVMe rút ngắn thời gian build bao nhiêu?
Phần cài thư viện cải thiện rõ nhất vì đó là đọc ghi hàng chục nghìn file nhỏ. Phần biên dịch phụ thuộc CPU nên ít thay đổi. Mức cải thiện tổng tuỳ tỉ trọng từng giai đoạn trong dự án của bạn.
Nên build trên máy cá nhân hay trên VPS?
Trên VPS nếu bạn cần build tự động, build ban đêm hoặc nhiều người cùng dùng chung môi trường. Máy cá nhân đủ cho làm việc một mình và không cần chạy liên tục.
Có nên tăng số nhân để build nhanh hơn?
Chỉ khi đo thấy tất cả các nhân đều bận. Nếu chỉ một nhân chạm trần thì thêm nhân không giúp gì, cần xung cao hơn hoặc cần tối ưu lại cấu hình build.
Bài viết liên quan
- Hermes spawn subagent: chạy nhiều agent song song xử lý batch task
- CI/CD pipeline GitLab CE self-host trên VPS đầy đủ
- Codex CLI rate limit + Tier system: tận dụng tối đa quota Plus/Pro/Business 2026
- Docker build chậm: cache layer và vai trò của ổ đĩa
- PostgreSQL backup tự động trên VPS qua pg_dump + cron + S3
- Docker Swarm vs K3s cho startup 3 dev: chọn cái nào?



