Môi trường chạy JavaScript

Node.js

Chạy JavaScript ngoài trình duyệt để dựng server và công cụ dòng lệnh

Môi trường chạy JavaScript phía máy chủ, miễn phí và mã nguồn mở. Bài này nói rõ nó giải quyết việc gì, ai nên học và những chỗ dễ hiểu sai khi mới dùng.

8.8
ĐIỂM TOPỨNGDỤNG
Hạng #7 trong nhóm Developer & lập trình
Nhà phát triển
OpenJS Foundation
Nền tảng
Windows · macOS · Linux
Giá
Miễn phí và mã nguồn mở; không có gói trả phí cho bản chính, chỉ có hỗ trợ bảo mật cho bản hết vòng đời
Ngôn ngữ
English
NGƯỜI DÙNG CHẤM

Bạn đánh giá Node.js thế nào?

Điểm này độc lập với điểm của ban biên tập và quyết định thứ hạng ở tab “Người dùng bình chọn”.

Chưa có bình chọn
Bạn thấy sao?
Không cần đăng nhập. Mỗi người một phiếu, đổi lại được.
CHẤM ĐIỂM

Điểm từng tiêu chí

Điểm tổng là trung bình có trọng số của các tiêu chí bên dưới.

Dễ sử dụng
7
Tính năng
9
Hiệu năng
9
Giá trị so với chi phí
9.5
Hỗ trợ & cộng đồng
9
REVIEW

Đánh giá chi tiết Node.js

Trả lời ngắn: Node.js là môi trường chạy JavaScript bên ngoài trình duyệt, miễn phí và mã nguồn mở, do OpenJS Foundation quản lý. Nó cho phép dùng JavaScript để dựng máy chủ, ứng dụng web, công cụ dòng lệnh và các đoạn script tự động hoá.

Nên dùng nếu: bạn đã biết JavaScript và muốn dùng chính ngôn ngữ đó cho cả giao diện lẫn phần chạy phía máy chủ. Không đủ nếu: bạn cần một môi trường có sẵn giao diện kéo thả, hoặc dự án bắt buộc dùng ngôn ngữ khác ở phía máy chủ.

Node.js giải quyết vấn đề gì?

JavaScript ra đời để chạy trong trình duyệt. Trong nhiều năm, nó bị khoá trong đó: bạn viết được hiệu ứng cho trang web, nhưng không thể dùng cùng ngôn ngữ để đọc tệp trên ổ cứng, mở cổng mạng hay chạy tác vụ nền trên máy chủ. Muốn làm việc đó, bạn phải học thêm một ngôn ngữ khác.

Node.js phá bỏ ranh giới ấy bằng cách đưa nhân JavaScript ra khỏi trình duyệt. Trang chủ định vị sản phẩm là môi trường chạy JavaScript đa nền tảng, giúp lập trình viên tạo máy chủ, ứng dụng web, công cụ dòng lệnh và script. Nói cách khác, cùng một ngôn ngữ giờ chạy được ở cả hai đầu của một dự án.

Vấn đề thứ hai là chi phí học lại công cụ. Khi một nhóm đã quen JavaScript, việc chuyển sang Node.js không đòi hỏi học cú pháp mới, không phải dựng lại quy trình kiểm thử, không phải đổi cách tổ chức mã. Đây là lý do Node.js phổ biến ở các nhóm nhỏ cần ra sản phẩm nhanh.

Vấn đề thứ ba là tự động hoá những việc lặt vặt. Đọc một tệp, băm dữ liệu, nén tệp, gọi API nội bộ: đây là những việc lặp đi lặp lại mà lập trình viên hay phải làm tay. Trang chủ đưa sẵn các ví dụ như đọc và băm tệp, ghép luồng dữ liệu để nén, cho thấy sản phẩm được thiết kế cho các tác vụ hệ thống chứ không chỉ cho web.

Node.js làm tốt việc gì?

Loại việcMức độGhi chú
Dựng máy chủ và APITốt nhấtTrang chủ có ví dụ tạo HTTP server bằng module node:http chỉ trong vài dòng.
Viết công cụ dòng lệnh và scriptTốt nhấtĐúng định vị mà trang chủ nêu: công cụ dòng lệnh và các đoạn script tự động.
Kiểm thử tự độngRất tốtCó module node:test và node:assert đi kèm, ví dụ kiểm thử nằm ngay trên trang chủ.
Đọc, băm và xử lý tệpRất tốtnode:fs và node:crypto đủ cho các tác vụ đọc tệp, tính mã băm, ghi kết quả.
Xử lý luồng dữ liệu lớnRất tốtCó pipeline và các luồng đọc ghi, ví dụ nén tệp bằng gzip ngay trên trang chủ.
Chạy tác vụ nặng song songTốtnode:worker_threads cho phép tách việc nặng sang luồng riêng thay vì chặn luồng chính.
Dựng giao diện người dùngKémTrang chủ không nêu phần giao diện; đây là môi trường chạy phía máy chủ, giao diện vẫn cần thư viện khác.
Chạy trực tiếp trong trình duyệtKhôngNode.js chạy ngoài trình duyệt; trang chủ không giới thiệu bản chạy trong tab của người dùng.
Nhận bản vá miễn phí cho bản cũKémTrang chủ có mục riêng về hỗ trợ bảo mật cho các bản đã hết vòng đời, tức là bản cũ không còn được vá miễn phí.

Ai nên dùng Node.js?

Lập trình viên frontend muốn làm backend. Nếu bạn đã viết JavaScript cho giao diện, Node.js là con đường ngắn nhất để tự dựng phần máy chủ cho sản phẩm của mình. Bạn không phải học lại cú pháp, chỉ cần làm quen với các module hệ thống như đọc tệp, mạng và luồng.

Người làm công cụ nội bộ và tự động hoá. Các đoạn script đọc dữ liệu, gọi API, nén tệp hay chạy theo lịch là bài toán rất hợp với Node.js, vì cài đặt nhẹ và chạy được trên nhiều hệ điều hành.

Nhóm nhỏ cần một sản phẩm web chạy được nhanh. Dùng chung một ngôn ngữ ở cả hai đầu giúp nhóm ít người giảm được chi phí chuyển đổi và chia sẻ mã cho nhau dễ hơn. Đây là lợi thế tổ chức, không chỉ là lợi thế kỹ thuật.

Ai không nên bắt đầu? Người chưa từng viết JavaScript sẽ thấy Node.js khá trừu tượng, vì nó không có giao diện để nhìn kết quả. Trong trường hợp đó, hãy học cú pháp trước rồi quay lại, thay vì cài Node.js ngay từ ngày đầu.

Cách dùng Node.js cho đúng

1. Cài đúng bản và ghi lại số phiên bản

Trang chủ hiển thị hai nhánh: bản LTS dành cho phần lớn dự án và bản mới nhất dành cho người muốn thử tính năng vừa ra. Hãy chọn nhánh LTS cho sản phẩm thật, và ghi lại số phiên bản trong tệp cấu hình của dự án để cả nhóm dùng giống nhau.

2. Tận dụng module có sẵn trước khi cài thêm

Các ví dụ trên trang chủ cho thấy khá nhiều việc đã có sẵn: tạo server, viết kiểm thử, băm tệp, nén luồng dữ liệu, chạy luồng phụ. Với dự án nhỏ, dùng thẳng các module này giúp bạn ít phụ thuộc vào thư viện bên ngoài.

3. Viết kiểm thử ngay từ đầu

Node.js có sẵn công cụ kiểm thử, nên không có lý do gì để trì hoãn. Hãy bắt đầu bằng vài phép kiểm tra cho các hàm xử lý dữ liệu, rồi tăng dần khi dự án lớn lên.

4. Đưa việc nặng ra khỏi luồng chính

Khi phải xử lý ảnh, tính toán lớn hay đọc khối dữ liệu nặng, hãy dùng worker threads như ví dụ trên trang chủ. Cách này giữ cho phần trả lời người dùng vẫn mượt trong lúc tác vụ nền chạy.

Hạn chế cần biết

Không phải công cụ dựng giao diện

Node.js không vẽ ra màn hình cho người dùng cuối. Bạn vẫn cần một thư viện hoặc framework giao diện riêng, và đây là phần mà người mới hay nhầm khi nghe nói Node.js làm được web.

Vòng đời phiên bản ngắn

Các bản Node.js có thời hạn hỗ trợ, hết hạn thì không còn được vá miễn phí. Trang chủ có mục hỗ trợ bảo mật riêng cho những bản đã hết vòng đời, nghĩa là dự án chạy lâu năm sẽ phải nâng cấp định kỳ, không thể cài một lần rồi quên.

Cần kiến thức hệ thống nhất định

Để làm được việc thật, bạn phải hiểu về cổng mạng, tiến trình, luồng và cách xử lý lỗi bất đồng bộ. Những khái niệm này không có trong JavaScript cơ bản, nên thời gian đầu sẽ khá dốc với người chỉ quen viết giao diện.

Chất lượng thư viện không đồng đều

Hệ sinh thái mở rộng rất nhanh nhưng không có ai kiểm duyệt chất lượng từng gói. Bạn cần tự kiểm tra mức độ được bảo trì trước khi đưa một thư viện vào dự án, nhất là các gói xử lý thanh toán hoặc xác thực.

Lỗi hay gặp khi mới dùng Node.js

Đặt sai vị trí tệp cấu hình dự án

Nhiều ví dụ trên mạng cần một tệp cấu hình dự án ở thư mục gốc, nếu không sẽ báo lỗi ngay khi chạy. Hãy kiểm tra thư mục đang đứng và sự tồn tại của tệp này trước khi tìm lỗi sâu hơn.

Chạy lệnh ở sai thư mục

Lỗi không tìm thấy module thường chỉ là do bạn đang ở thư mục cha thay vì thư mục dự án. Đây là lỗi tốn thời gian nhất với người mới, và cách xử lý chỉ là kiểm tra lại đường dẫn hiện tại.

Nhầm giữa môi trường phát triển và môi trường chạy thật

Trên máy cá nhân mọi thứ chạy tốt vì bạn đã cài đủ thứ, còn trên máy chủ thì thiếu. Hãy ghi lại danh sách phụ thuộc của dự án và cài lại từ danh sách đó mỗi khi triển khai, thay vì chép thư mục từ máy này sang máy khác.

Node.js so với các công cụ khác trong cùng dự án

Node.js không cạnh tranh với các công cụ dưới đây, nó nằm ở tầng khác. Bảng này để bạn khỏi nhầm vai trò khi mới lập dự án. Phần mô tả của các công cụ còn lại lấy theo giới thiệu loại ứng dụng trên TopỨngDụng.

Tiêu chíNode.jsVisual Studio CodeDockerGit
Việc chínhMôi trường chạy JavaScript ngoài trình duyệtTrình soạn thảo mãĐóng gói và chạy ứng dụngQuản lý phiên bản mã nguồn
Vai trò trong dự án webChạy phần máy chủ và các scriptNơi viết mãĐóng gói môi trường chạyLưu lịch sử thay đổi mã
Thay thế được Node.js khôngChính nóKhôngKhôngKhông
Mã nguồn mở, miễn phíCó, theo trang chủkhông rõkhông rõkhông rõ
Nền tảngWindows, macOS, Linuxkhông rõkhông rõkhông rõ

Nếu bạn đang cân nhắc học gì trước, thứ tự hợp lý là nắm cú pháp JavaScript, biết dùng một trình soạn thảo mã, rồi mới cài Node.js để chạy thử. Còn nếu đã có dự án chạy được, hãy thêm công cụ quản lý mã và đóng gói sau cùng.

Kết luận

Node.js không phải một sản phẩm để mở ra và bấm nút, mà là hạ tầng để bạn tự viết phần mềm. Giá trị của nó nằm ở chỗ cho phép một người đã biết JavaScript làm được cả phần máy chủ, công cụ dòng lệnh và script tự động mà không phải đổi ngôn ngữ.

Điều cần lưu ý là các bản Node.js có vòng đời hỗ trợ hữu hạn, nên bạn sẽ phải nâng cấp theo thời gian. Trước khi triển khai cho khách hàng, hãy đọc lại điều khoản giấy phép và chính sách hỗ trợ trên trang chủ dự án để nắm đúng phiên bản nào còn được vá bảo mật.

ĐÁNH GIÁ

Điểm mạnh & điểm yếu

Điểm mạnh

  • Miễn phí, mã nguồn mở và chạy được trên Windows, macOS lẫn Linux
  • Có sẵn module cho server, kiểm thử, xử lý tệp, luồng dữ liệu và luồng phụ
  • Trang chủ kèm ví dụ mã ngắn cho từng nhóm việc chính
  • Dùng chung JavaScript với phần giao diện nên nhóm nhỏ đỡ phải học thêm ngôn ngữ

Điểm yếu

  • Không có giao diện đồ hoạ, phải làm việc qua dòng lệnh
  • Bản cũ hết vòng đời thì không còn được vá miễn phí, phải nâng cấp định kỳ
  • Cần hiểu về tiến trình, luồng và lập trình bất đồng bộ mới làm được việc thật
  • Chất lượng thư viện bên ngoài không đồng đều, phải tự kiểm tra
Phù hợp nhất với
Lập trình viên đã biết JavaScript và muốn tự dựng phần máy chủNgười cần viết công cụ nội bộ, script tự động hoá hoặc xử lý tệp theo lịchNhóm nhỏ muốn dùng một ngôn ngữ cho cả giao diện và máy chủNgười học backend và đã nắm cú pháp JavaScript cơ bản
HỎI ĐÁP

Câu hỏi thường gặp

Node.js có miễn phí không?

Có. Trang chủ giới thiệu Node.js là môi trường chạy miễn phí và mã nguồn mở, không có gói trả phí cho bản chính. Chi phí duy nhất có thể phát sinh là khi bạn cần hỗ trợ bảo mật cho những bản đã hết vòng đời.

Node.js chạy trên hệ điều hành nào?

Trang chủ mô tả đây là môi trường chạy đa nền tảng, dùng được trên Windows, macOS và Linux. Bạn tải bản cài phù hợp với hệ điều hành của mình từ mục Download trên trang chủ.

Node.js có phải ngôn ngữ lập trình mới không?

Không. Node.js không phải ngôn ngữ, mà là môi trường để chạy JavaScript bên ngoài trình duyệt. Bạn vẫn viết JavaScript như bình thường, chỉ khác là mã của bạn giờ chạy trên máy chủ hoặc trên máy cá nhân.

Không biết JavaScript thì có học Node.js được không?

Được nhưng sẽ rất dốc, vì Node.js không có giao diện để nhìn kết quả và đòi hỏi hiểu biết về tiến trình, luồng, xử lý lỗi bất đồng bộ. Cách hợp lý hơn là nắm cú pháp JavaScript trước, rồi quay lại với Node.js sau.

Node.js có dựng được giao diện website không?

Bản thân Node.js chỉ chạy phần phía máy chủ, không vẽ giao diện cho người dùng. Muốn có giao diện, bạn cần thêm một thư viện hoặc framework phía trình duyệt, còn Node.js đảm nhiệm phần xử lý dữ liệu và trả kết quả về.

Bản LTS và bản mới nhất khác nhau thế nào?

Trang chủ hiển thị hai nhánh phiên bản: bản LTS được hỗ trợ dài hạn, còn bản mới nhất chứa các thay đổi vừa phát hành. Với dự án thật, nên chọn bản LTS để tránh phải nâng cấp liên tục.

Node.js có công cụ kiểm thử sẵn không?

Có. Trang chủ đưa ví dụ dùng module node:test kèm node:assert để viết kiểm thử ngay trong dự án. Với dự án nhỏ, bạn không cần cài thêm thư viện kiểm thử bên ngoài.

Node.js có thay thế được Docker hay Git không?

Không, ba công cụ này nằm ở tầng khác nhau. Node.js là môi trường chạy mã, Docker đóng gói môi trường chạy, còn Git quản lý lịch sử thay đổi mã nguồn. Một dự án nghiêm túc thường dùng cả ba cùng lúc.

Node.js có phù hợp cho ứng dụng chạy lâu dài không?

Có, miễn là bạn chấp nhận việc nâng cấp phiên bản định kỳ. Các bản Node.js có thời hạn hỗ trợ, hết hạn thì không còn được vá miễn phí, nên dự án chạy nhiều năm cần có kế hoạch cập nhật ngay từ đầu.

Dùng Node.js có phải trả phí cho thư viện bên ngoài không?

Phần lớn thư viện trong hệ sinh thái là miễn phí, nhưng chất lượng và mức độ được bảo trì không đồng đều. Bạn nên tự kiểm tra trước khi đưa vào dự án, và đọc kỹ giấy phép của từng gói nếu sản phẩm dùng cho mục đích thương mại.

KẾT LUẬN

Node.js là lựa chọn gần như mặc định nếu bạn viết JavaScript và cần một môi trường chạy phía máy chủ miễn phí, nhiều module có sẵn. Người chưa biết JavaScript, hoặc cần công cụ có giao diện kéo thả, nên tìm hướng khác trước.