Kiến trúc Node.js - Giới thiệu về Node.js

Kiến trúc Node.js - Giới thiệu về Node.js

Tin ngắn hàng ngày dành cho bạn
  • Diễn biến mới nhất của vụ kiện cái tên JavaScript với Oracle:

    Deno v Oracle Update 3: Fighting the JavaScript Trademark

    Tóm tắt lại Oracle đã nộp đơn bác bỏ yêu cầu của nhóm Deno nhưng cuộc chiến vẫn sẽ tiếp tục để đòi lại công bằng cho cộng đồng những người yêu thích JavaScript và mong muốn phát triển nó.

    » Xem thêm
  • Vậy là mình đã chính thức phát hành trang Cửa hàng trên blog 2coffee.dev rồi đó mọi người 🥳

    Đây đơn giản là các sản phẩm mình đã mua và trải nghiệm thấy tốt, phù hợp với giá tiền, với nhu cầu sử dụng của mình và mong muốn chia sẻ đến các bạn đọc. Mọi người ghé qua xem cho vui nha. Ban đầu chưa có nhiều thời gian để chỉnh sửa nội dung. Mình sẽ cập nhật dần dần nha. Cảm ơn mọi người.

    » Xem thêm
  • Cuối tuần đang ngồi làm cái Cửa hàng cho thư giãn mọi người ạ. Trước mình đã làm một lần rồi cơ mà làm cho có, bán được hẳn 1 cuốn sách 😆

    Giờ làm lại, sẽ đa dạng sản phẩm hơn. Dự là đăng mấy sản phẩm đã mua và dùng rồi kèm theo vài dòng nhận xét cho mọi người tham khảo 🤓

    » Xem thêm

Vấn đề

Series bài viết này hy vọng sẽ mang đến cho mọi người một cái nhìn tổng quan về mô hình kiến trúc của Node.js, về cách mà nó hoạt động, qua đó phần nào giúp cho bạn đọc hiểu được chương trình được thực như thế nào với Node. Bạn sẽ biết cách viết và tổ chức mã tối ưu hơn.

Dự kiến số lượng bài viết trong chủ đề này sẽ bao gồm 4 bài đi từ cơ bản đến nâng cao. Nội dung trong mỗi phần đều có liên quan đến nhau vì thế bạn không nên bỏ qua một phần nào, hãy theo dõi nội dung lần lượt theo thứ tự để nội dung được xuyên suốt.

Xem thêm các bài viết trong series này:

Ở bài viết đầu tiên, tôi sẽ nói về ngôn ngữ JavaScript cùng các khái niệm cơ bản của Node.js. Tại sao JavaScript lại liên quan đến Node.js? Hãy cùng nhau tìm hiểu nhé.

Javascript

Javascript hẳn không còn quá xa lạ với những người trong giới lập trình. Nó hiện tại đang là bá chủ trên các trình duyệt web, là ngôn ngữ được sử dụng rất nhiều để lập trình front-end. Nhờ nó mà các lập trình viên mới tạo ra được website tối ưu hóa các trải nghiệm của người dùng.

JavaScript được tạo trong mười ngày bởi Brandan Eich, một nhân viên của Netscape, vào tháng 9 năm 1995. Được đặt tên đầu tiên là Mocha, tên của nó được đổi thành Mona rồi LiveScript trước khi thật sự trở thành JavaScript nổi tiếng như bây giờ.

Trong năm 1996, JavaScript được chính thức đặt tên là ECMAScript. ECMAScript 2 phát hành năm 1998 và ECMAScript 3 tiếp tục ra mắt vào năm 1999. Nó liên tục phát triển thành JavaScript ngày nay, giờ đã hoạt động trên khắp mọi trình duyệt và trên khắp các thiết bị từ di động đến máy tính bàn.

Tính đến năng 2016 đã có hơn 92% các website đều sử dụng JavaScript và nó hiện tại cũng đứng đầu trên github về độ phổ biến của các project có sử dụng JavaScript.

Javascript trên trình duyệt & Javascript Runtime

JavaScript được sử dụng phổ biến trong lập trình website, khiến chúng trở nên linh động và có tính tương tác tốt. Do đó mã JavaScript sẽ phụ thuộc vào việc được các trình duyệt hỗ trợ thực thi và điều này được thực hiện bởi JavaScript Engine.

JavaScript Engine được sử dụng để chuyển đổi mã JavaScript thành mã máy. JavaScript Engine hoạt động như một trình thông dịch, nó bao gồm Memory Heap (lưu trữ các đối tượng như các biến, hàm) và Call Stack (để thực thi các hàm).

JavaScript Engine

Hầu hết các trình duyệt hiện đại hiện nay sử dụng Javascript Runtime bằng cách sử dụng các Javascript Engine hỗ trợ chuyển đổi mã Javascript và thực thi. Các trình duyệt khác nhau sẽ sử dụng các Javascript Engine khác nhau.

Ví dụ Chrome sử dụng Javascript V8 Engine, Mozilla FireFox sử dụng SpiderMonkey Javascript Engine, Còn Microsoft Edge phiên bản cũ trước khi chưa dùng nhân Chromium thì sử dụng Chakra Javascript Engine.

Trình duyệt cũng cung cấp Web APIs cho phép mã Javascript truy cập vào một số đối tượng như window, document mà chúng không phải là "core" của JavaScript. Hiểu đơn giản, DOM là của trình duyệt còn JavaScript thì không.

Chính vì mỗi trình duyệt sử dụng một Engine khác nhau nên chúng có thể diễn giải mã JavaScript theo cách khác nhau, điều này dẫn đến một số mã có thể mang lại những kết quả khác nhau. Đó cũng là minh chứng cho việc một trang web chạy rất tốt trên Chrome nhưng sang đến IE, Firefox... thì lại hoạt động một cách bất bình thường.

Chính vì thế, từ năm 2016 - Ecma International (hiểu nôm na là đơn vị quản lý tiêu chuẩn của ngôn ngữ Javascript) đã đặt ra cách quy tắc gọi tên các phiên bản Javascript. ES5 là phiên bản ECMAScript từ năm 2009 đến 2015, từ 2015 trở đi các phiên bản lần lượt là ES6 - 2015, ES7 - 2016... Mỗi năm hội đồng sẽ phê duyệt và phát hành các phiên bản ES. Tính đến thời điểm viết bài là 2021 đã có phiên bản ES12. Mỗi phiên bản đều có những cải tiến và những tính năng mới, tuy nhiên việc triển khai nó lại hoàn toàn phụ thuộc vào việc các đơn vị phát triển trình duyệt có hỗ trợ nó hay không.

Javascript và Node.js có liên quan gì với nhau?

JavaScript ban đầu là ngôn ngữ lập trình front-end, được biết đến như một trong những ngôn ngữ lập trình phổ biến nhất trên thế giới. Node.js được tạo ra với một nỗ lực là mang Javascript về phát triển trên môi trường máy chủ.

2009, Ryan Dahl đã quyết định sử dụng Javascript Engine nhanh nhất - V8 của Chrome, làm cho nó hoạt động mà không cần trình duyệt, đặt tiền đề cho Node.js ra đời. Mã của V8 được viết bằng C++ giúp nó có thể thực thi trực tiếp trên hệ điều hành.

Node.js sử dụng V8 Engine để diễn giải mã JavaScript thành mã máy. Vì Node.js được viết cho hệ điều hành chứ không phải trình duyệt, một số API Web cho trình duyệt như window, document không được triển khai trong Node.

Cũng cần lưu ý rằng Node.js không hỗ trợ tất cả các tính năng JavaScript (chuẩn ECMAScript) ngay lập tức mà phải thông qua các bản cập nhật. Điều đó đồng nghĩa với việc nếu muốn sử dụng tính năng của ES mới, bạn phải chờ đợi Node.js tung ra các bản cập nhật.

Tóm lại, Node.js cung cấp một môi trường chạy mã JavaScript bên ngoài trình duyệt.

Bạn đọc có thể tham khảo thêm bài viết hướng dẫn cài đặt Node.js Cài đặt node.js, chạy ứng dụng node.js đầu tiên.

Thế thì Node.js có phải là một ngôn ngữ lập trình?

Không! Node.js chỉ là một môi trường chạy mã JavaScript. Bởi vì thực tế, Node chỉ cung cấp môi trường chạy mã JavaScript thông qua V8 Engine của Chrome.

Dưới đây là một vài kết luận về Node.js:

  • Node.js không phải là một ngôn ngữ lập trình.
  • Node.js không phải là một Framework cho ứng dụng máy chủ, nó là nền tảng.
  • Node.js cung cấp môi trường chạy mã JavaScript phía máy chủ.

Node.js được cấu tạo gồm có nhiều thành phần kết nối với nhau để tạo ra một môi trường hoàn hảo. Dưới đây là sơ đồ mô tả kiển trúc node.js:

Mô hình kiến trúc

Trong đó các thành phần được mô tả như sau:

  • V8: Đây là bộ Engine V8 của Chrome, bao gồm Memory Heap, Call Stack, Garbage Collector và chuyển đổi mã JavaScript thành mã máy của hệ điều hành.

  • Libuv: Là một thư viện quan trọng, bao gồm Thread Pool và Event Loop, Event Queue. Nó là thư viện C đa nền tảng tập trung vào các tác vụ I/O không đồng bộ.

  • Node.js Standard Library: Bao gồm các thư viện, các chức năng liên quan đến hệ điều hành cho Timers như setTimeout , File system như fs, Network Calls như http.

  • llhttp: Phân tích request/response HTTP (trước đây là http-parse).

  • c-ares: Thư viện C cho DNS không đồng bộ được sử dụng trong dns module.

  • open-ssl: Các chức năng mã hóa được sử dụng trong TLS (SSL), crypto module.

  • zlib: Nén và giải nén bằng cách chạy đồng bộ, không đồng bộ và streaming.

  • Node.js API: Cung cấp JavaScript API được sử dụng bởi các ứng dụng.

Kết luận

Nội dung trên trong bài viết cung cấp khái niệm cơ bản về JavaScript, JavaScript Runtime, JavaScript Engine, về việc tại sao lại có những trang web tương thích rất tốt với trình duyệt này nhưng lại "tệ hại" trên trình duyệt khác, về khái niệm của Node.js và cả thành phần trong mô hình kiến trúc của Node.

Về cơ bản, Node.js được cấu tạo từ nhiều phần nhỏ. Vậy thì cách mà các thành phần đó hoạt động, liên kết với nhau như thế nào? Hãy xem tiếp Phần 2 của loạt series Kiến trúc Node.js trên 2COFFEE.DEV.

Cao cấp
Hello

5 bài học sâu sắc

Mỗi sản phẩm đi kèm với những câu chuyện. Thành công của người khác là nguồn cảm hứng cho nhiều người theo sau. 5 bài học rút ra được đã thay đổi con người tôi mãi mãi. Còn bạn? Hãy bấm vào ngay!

Mỗi sản phẩm đi kèm với những câu chuyện. Thành công của người khác là nguồn cảm hứng cho nhiều người theo sau. 5 bài học rút ra được đã thay đổi con người tôi mãi mãi. Còn bạn? Hãy bấm vào ngay!

Xem tất cả

Đăng ký nhận thông báo bài viết mới

hoặc
* Bản tin tổng hợp được gửi mỗi 1-2 tuần, huỷ bất cứ lúc nào.

Bình luận (0)

Nội dung bình luận...