0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Khám Phá NodeJS: Nguyên Lý Cốt Lõi Nên Biết

Đăng vào 3 tuần trước

• 3 phút đọc

Tổng Quan Về NodeJS

NodeJS là một môi trường thực thi Javascript mã nguồn mở, đa nền tảng, cho phép Javascript tương tác với hệ thống bên ngoài trình duyệt. Được phát triển bởi Ryan Dahl vào năm 2009, NodeJS sử dụng V8 engine của Google Chrome để mang đến khả năng chạy ứng dụng bên ngoài trình duyệt. Sự phát triển mạnh mẽ của NodeJS nằm ở khả năng phát triển cả Frontend lẫn Backend chỉ với một ngôn ngữ duy nhất là Javascript. Bài viết này sẽ khám phá những nguyên lý cốt lõi của NodeJS mà mọi lập trình viên nên biết.

Khái Niệm Blocking và Non-blocking

  • Blocking: Trong lập trình, một câu lệnh được thực hiện lần lượt. Nếu một nhiệm vụ mất nhiều thời gian để xử lý, các lệnh kế tiếp sẽ bị chặn lại, dẫn đến hiện tượng tắc nghẽn. Ví dụ:
javascript Copy
const fs = require('node:fs');
const data = fs.readFileSync('/file.md'); // Chặn tại đây cho đến khi tệp được đọc
console.log(data);
moreWork(); // Chạy sau log
  • Non-blocking: Ngược lại, với non-blocking, các câu lệnh có thể tiếp tục thực thi mà không chờ đợi nhiệm vụ trước đó hoàn thành. Đây là điều thiết yếu trong lập trình server để phục vụ nhiều khách hàng. Ví dụ:
javascript Copy
const fs = require('node:fs');
fs.readFile('/file.md', (err, data) => {
  if (err) throw err;
  console.log(data);
});
moreWork(); // Chạy trước khi log

Tìm Hiểu Về Asynchronous

  • Phân biệt đồng bộbất đồng bộ: Trong lập trình đồng bộ, các lệnh được xử lý theo thứ tự, trong khi lập trình bất đồng bộ cho phép thực thi song song. NodeJS xử lý bất đồng bộ thông qua non-blocking I/O.

  • Javascript vốn là ngôn ngữ đồng bộ và đơn luồng, điều này có nghĩa là không thể tạo thread mới và chạy song song. Để khắc phục hiện tượng blocking, NodeJS cung cấp các giải pháp như callback, promise và async/await.

Khái Niệm Callback

  • Callback là hàm được truyền vào một hàm khác với nhiệm vụ tiếp tục thao tác khi tác vụ trước đó hoàn thành. Ví dụ:
javascript Copy
function parent(params, callback) {
  const callbackParam = params[0];
  callback(callbackParam);
}
parent([1, 2, 3], result => {
  console.log(result); // => 1
});
  • Sử dụng callback có thể dẫn đến callback hell, nơi quá nhiều callback lồng nhau gây khó khăn trong việc đọc mã. Để giải quyết, các tính năng như Promise và Async/Await đã được giới thiệu.

Giới Thiệu Về Event Loop

  • Event Loop là thành phần quyết định khả năng xử lý nhiệm vụ đồng thời trong NodeJS. Nó theo dõi Call stack và Queue để thực thi tất cả các callback chưa hoàn thành.

Các Phase Của Event Loop

  1. Timers: Xử lý callback từ setTimeout, setInterval.
  2. Pending Callbacks: Thực thi lỗi của hệ thống.
  3. Poll: Nhận callback từ queue và thực thi chúng theo thứ tự.
  4. Check: Cho phép thực hiện callback ngay sau poll phase hoàn tất.
  5. Close Callbacks: Xử lý các callback khi socket hoặc handle bị đóng đột ngột.
  6. process.nextTick(): Đảm bảo callback được thực thi ngay sau khi hoàn thành tác vụ hiện tại.

Kết Luận

Việc nắm vững các nguyên lý cốt lõi của NodeJS là rất quan trọng để xây dựng phần mềm chất lượng cao. Hy vọng bài viết này đã cung cấp cho bạn cái nhìn rõ ràng và tổng quan về NodeJS. NodeJS còn bàn sâu hơn về các khái niệm và tối ưu hóa hệ thống trong các bài viết tiếp theo. Cảm ơn bạn đã đọc!

Nguồn Tham Khảo

  • Tài liệu NodeJS
  • Wikipedia
    source: viblo
Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào