Facebook Pixel

NodeJS là gì? Tại sao NodeJS lại phổ biến

09 Jul, 2024

Tran Thuy Vy

Frontend Developer

Nodejs là một môi trường runtime chạy JavaScript đa nền tảng, open-source (mã nguồn mở).

NodeJS là gì? Tại sao NodeJS lại phổ biến

Mục Lục

Node.js là một công cụ đơn giản nhưng hiệu quả, giúp bạn sử dụng JavaScript - một ngôn ngữ quen thuộc ở phía client - để xử lý các tác vụ phía server. Điều này không chỉ hợp nhất ngôn ngữ lập trình trên cả hai phía, mà còn mở ra cánh cửa cho những ai muốn chuyển từ lập trình giao diện (frontend) sang full-stack.

1. NodeJS là gì?

Nodejs là một môi trường runtime chạy JavaScript đa nền tảng, open-source (mã nguồn mở), được sử dụng rộng rãi bởi lập trình viên cho nhiều dự án. Nodejs cung cấp nhiều thư viện khác nhau, giúp đơn giản hóa việc lập trình.

Định nghĩa có thể với các bạn khá trừu tượng, nên mình sẽ giải thích khá ngắn gọn để làm rõ hơn định nghĩa trên:

  • Nodejs là một môi trường JavaScript runtime: Nodejs cung cấp môi trường runtime ngoài trình duyệt, cho phép bạn chạy mã JS nhanh chóng.
  • Nodejs đa nền tảng: Nodejs có thể chạy trên nhiều nền tảng hệ điều hành khác nhau: Windows, Linux, Unix, Mac OS X,...
  • Nodejs là open-source: source Nodejs được cung cấp công khai, cho phép bạn tạo ra module, đóng góp và duy trì.
  • Một trong những tính năng chính của Nodejs là, cho phép xử lý đồng thời nhiều yêu cầu, mà không chặn các yêu cầu khác.
Nodejs là gì

2. Tại sao nên sử dụng Nodejs?

  • Lập trình bất đồng bộ: Server không cần chờ dữ liệu mà API trả về, vẫn có thể xử lý các yêu cầu khác.
  • Tốc độ: Được xây dựng dựa trên engine JavaScript V8, Nodejs thực thi mã nhanh.
  • NPM: Với hơn 50,000 package khác nhau, developer dễ dàng tìm kiếm, lựa chọn và tích hợp tính năng cần thiết vào dự án của mình.
  • Không có buffering: Nodejs xử lý các tệp âm thanh và video hiệu quả bằng cách xuất dữ liệu theo từng phần (chunk) thay vì buffer dữ liệu.
  • Đơn luồng: Nodejs sử dụng mô hình đơn luồng với vòng lặp sự kiện (Event loop), giúp xử lý số lượng request nhiều hơn so với các server truyền thống như Apache HTTP Server.
  • Bạn có thể thấy rõ qua sơ đồ xử lý tệp giữa PHP/ASP và Nodejs sau:
Tại sao nên sử dụng Nodejs

Nodejs không đợi khi task hoàn thành mà tiếp tục xử lý request khác ngay lập tức nhờ cơ chế bất đồng bộ, non-blocking.

3. Đâu là lầm tưởng sai về Nodejs của developer?

Mình sẽ đề cập đến một vài lầm tưởng phổ biến mà hầu như bạn dev nào cũng từng mắc phải về Nodejs:

  • Nodejs chạy đa luồng vì khả năng xử lý nhiều tác vụ cùng lúc: Đây là một lầm tưởng mà dường như dev nào cũng mắc phải. Thực tế thì, Nodejs chạy đơn luồng, và sự kỳ diệu nằm ở cơ chế hoạt động của Event Loop.
  • Nodejs là web framework: Đây là một nhận định sai lầm. Nodejs không phải là một framework, nó chỉ là nền tảng cho phép chạy Javascript.
  • Nodejs là một ngôn ngữ lập trình: Hoàn toàn không đúng. Nodejs không phải ngôn ngữ lập trình, mà chỉ là một môi trường runtime.
  • Nodejs chỉ sử dụng riêng cho phía frontend hoặc backend: Không hoàn toàn chính xác, Nodejs có thể sử dụng cho cả hai phía.

4. Cơ chế hoạt động của Nodejs

Cơ chế hoạt động của Nodejs
  • Nhiều client sẽ gửi request đến server, sẽ được đưa vào Event Queue.
  • Event Loop sẽ lấy lần lượt các request từ hàng đợi và xử lý chúng.
  • Nếu request cần thực hiện các tác vụ non-blocking I/O, Event Loop sẽ tự động xử lý rồi trả về response.
  • Đối với những tác vụ blocking I/O, Event Loop sẽ đưa tasks qua Thread Pool (thông qua thư viện Libuv).
  • Khi thread đã thực hiện xong, kết quả sẽ được Nodejs đẩy callback của tasks đó về Event Queue để xử lý.
  • Cuối cùng, response sẽ được phản hồi lại cho các client.

Qua sơ đồ này, bạn sẽ thấy rõ cách Nodejs sử dụng Event Loop và mô hình I/O bất đồng bộ để xử lý một số lượng lớn request đồng thời một cách hiệu quả.

5. Ưu điểm của Nodejs

  • Hiệu suất cao: Nodejs chạy đơn luồng, sử dụng V8 Engine, giúp ứng dụng đảm bảo tốc độ khi có nhiều requests.
  • Xử lý bất đồng bộ và I/O hướng sự kiện: Khả năng xử lý I/O bất đồng bộ, giúp Nodejs có thể xử lý nhiều tasks, mà không cần phải chờ kết quả của task trước đó.
  • Phát triển ứng dụng: Có thể sử dụng để phát triển ứng dụng ở cả phía client và server.
  • Module đa dạng: Nodejs sở hữu một cộng đồng duy trì, phát triển modules, thư viện giúp cho việc phát triển ứng dụng nhanh chóng.
  • Stream và xử lý file lớn: Nodejs hỗ trợ streaming, cho phép xử lý các file có kích thước lớn không tốn nhiều tài nguyên.
  • Phù hợp với ứng dụng real time: Do Nodejs xử lý bất đồng bộ, thích hợp với các ứng dụng real time như: chat applications, streaming services,...

6. Nhược điểm của Nodejs

Đây là một vài hạn chế của Nodejs mà khi xây dựng, phát triển ứng dụng, bạn cần phải cân nhắc trước khi bắt đầu quá trình build:

  • Cần có kiến thức nền tảng về JavaScript.
  • Khá phức tạp trong việc thao tác với cơ sử dữ liệu quan hệ.
  • Mỗi callback sẽ đi kèm với rất nhiều callback lồng nhau khác, dễ dẫn đến tình trạng "callback hell".
  • Không phù hợp với các tác vụ đòi hỏi nhiều CPU core.

7. Hướng dẫn khởi tạo dự án Nodejs

7.1 Download và install Nodejs

  • Bạn nên vào website chính thức của Nodejs để download và cài đặt package thích hợp.
nodejs-la-gi-4
  • Sau khi cài đặt xong, bạn có thể kiểm tra phiên bản bằng lệnh: node -v trong cmd.
  • Nếu như cài đặt đã thành công, bạn sẽ thấy version Nodejs mà bạn đã cài đặt.
nodejs-la-gi-5

7.2 Khởi tạo dự án đầu tiên với Nodejs

Mình sẽ bắt đầu xây dựng một dự án đơn giản Hello 200lab nhé!

B1: Bạn tạo một thư mục với tên project-200lab để chứa dự án.

nodejs-la-gi-6

B2: Mở thư mục vừa tạo bằng code editor của bạn. Ví dụ ở đây mình sử dụng VS Code (Visual Studio Code).

B3: Bên trong folder, tạo một file mới với tên app.js

B4: Trong file app.js bạn thêm đoạn mã JS như hình dưới:

nodejs-la-gi-7

B5: Bạn có thể chạy script trong terminal với lệnh: node <filename>. Với project này filename của mình là app.js.

🚙
node app.js

Lúc này bạn sẽ thấy chuỗi in ra tại terminal là Hello 200lab

nodejs-la-gi-8

8. Kiểm soát các phiên bản Nodejs với nvm

8.1 Giới thiệu nvm

Khi các bạn phải làm nhiều project cùng một lúc, nhưng lại khác phiên bản Nodejs. Bạn sẽ phải lặp đi lặp lại quá trình gỡ, cài đặt cho đúng phiên bản của dự án. Việc này rất khó chịu, phiền phức.

Nvm (Node Version Management) ra đời giải quyết vấn đề trên bằng một câu lệnh. Nvm là công cụ giúp bạn quản lý, chuyển đổi giữa các phiên bản Nodejs.

nodejs-la-gi-9

8.2 Cài đặt và hướng dẫn sử dụng

8.2.1 Cài đặt

B1: Bạn có thể cài đặt nvm tại đây

B2: Sau khi cài đặt thành công bạn có thể kiểm tra phiên bản nvm bằng lệnh: nvm -v. Khi thành công bạn sẽ xem được phiên bản của nvm.

nodejs-la-gi-10

8.2.2 Hướng dẫn sử dụng một vài câu lệnh thường sử dụng

  • Để xem danh sách các phiên bản Nodejs trong máy:
✔️
nvm ls
  • Chọn phiên bản Nodejs bạn cần cài đặt cho dự án. Ví dụ: mình muốn cài đặt Nodejs 22.4.0
✔️
nvm install 22.4.0
nodejs-la-gi-11
  • Bạn muốn sử dụng phiên bản 22.4.0 mà không phải là 21.7.3 nữa
✔️
nvm use 22.4.0
nodejs-la-gi-12
  • Bạn muốn xóa phiên bản Nodejs không còn cần thiết nữa:
✔️
nvm uninstall 22.4.0
nodejs-la-gi-13

9. Kết luận

Thông qua bài viết, hy vọng bạn đã có kiến thức để tự tin bắt đầu hành trình developer với Nodejs.

  • Những khái niệm cơ bản, lợi ích của Nodejs.
  • Nguyên do Nodejs lại được sử dụng phổ biến.
  • Cơ chế hoạt động của Nodejs.
  • Những lầm tưởng về Nodejs.
  • Ưu và nhược điểm của Nodejs.
  • Cách khởi tạo một dự án basic.
  • Sử dụng nvm để quản lý, chuyển đổi giữa các phiên bản Nodejs.

Bạn có thể tham khảo thêm các bài blog cùng chủ đề:

Bài viết liên quan

Lập trình backend expressjs

xây dựng hệ thống microservices
  • Kiến trúc Hexagonal và ứng dụngal font-
  • TypeScript: OOP và nguyên lý SOLIDal font-
  • Event-Driven Architecture, Queue & PubSubal font-
  • Basic scalable System Designal font-

Đăng ký nhận thông báo

Đừng bỏ lỡ những bài viết thú vị từ 200Lab