Node.js là một run-time environment (RTE) vô cùng thông dụng, giúp các nhà phát triển xây dựng tính năng cho hàng triệu trang web trên thế giới. Hãy cùng chúng tôi tìm hiểu về Node.js và vai trò và lý do tại sao bạn nên sử dụng nền tảng này qua bài viết sau đây.
Node.js là gì?
Từ những ngày đầu phát triển, JavaScript được dùng để viết kịch bản cho các máy khách (client-side scripting) bởi ngôn ngữ này chỉ c sử dụng được ở thẻ <script>
. Ra đời vào năm 2009 và được tạo ra bởi kỹ sư phần mềm Ryan Lienhart Dahl, Node.js cung cấp mọi thứ cần thiết để hoàn thiện một chương trình được viết bằng JavaScript.
Node.js là một RTE có thể hoạt động đa nền tảng, dựa trên mã nguồn mở để xây dựng các ứng dụng một cách nhanh chóng và có khả năng mở rộng. Được xây dựng trên “V8 JavaScript Engine” của Google Chrome với cấu trúc I/O non-block, mô hình event-driven (hướng sự kiện) giúp nó hoạt động hiệu quả với các ứng dụng thời gian thực.
Cấu trúc và cách hoạt động của Node.js
Node.js sử dụng cấu trúc “Single Thread Event Loop” để xử lý nhiều máy khách cùng một lúc. Để hiểu điều này, chúng ta cần phải biết cách ngôn ngữ như Java xử lý đồng thời đa luồng các máy khách.
Có một tình huống thực tế đặt ra là có một số lượng lớn các yêu cầu từ các máy khách khác nhau gửi tới máy chủ và chờ được phản hồi. Lúc này, máy chủ phải xử lý từng yêu cầu trước khi trả kết quả. Và mô hình đa luồng được dùng để xử lý các yêu cầu cùng một lúc. Trong một nhóm luồng cụ thể được chỉ định, khi có một yêu cầu gửi đến, một luồng riêng lẻ được lựa chọn tách ra để xử lý yêu cầu đó. Node.js hoạt động hoàn toàn khác, chúng ta hãy xem từng bước mà nó thực hiện:
- Node.js chuẩn bị sẵn một nhóm luồng để xử lý các yêu cầu.
- Khi có một yêu cầu được gửi tới, Node.js sắp xếp nó vào hàng chờ.
- Bây giờ, cấu trúc cốt lõi “Single Thread Event Loop” – hoạt động và “Event Loop” chờ đợi các yêu cầu vô thời hạn.
- Khi một yêu cầu xuất hiện, vòng lặp kiểm tra xem nó có yêu cầu cơ chế blocking I/O không. Nếu không, nó xử lý yêu cầu và gửi phản hồi.
- Nếu yêu cầu có cơ chế blocking để thực hiện, “Event Loop” sẽ chỉ định một luồng đơn từ nhóm luồng bên trong để xử lý yêu cầu đó. Có các luồng nội bộ hạn chế có sẵn và nhóm luồng phụ trợ này được gọi là worker group.
- “Event Loop” theo dõi các yêu cầu bị blocking và sắp xếp chúng vào hàng đợi, sau khi nhiệm vụ blocking được xử lý. Đây là cách nó duy trì đặc trưng non-blocking của mình.
Node.js sử dụng ít luồng và ít tài nguyên/bộ nhớ hơn, nên kết quả là nó thực thi tác vụ nhanh hơn. Vì vậy, kiến trúc đơn luồng này có hiệu suất hoạt động không kém gì kiến trúc đa luồng. Khi cần sử dụng nhiều dữ liệu để xử lý một số lượng lớn các tác vụ, thì việc sử dụng các ngôn ngữ đa luồng như Java thực sự mang lại hiệu quả. Nhưng Node.js sẽ là lựa chọn tốt nhất dành cho các ứng dụng thời gian thực.
Các tính năng của Node.js
Trải qua gần 14 năm phát triển, Node.js đã nhanh chóng trở thành nền tảng được sử dụng phổ biến và rộng rãi. Node.js được cộng đồng các nhà phát triển/thiết kế yêu thích, bởi những tính năng tuyệt vời mà nó đem lại. Cụ thể đó là:
- Đối với những người mới, Node.js thân thiện và rất dễ sử dụng. Có cả một cộng đồng lớn sử dụng với rất nhiều hướng dẫn về nền tảng này để bạn có thể học và phát triển.
- Đây là nền tảng cung cấp khả năng mở rộng rộng lớn cho các ứng dụng. Node.js sử dụng cấu hình đơn luồng với “Event Loop”, giúp người dùng xử lý đồng thời các kết nối số lượng lớn mang lại hiệu suất làm việc cao hơn.
- Tốc độ thực hiện non-blocking luồng làm cho Node.js nhanh hơn và hiệu suất cao hơn.
- Một tập hợp các package Node.js nguồn mở rộng lớn có sẵn có thể đơn giản hóa công việc của bạn. Hệ sinh thái NPM có sẵn hơn một triệu gói cho bạn sử dụng.
- Node.js được viết bằng C và C ++, điều này làm cho nó nhanh chóng và thêm các tính năng như hỗ trợ kết nối mạng.
- Hỗ trợ đa nền tảng và giúp bạn tạo trang web SaaS, các ứng dụng cho điện thoại, PC.
- Các developer của front-end và back-end đều lựa chọn Node.js để quản lý với một ngôn ngữ duy nhất là JavaScript.
Ứng dụng thực tế của Node.js
Một thực tế không thể phủ nhận là Node.js có tốc độ phát triển nhanh chóng mặt và mức độ phổ biến rộng rãi hơn bao giờ hết. Chỉ riêng năm 2018, đã có hơn 1 tỷ lượt tải xuống Node.js và theo W3Techs, Node.js được sử dụng bởi 20 triệu trang web trên internet chiếm 1,2% tổng số các trang web trên thế giới. Các ứng dụng mà Node.js thường được lựa chọn:
- Nhắn tin real-time (thời gian thực) – Node.js xử lý các cuộc giao tiếp real-time, nó có thể mở rộng quy mô để xây dựng tính năng chatbot, trò chuyện bổ sung, trò chuyện nhóm.
- Các ứng dụng Internet of Things (IOT) chứa nhiều cảm biến, vì chúng gửi các khối dữ liệu nhỏ một cách thường xuyên điều này tạo ra rất nhiều yêu cầu. Node.js là một lựa chọn tốt vì nó có thể xử lý các yêu cầu đồng thời này một cách nhanh chóng.
- Truyền phát dữ liệu – Netflix sử dụng Node.js để phát trực tuyến. Vì ưu điểm của Node.js là nhẹ và nhanh, đồng thời Node.js cung cấp API phát trực tuyến gốc.
- Các ứng dụng một trang phức tạp (SPA- Complex Single Page Application) toàn bộ ứng dụng đều chứa trên một trang có khả năng gây quá tải, xử lý chậm. Và Event Loop của Node.js như một vị cứu tinh xử lý các yêu cầu theo kiểu non-blocking.
- Ứng dụng dựa trên API REST – JavaScript dùng được ở front-end và back-end của một website. Vì vậy, máy chủ có thể giao tiếp dễ dàng hơn với front-end thông qua API REST bằng Node.js. Node.js cũng cung cấp các gói như Express.js và KOA giúp xây dựng các ứng dụng web dễ dàng hơn.
Ứng dụng rộng rãi cho các phần mềm và trang web nên không ngạc nhiên khi các công ty lớn trên thế giới cũng tin tưởng và sử dụng Node.js. Có thể kể đến một số cái tên nổi bật như:
- Netflix: Nền tảng giải trí cho thuê video/phim trực tuyến lớn nhất hiện nay. Node.js dùng để xây dựng các ứng dụng cần dữ liệu cực lớn.
- NASA: Cơ quan hàng không vũ trụ Mỹ sử dụng Node.js nhằm tăng tốc độ truy cập và xử lý nhanh các tác vụ có dữ liệu cao, giúp cho server hoạt động ổn định 24/7.
- Walmart: Ông trùm bán lẻ lớn nhất của Mỹ đã ứng dụng tính năng I/O không đồng bộ và khả năng xử lý nhiều yêu cầu cùng một lúc.
- Paypal: Cũng ưu tiên sử dụng Node.js với khả năng xử lý dữ liệu lớn và tiết kiệm khá nhiều thời gian để xây dựng.
Bên cạnh đó, còn rất nhiều những cái tên cần phải nhắc đến như: Twitter, Spotify, Ebay, Medium, Reddit, Linkedin… như minh chứng cho sự phổ cập rộng rãi của nền tảng Node.js.
Node.js có phải là ngôn ngữ lập trình?
Node.js không phải là ngôn ngữ lập trình. Thay vào đó, đó là một RTE được dùng để chạy JavaScript bên ngoài trình duyệt.
Thời gian chạy Node.js được xây dựng trên nền tảng ngôn ngữ lập trình JavaScript và giúp tự chạy các framework. Tóm lại, Node.js là một môi trường hay một nền tảng cho các nhà phát triển, nhà thiết kế ứng dụng hoặc trang web.
Node.js là Front-end hay Back-end?
Các nhà phát triển thường chỉ sử dụng Node.js để xây dựng máy chủ, nhưng điều này không chính xác. Bởi Node.js có thể được sử dụng cả ở front-end và back-end. Và đây là lý do để dẫn đến kết luận trên:
- JavaScript là một ngôn ngữ được dùng để viết cả front-end và back-end với sự trợ giúp của các framework như Express.js và Meteor.js. MERN (1 stack khá phổ biến) sử dụng Express.js như một back-end (một framework của Node.js).
- Năng suất và hiệu quả làm việc của các developer tốt nhờ việc không phải thực hiện chuyển đổi ngữ cảnh quá nhiều giữa các loại ngôn ngữ, có thể tiết kiệm rất nhiều thời gian. Sử dụng JavaScript cho cả front-end và back-end dẫn đến hiệu quả tăng lên, vì có nhiều công cụ phổ biến cho cả hai.
- Cộng đồng sử dụng Node.js rất lớn và hoạt động tương tác sôi nổi, mạnh mẽ. Khi bạn gặp một số vấn đề rắc rối khó giải quyết, bạn có thể tìm kiếm giải pháp trên Stack Overflow.
Cài đặt Node.js như thế nào?
Node.js có thể chạy trên tất cả các hệ điều hành như Mac, Windows, Linux và cách cài đặt trên các hệ điều hành cũng rất đơn giản:
- Với Mac OS, bạn có thể sử dụng Homebrew và sử dụng lệnh:
brew install node
- Nếu sử dụng Window OS, bạn truy cập trang Web chính thức Nodejs.org để tải file cài đặt.
- Trên Ubuntu OS, bạn sử dụng lệnh “
sudo apt install nodejs
” hoặc “sudo apt update
”.
Kiểm tra version Node.js đã cài đặt:
node -v
hoặc node –version
Hệ sinh thái package NPM và các packgae phổ biến của Node.js
NPM là hệ sinh thái package của Node.js. Nó là hệ sinh thái lớn nhất của tất cả các thư viện nguồn mở trên thế giới, đã có sẵn hơn 1 triệu gói và đang được phát triển thêm. NPM sử dụng miễn phí và có rất nhiều developer nguồn mở đã và đang đóng góp cho nó hàng ngày.
NPM đính kèm với một ứng dụng code out-box, bạn chỉ cần truy cập trang web NPM để tìm kiếm gói bạn cần và cài đặt nó bằng một lệnh. Bạn cũng có thể quản lý các phiên bản của package, xem xét các phụ thuộc và thậm chí thiết lập các tập lệnh tùy chỉnh ở các dự án của bạn thông qua tiện ích dòng lệnh này.
Có thể nói NPM là hệ sinh thái được ưa chuộng nhất của cộng đồng sử dụng Node.js. Nền tảng Node.js thu hút một số lượng lớn các nhà phát triển phần lớn do hỗ trợ package tuyệt vời của nó. Ngoài ra, bạn có thể tham khảo một số package phổ biến như:
- Express.js – Là một framework xây dựng, phát triển website lấy cảm hứng từ Sinatra cho Node.js và tiêu chuẩn de-Facto cho phần lớn các ứng dụng Node.js hiện nay.
- MongoDB – Nó cung cấp API cho cơ sở dữ liệu ở Node.js.
- Socket.io– Cho phép giao tiếp real-time, hai chiều và dựa trên giao tiếp.
- Lodash làm cho JavaScript dễ dàng hơn bằng cách giải quyết những rắc rối khi làm việc với các mảng, số, đối tượng, chuỗi, v.v.
Cách cài đặt các NPM Packages:
npm install <package-name>
Có thể cài đặt nhiều Packages cùng 1 lúc:
npm install <pkg-1> <pkg-2> <pkg-3>
Viết “Hello World” với Node.js
Chúng ta hãy bắt đầu với việc viết “Hello World” trên Node.js, ta sẽ tạo một máy chủ với Node.js và nhận về kết quả đầu ra là “Hello World” trên yêu cầu máy chủ. Trước khi bạn bắt đầu, hãy chắc chắn tự thiết lập với một trình tex-editor tốt và để cho ra kết quả “Hello World” đây sẽ là dòng code bạn sử dụng:
{{EJS0}}
Ta ghi lại tệp này theo định dạng ‘server.js‘ sau đó hãy đến thiết bị đầu cuối và khởi động máy chủ bằng lệnh “node server.js
”. Máy chủ sẽ bắt đầu chạy ngay, để xác minh đầu ra, hãy mở “http:// localhost: 3000
” bằng trình duyệt của bạn. Bạn sẽ nhìn thấy kết quả “Hello World! Welcome to Node.js”
Giải thích về Server Node.js
Node.js đi kèm với một module tích hợp có tên là “HTTP” cho phép Node.js chuyển dữ liệu qua Giao thức HTTP (Hyper Text Transfer Protocol). Ở đoạn code trên, trước tiên ta cần tải module HTTP rồi sau đó mới sử dụng phương thức Createserver để chấp nhận yêu cầu và trả về phản hồi bằng code trạng thái. Cuối cùng, ta chờ xem kết quả tại một port xác định. Nếu bạn làm đúng theo các bước thì xin chúc mừng bạn vừa tạo ra máy chủ đầu tiên trong Node.js.
Tạo server bằng cách sử dụng Express
Theo cách hiểu của bạn thì một server (máy chủ) là gì? Một máy chủ thực hiện các yêu cầu của máy khách thông qua phần mềm của nó (phổ biến nhất là Apache hoặc Nginx), thực hiện bộ tác vụ cần thiết và cuối cùng gửi lại phản hồi cho máy khách. Express là một framework sẽ giúp chúng ta tạo một máy chủ với Node.js.
Express.js là một ứng dụng framework tối giản và linh hoạt mang đến cho người dùng một bộ tính năng mạnh mẽ cho các ứng dụng web và di động. Nó cho phép thêm các bảng tuyến đường và thiết lập phần mềm trung gian cho ứng dụng của bạn. Bạn có thể cài đặt Express bằng lệnh “npm install express --save
”.
Chúng ta đã dùng tiện ích HTTP được xây dựng để tạo máy chủ. Bây giờ, hãy tạo một server “Hello World” bằng Express.js và như thường lệ, hãy mở trình text-editor của bạn ra và nhập đoạn code sau đây:
{{EJS1}}
Tiếp theo, chúng ta sẽ chạy máy chủ với dòng lệnh “node server-express .js
” và sau đó kiểm tra kết quả đầu ra tại địa chỉ “http://localhost:3000
“ trên trình duyệt, bạn sẽ thấy kết quả đầu ra là “Hello World”.
Tổng kết về Node.js
Node.js là một nền tảng lập trình phổ biến để xây dựng các ứng dụng quy mô lớn cần xử lý nhiều yêu cầu cùng một lúc. Cơ chế non-blockig I/O đơn luồng làm cho nó trở thành một lựa chọn tuyệt vời cho cả các ứng dụng truyền dữ liệu và real-time.
Node.js có một cộng đồng lớn phát triển tích cực với kho lưu trữ gói nguồn mở NPM vô cùng đa dạng. Để bắt đầu với Node.js. Chúng tôi đã cho bạn xem cách cài đặt và tạo một máy chủ trên nền tảng Node.js, vì vậy tất cả những gì còn lại là xem xét cách bạn sử dụng và triển khai Node.js cũng như thời gian bạn bỏ ra để nghiên cứu nó. Bạn cũng có thể mở rộng kiến thức của mình bằng cách truy cập tài liệu chính thức của Node.js tại các nguồn học liệu phong phú trên Internet.
Hy vọng bài viết trên đây đã mang lại những thông tin hữu ích cho các bạn khi tìm hiểu về nền tảng Node.js. Nếu bạn có thắc mắc về nội dung trong bài viết trên, hãy để lại ở bên bình luận bên dưới, BKHOST sẽ trả lời bạn trong thời gian sớm nhất.
P/s: Bạn cũng có thể truy cập vào Blog của BKHOST để đọc thêm các bài viết chia sẻ kiến thức về lập trình, quản trị mạng, website, domain, hosting, vps, server, email,… Chúc bạn thành công.