NodeJS: Xu hướng mới cho lập trình viên Web
1. NodeJS là gì?
NodeJS là một nền tảng xây dựng trên môi trường V8 JavaScript runtime – một trình thông dịch JavaScript cực nhanh chạy trên Chrome. Thường thì bạn có thể tải bộ V8 và nhúng nó vào bất cứ thứ gì; đó là điều NodeJS làm đối với các web server. Sau cùng, JavaScript cũng chỉ là một ngôn ngữ – không thể nói rằng nó không thể sử dụng trên môi trường server tốt như là trong trình duyệt của người dùng được.
Trong một server LAMP điển hình (Linux-Apache-MySQL-PHP), bạn sử dụng web server là Apache hoặc NGINX nằm dưới và PHP chạy trên nó. Mỗi một thread mới sẽ được sinh ra từ một kết nối tới server, dẫn đến ứng dụng trở nên chậm chạp và quá tải. Khi đó, cách giải quyết duy nhất là bổ sung nhiều máy chủ để hỗ trợ người dùng. Nguyên nhân là bởi khả năng mở rộng không được tốt và điều này được NodeJS giải quyết triệt để. Không có máy chủ Apache nào nhận kết nối tới và trả lại mã trạng thái HTTP – điều này có nghĩa bạn phải tự mình quản lý kiến trúc lõi của máy chủ đó. May mắn là có một số module giúp bạn thực hiện nó dễ dàng hơn, nhưng khi mới bắt đầu, bạn sẽ gặp phải một chút khó khăn với nó. Một ứng dụng web có tốc độ thực thi cao là kết quả mà bạn thu được.
JavaScript là một ngôn ngữ hướng sự kiện, vì vậy trên server xảy ra điều gì đều tạo ra một sự kiện non-blocking. Mỗi sự kiện được sinh ra từ một kết nối mới; mỗi sự kiện data-received được sinh ra từ dữ liệu nhận được từ một upload form; Mỗi sự kiện cũng sinh ra từ việc truy vấn dữ liệu từ database. Điều đó có nghĩa là một trang web NodeJS sẽ không bao giờ bị khóa và hàng chục nghìn user truy cập cùng lúc cũng được hỗ trợ. Khi đó, NodeJS đóng vai trò của server – Apache – và thông dịch mã ứng dụng chạy trên nó. Tương tự như Apache, có thể cài đặt rất nhiều module để hỗ trợ, bổ sung thêm các chức năng: lưu trữ dữ liệu, hỗ trợ file Zip, chức năng đăng nhập bằng Facebook, hoặc các cổng thanh toán. Tuy không có nhiều chức năng như PHP, nhưng NodeJS vẫn đang ở trong giai đoạn mới bắt đầu và đăng sau nó là một cộng đồng rất mạnh mẽ.
Một đặc trưng chính của NodeJS đó là các chức năng bất đồng bộ (asynchronous functions), và về cơ bản thì mọi thứ chạy trên nền tảng này. Ở phần lớn các ngôn ngữ kịch bản máy chủ, phải đợi mỗi chức năng thực thi xong mới có thể chạy tiếp, nhưng với NodeJS, bạn cần chọn các chức năng sẽ chạy để hoàn thành một tác vụ nào đó, trong khi vẫn chạy song song phần còn lại của ứng dụng. Đây là một chủ đề phức tạp sẽ không đi quá sâu trong bài viết này, nhưng đó là một đặc trưng tiêu biểu của NodeJS, vì vậy bạn cần phải nắm vững. Để bạn có thể thể hiểu thoáng qua khái niệm này, tôi sẽ đưa ra một ví dụ Hello World.
Cùng phân tích đoạn code trên nhé. Trước tiên, chúng ta including module http vào trong project. Sau đó chúng ta tạo ra một server và truyền vào một function anonymous như một tham số – khi mỗi kết nối mới sinh ra, chức năng này sẽ được gọi . Có hai đối số –request – các tham số yêu cầu từ người dùng; và response – để gửi kết quả trả về. Tiếp theo, chúng ta sử dụng đối tượng response đó để viết một header tới người dùng với mã HTTP response là 200(“ok”) và content type, viết ra một lời nhắn “Hello World!”, và kết thúc response đó.
Cuối cùng, chúng ta nói server lắng nghe các request đến trên cổng 8080, và xuất ra một message trên cửa sổ console (command line) để báo cho chúng ta biết rằng nó đang hoạt động. Nếu bạn muốn thực sự làm thử, thì hãy lưu đoạn code trên thành file test.js, tải bộ cài đặt NodeJS về, và từ cửa sổ command line chạy dòng lệnh sau –
Việc còn lại, hãy mở trình duyệt lên và truy cập vào địa chỉ localhost:8080 để xem ứng dụng đầu tay của bạn! Chắc hẳn lúc này bạn đã hiểu chút khái niệm về cách làm thế nào mà toàn bộ quá trình bất đồng bộ (asynchronous) hoạt động, đi cùng với các mô hình hướng sự kiện.
2. Tại sao cần sử dụng Node.js?
Ưu điểm của NodeJS
Tốc độ thực thi và khả năng mở rộng là ưu điểm đầu tiên của NodeJS. Thậy vậy, NodeJS có tốc độ rất nhanh, đáp ứng yêu cầu quan trọng khi bạn muốn tạo ra một sản phẩm lớn và mở rộng nhanh chóng, đáp ứng được một lượng lớn người dùng trên trang web của bạn.
Trong khi PHP không thể đảm đương thì NodeJS có thể xử lý hàng ngàn kết nối đồng thời. Ngoài các lợi ích về tốc độ thực thi và khả năng mở rộng, nếu đã biết một chút về JavaScript, thay vì phiền toái học thêm về một ngôn ngữ lập trình như PHP đã xưa cũ, trong khi NodeJS đang ngày càng trở nên lớn mạnh hơn. Bạn tưởng tượng khi NodeJS phổ biến khắp mọi nơi và bạn hối tiếc vì không học nó sớm hơn và mãi mãi chỉ là người đến sau? Đừng để điều đó xảy ra!
Nhược điểm của NodeJS
Cũng như hầu hết các công nghệ mới, việc triển khai NodeJS trên host chắc chắn sẽ gặp nhiều khó khăn. Nếu bạn có một web hosting xài chung, bạn không thể tải lên một ứng dụng NodeJS một cách giản đơn và mong chờ nó hoạt động tốt. Khi đó, VPS và dedicated server là một sự lựa chọn tốt hơn để bạn có thể cài đặt NodeJS trên chúng. Và còn dễ hơn nữa là sử dụng một dịch vụ có khả năng mở rộng như là Heroku. Trên đó, bạn có thể hoàn toàn yên tâm phát triển trang web của mình- bạn chỉ cần trả tiền khi cần thêm nhiều tài nguyên hơn.
Mặt khác, NodeJS cũng dễ dàng được cài đặt để chạy cục bộ trên máy tính cài các hệ điều hành như Windows, Mac hoặc Linux và bắt đầu phát triển ứng dụng ngay lập tức. Một điều quan trọng nữa là NodeJS không chỉ đơn giản là một sự thay thế cho Apache – các ứng dụng web đang tồn tại sẽ không có khả năng tương thích, và bạn sẽ làm việc hiệu quả với những ứng dụng phát triển từ đầu (mặc dù có rất nhiều framework ngoài kia để giúp đỡ bạn với nhiều đặc trưng phổ biến).
Một nhược điểm khác của NodeJS đó là nó vẫn đang trong giai đoạn mới phát triển, điều này có nghĩa là một số đặc trưng sẽ thay đổi trong quá trình phát triển tiếp theo. Trong thực tế, nếu bạn đọc các tài liệu đi kèm, thì nó bao gồm một chỉ số ổn định (stability index) cho thấy mức độ rủi ro khi bạn sử dụng các đặc trưng hiện có.
Bạn biết không? Thời điểm này quá tuyệt vời để đón đầu xu thế NodeJS và trở thành một nhà phát triển web đấy. Với các dịch vụ web và trao đổi dữ liệu mở, thì việc tạo ra một ứng dụng web hoàn hảo chưa bao giờ dễ đến thế. Có phải bạn đang nghĩ rằng mình nên học NodeJS và củng cố lại toàn bộ kỹ năng lập trình web của mình ? Tốt lắm. Hãy tiến lên phía trước và tạo ra một sản phẩm Twitter tiếp theo nhé!
Khóa học chuyên nghiệp Lập trình Web Full-stack:
Khóa học dành cho:
|