Node.js Series: Bắt đầu!!!

Nội dung bài viết

Loạt bài nhập môn Nodejs sẽ là tập hợp các bài hướng dẫn tham khảo, bắt đầu từ phần này, chúng ta chính thức gia nhập bộ môn Nodejs. Tôi không dám khẳng định rằng khi học xong những bài viết về Nodejs của chúng tôi bạn sẽ được tăng lương nhưng chúng tôi cam đoan với các bạn rẳng. Bạn sẽ tự tin hơn trước rất nhiều... Vì sao?


Lời nói đầu


Hiện tại theo như thông kê mới nhất 2019 và 2020 tỷ lệ thi vào các trường có Công Nghệ Thông Tin đã tăng rất nhiều so với những năm về trước. Chính vì vậy, chúng tôi mong muốn viết một Series về Nodejs cho những bạn đã và đang có những ước mơ hay hành trình về CNTT sẽ có một nơi để các bạn có thể khám phá về cấu trúc, khái niệm và vì sao bạn lại học nodejs.


Nodejs là gì?


Chúng ta sẽ cố gắng nói về những tính năng của Nodejs, những tình huống áp dụng với Nodejs, và những khó khăn của các lập trình viên trước khi biết đến Nodejs. Cụ thể chúng ta sẽ có những câu hỏi sau đây:

  • - Nodejs có thể giải quyết vấn đề gì?
  • - Khi nào sử dụng Nodejs để setup một dự án?
  • - Cách install Nodejs - Ví dụ về một ứng dụng Nodejs


Nodejs dùng để làm gì?


Đây có lẽ là một câu hỏi mà bất cứ bạn nào bắt đầu học Node.js cũng phải hỏi. Và không ngoại lệ tips JavaScript cũng nhận được nhiều câu hỏi "node js dùng để làm gì?". Thì hôm nay, trong bài post này, câu trả lời sẽ làm sáng tỏ cho các bạn đang muốn biết. Trong home page của Node cũng có nói mục tiêu là "Node.js is designed to build scalable network applications".


Node dùng để thiết kế , xây dựng một ứng dụng mạng mở rộng. Nói như vậy bố ai mà hiểu khi mà mới học Nodejs đây? Vậy ông nói vậy thì các ngôn ngữ như JAVA, hay PHP không tự ái à? Chả nhẽ họ không build và mở rộng như NodeJS sao? Có gì sai ở đây? Chúng ta làm một bài toán phân tích sau:


Node.js có thể giải quyết lượng kết nối đồng thời cao của người dùng

Bây giờ Node.js đã giải quyết được vấn đề của các kết nối người dùng có tính đồng thời cao, thì hãy nghĩ ngược lại: Các vấn đề với đồng thời cao truyền thống trước khi chúng ta biết đến Node.js là gì? Node.js giải quyết vấn đề này như thế nào?


Vấn đề với đồng thời cao trước khi Nodejs ra đời?


Trong các ngôn ngữ máy chủ như Java, PHP hoặc ASP.NET, mỗi kết nối máy khách sẽ tạo một luồng mới cho nó và mỗi luồng tiêu thụ khoảng 2MB bộ nhớ. Nếu máy chủ của chúng ta có 8GB bộ nhớ thì về mặt lý thuyết Cung cấp dịch vụ cho tới 4000 người dùng cùng lúc. 

Nếu bạn muốn cung cấp dịch vụ hỗ trợ đồng thời cho nhiều người dùng hơn, bạn phải tăng số lượng máy chủ, kéo theo đó là chi phí phần cứng tăng lên, và vấn đề chia sẻ dữ liệu giữa các máy chủ khác nhau cũng sẽ theo đó. Do đó, giải pháp tạo một luồng mới cho mỗi kết nối người dùng bị giới hạn bởi bộ nhớ máy chủ, điều này trở thành điểm nghẽn cho các kết nối đồng thời cao.


Nodejs đã cải tiến gì để giải quyết vấn đề này?

Để giải quyết vấn đề kết nối đồng thời cao, Nodejs đã từ bỏ ý tưởng "tạo một luồng mới cho mỗi kết nối người dùng" và thay đổi nó thành mỗi người dùng kết nối với Nodejs và kích hoạt một sự kiện. Điều này giải quyết vấn đề nhiều kết nối người dùng hết bộ nhớ máy chủ. Đối với sự kiện nào được kích hoạt và nó được kích hoạt như thế nào, chúng ta sẽ thảo luận sau.


Nhận ra server của Nodejs có hiệu suất cao


Nói một cách chính xác, Nodejs là một công cụ phát triển để phát triển các máy chủ web khác nhau. Trong máy chủ Node.js, ngôn ngữ kịch bản JavaScript V8 đang chạy. Ngôn ngữ có thể được phân tích cú pháp và thực thi bởi công cụ JavaScript V8. Vâng, đó là công cụ V8 trên Chrome mà bạn vượt qua mỗi khi debug. Nodejs sử dụng nó trên máy chủ và cũng thêm nhiều API mới vào nó để nâng cao công cụ Có khả năng. 


Chỉ những điều này không đủ để giải thích hiệu suất của Nodejs cao như thế nào. JavaScript V8 sử dụng công nghệ biên dịch ngôn ngữ mới, có thể tạo các tập lệnh được viết bằng JavaScript và được viết bằng các ngôn ngữ khác (chẳng hạn như ngôn ngữ C). (Tại sao điều này lại quan trọng? Như tôi sẽ nói ở phần sau, Nodejs cung cấp rất nhiều modules, hầu hết được viết bằng JavaScript, trong khi một số modules khác được viết bằng các ngôn ngữ cơ bản khác, chẳng hạn như ngôn ngữ C, V8, v.v. Loại công nghệ biên dịch này phá vỡ vấn đề về sự khác biệt hiệu quả thực thi do các ngôn ngữ khác nhau gây ra, do đó chúng tôi có thể bỏ qua các vấn đề do sự khác biệt ngôn ngữ modules gây ra.)


Cơ chế Nonblocking I/O và vòng lặp sự kiện


Như đã đề cập trước đó, Nodejs sử dụng JavaScript engine V8 ở phía máy chủ để đạt được một máy chủ hiệu suất cao. JavaScript là một ngôn ngữ đơn luồng và V8 JavaScript cũng vậy. Khác với JavaScript phía trình duyệt, V8 JavaScript cung cấp cơ chế Nonblocking I/O. Điều đó nghĩa là gì? Nó thực sự là một yêu cầu web JavaScript không đồng bộ. 


Trong khi chờ đợi kết quả của yêu cầu, nó sẽ tiếp tục thực thi đoạn mã đằng sau yêu cầu mà không cần đợi dữ liệu trả về, và kết quả mà yêu cầu trả về được xử lý trong hàm gọi lại. Cơ chế này được gọi là cơ chế Nonblocking I/O. Vì các tác vụ tốn thời gian sẽ không chặn mã tiếp theo, nên nó cải thiện đáng kể hiệu quả thực thi. Tất nhiên, yêu cầu mạng được lấy làm ví dụ ở đây, nhưng trên thực tế, sự kiện có thể là: thêm tệp, xóa, kiểm tra, sửa đổi.

Tips: Tìm hiểu thêm Nonblocking IO là gì? 

Nodejs cũng có cơ chế vòng lặp sự kiện


Cơ chế vòng lặp sự kiện trong Nodejs rất giống với cơ chế vòng lặp sự kiện trong JavaScript nhưng có sự khác biệt. Có thêm hai phương thức không đồng bộ nữa là setInstant và process.nextTick. 


Chúng ta sẽ nói chi tiết về những điều này sau, miễn là bạn biết: Node.js Nó có các đặc điểm của cơ chế vòng lặp sự kiện và Nodejs có thể đạt được tính đồng thời cao vì cơ chế vòng lặp sự kiện độc đáo của nó. Cơ chế này giống và khác với cơ chế vòng lặp sự kiện trong JavaScript.


Dự án nào phù hợp với Node.js?


Theo các đặc điểm của Nodejs được đề cập trong chương của chúng tôi, các dự án áp dụng của nó thực sự là lợi thế của nó, được tóm tắt như sau: Khi chương trình cần xử lý một số lượng lớn đầu vào và đầu ra đồng thời, và sau khi gửi yêu cầu đến máy chủ, khoảng thời gian chờ kết quả trả về không cần xử lý logic rất phức tạp. 

Ví dụ dự án: 

  • 1) Máy chủ trò chuyện; có thể có một số lượng lớn các kết nối đồng thời cùng một lúc, nhưng bản thân máy chủ không có quá trình xử lý quá phức tạp. 
  • 2) Máy chủ thương mại điện tử: Các tình huống như mua khi khuyến mãi và bán đúng giờ săn deal hot. 
  • 3) Máy chủ xem điểm thi: Mỗi lần thi xong, các phụ huynh và học sinh xe điềm thi là khả năng sập rất cao chính vì vậy sử dụng nodejs là chuẩn.


Tóm tắt phần này chỉ như vậy, hãy theo dõi phần tiếp theo của Nodejs Series...

Có thể bạn đã bị missing