Node.js là gì và tại sao tôi nên học lập trình Node.js?

Ngoc Huynh

JavaScript là một ngôn ngữ lập trình phía khách hàng (client-side) chạy trên trình duyệt, phải không? Hiện tại điều này không còn đúng nữa. Node.js là một cách để chạy JavaScript trên server; nhưng nó còn hơn thế nữa. Nếu bạn là một người có hứng thú về phát triển web, thì bạn nên tìm hiểu đôi chút về Node.js và lý do tại sao nó đang tạo ra một làn sóng trong cộng đồng.

Node.js là gì?

Node là một nền tảng chạy 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 trình duyệt Chrome. Thông thường thì bạn cũng có thể tải về V8 và nhúng nó vào bất cứ thứ gì; Node.js làm điều đó đối với các web server. Do đó, JavaScript cũng chỉ là một ngôn ngữ – vậy thì không có lý do gì để nói 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 môi trường server điển hình LAMP; bạn có một web server là Apache hoặc NGINX nằm dưới, cùng với PHP chạy trên nó. Mỗi một kết nối tới server sẽ sinh ra một thread mới, và điều này khiến ứng dụng nhanh chóng trở nên chậm chạp hoặc quá tải – cách duy nhất để hỗ trợ nhiều người dùng hơn là bằng cách bổ sung thêm nhiều máy chủ. Đơn giản là nó không có khả năng mở rộng tốt. Nhưng với Node thì điều này không phải là vấn đề. Không có một máy chủ Apache lắng nghe các kết nối tới và trả về mã trạng thái HTTP – bạn sẽ cần phải xử lý kiến trúc lõi của máy chủ đó. May mắn thay, có một số mô đun giúp thực hiện điều này được dễ dàng hơn, nhưng công việc này vẫn gây cho bạn một chút khó khăn khi mới bắt đầu. Tuy nhiên, kết quả thu được là một ứng dụng web có hiệu suất cao.

JavaScript là một ngôn ngữ dựa trên sự kiện, vì vậy bất cứ thứ gì xảy ra trên server đều tạo ra một sự kiện non-blocking (không chặn). Mỗi kết nối mới sinh ra một sự kiện; dữ liệu nhận được từ một upload form sinh ra một sự kiện data-received; việc truy vấn dữ liệu từ cơ sở dữ liệu cũng sinh ra một sự kiện. Trong thực tế, điều này có nghĩa là một trang web Node sẽ chẳng bao giờ bị khóa và có thể hỗ trợ cho hàng chục nghìn người dùng truy cập cùng lúc. Node đóng vai trò của server – Apache – và thông dịch mã ứng dụng chạy trên nó. Giống như Apache, có rất nhiều mô đun (thư viện) có thể được cài đặt để bổ sung thêm các đặc trưng và chức năng – như lưu trữ dữ liệu, hỗ trợ file Zip, đăng nhập bằng Facebook, hoặc các cổng thanh toán. Dĩ nhiên, nó không có nhiều thư viện như PHP, nhưng Node vẫn đang ở trong giai đoạn sơ khai và có một cộng đồng rất mạnh mẽ ở đằng sau nó. Một khái niệm cốt lõi của Node.js đó là các hàm bất đồng bộ (asynchronous functions) – vì vậy về cơ bản thì mọi thứ chạy trên nền tảng này. Với hầu hết các ngôn ngữ kịch bản máy chủ, chương trình phải đợi mỗi hàm thực thi xong trước khi có thể tiếp tục chạy tiếp. Với Node, bạn xác định các hàm sẽ chạy để hoàn thành một tác vụ nào đó, trong khi phần còn lại của ứng dụng vẫn chạy đồng thời.

Tại sao lại sử dụng Node.js?

Đầu tiên, về tốc độ thực thi và khả năng mở rộng. Node.js có tốc độ rất nhanh. Đó là một yêu cầu khá quan trọng khi bạn là một startup đang cố gắng tạo ra một sản phẩm lớn và muốn đảm bảo có thể mở rộng nhanh chóng, đáp ứng được một lượng lớn người dùng khi trang web của bạn ngày càng phát triển.

Node cũng hoàn hảo khi đưa ra một RESTful API – một web service sẽ nhận vào một ít tham số và trả về một ít dữ liệu – thao tác dữ liệu một cách đơn giản mà không cần tính toán với số lượng lớn. Node có thể xử lý hàng ngàn kết nối đồng thời trong khi PHP thì không. Bên cạnh các lợi ích về tốc độ thực thi và khả năng mở rộng, có thể bạn cũng đã biết một chút về JavaScript, vì vậy tại sao lại phải phiền toái để học thêm về một ngôn ngữ lập trình hoàn toàn mới như PHP? Và sau đó bạn sẽ có một sự thích thú khi học về một cái gì đó mới mẻ và gần như chưa được khám phá. Bạn còn nhớ cái cảm giác khi mà một cái gì đó mới xuất hiện và sau đó trở thành phổ biến khắp mọi nơi mà bạn hối tiếc đã không học về nó sớm hơn, và mãi mãi chỉ là người đến sau? Đừng phạm phải sai lầm như vậy lần này nữa. Node đang ngày càng trở nên lớn mạnh hơn.

Nhược điểm

Giống như hầu hết các công nghệ mới, việc triển khai Node trên host không phải là điều dễ dàng. Nếu bạn có một web hosting dùng chung, thì bạn không thể đơn giản tải lên một ứng dụng Node và mong chờ nó hoạt động tốt. VPS và máy chủ riêng biệt là một sự lựa chọn tốt hơn – bạn có thể cài đặt Node trên chúng. Thậm chí dễ hơn là sử dụng một dịch vụ có khả năng mở rộng như là Heroku, và bạn có thể hoàn toàn an tâm để phát triển trang web của mình trên đó – bạn chỉ cần trả phí khi cần thêm nhiều tài nguyên hơn. Mặt khác, chúng ta rất dễ cài đặt Node chạy cục bộ trên máy tính sử dụng 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 tức thì – chỉ việc tải phiên bản Node tương ứng tại đây. Một điều quan trọng nên chú ý là Node 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 lớn khác của Node đó là nó vẫn đang trong giai đoạn phát triển ban đầu, đ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, chỉ số này 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 đấy – sẽ chẳng bao giờ có thời điểm nào tuyệt vời hơn để trở thành một nhà phát triển web. 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 tuyệt vời chưa bao giờ dễ như lúc này. Có phải bạn đang nghĩ rằng mình nên học Node.js? 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! Có thể bạn cũng muốn có một nền tảng kiến thức tốt về thư viện JavaScript jQuery cho lập trình front end.

Chia sẻ bài viết ngay

Nguồn bài viết : http://www.makeuseof.com/