OK, vậy Node.JS là gì?

1200px-Node.js_logo.svg.png

— Này, dạo này tao thấy đăng tuyển nhiều vị trí Node.js lương cao lắm. Không biết Node.js là gì mà có vẻ hot ghê…

— Ah, nó là một ngôn ngữ được phát triển từ JS thì phải? Chuyên để lập trình server ấy.

— Tao lại nghe bảo nó là một framework JS…

— OK để tao Google thử xem. Ah đây rồi, này nhé:

Node.js là một môi trường thực thi nguồn mở, đa nền tảng để chạy code JavaScript ở phía server.

Có nghĩa là:

  • Node.JS là môi trường thực thi (runtime environment) để chạy code JS, chứ không phải là một ngôn ngữ lập trình hay framework.
  • Đa nền tảng, tức là có thể chạy ở nhiều OS khác nhau như Linux, Windows, MacOS…
  • Chuyên biệt cho việc lập trình server

Như mày đã biết, trước đây JavaScript thường chỉ được dùng ở phía client, khi mày nhúng code JavaScript vào HTML phần code JS sẽ được chạy nhờ có JavaScript engine tích hợp trong trình duyệt web như Chrome. Mày có biết là giờ đây nhờ có Node.js mà code JS của mày đã có thể chạy ở trên web server nữa không? Tức là thay vì phải code PHP hay Java trên web server mày có thể code luôn bằng JS.

— Whoa, hết sẩy! Unbelievable! Nói như vậy, nghĩa là JavaScript đã có mặt ở khắp mọi nơi, từ frontend cho tới backend rồi nhỉ. Cũng có nghĩa là, chỉ cần học JS là tao với mày có thể trở thành Fullstack developer luôn, khỏi học nhiều ngôn ngữ cho mệt đầu. Yeah!

— Yep. Ngoài ra, việc xây dựng một hệ thống web cũng trở nên dễ dàng hơn, bởi vì team frontend và team backend giờ đây đã có thể “nói chuyện” với nhau qua cùng một ngôn ngữ duy nhất. Thậm chí 2 team còn có thể review “chéo” cho nhau nữa chứ, hehe.

— Quá đã! Ah mà tao hỏi khí không phải. Cái tên Node.JS có phải ám chỉ đến một file của Node không? Kiểu như file thư viện ấy???

— Không đâu, mặc dù có đuôi .js, nhưng thực tế Node.js không ám chỉ đến một file JS nào cụ thể, mà chẳng qua người ta thích đặt tên như vậy. Mày tò mò có thể lên Google search thử. Tao chỉ quan tâm đến khía cạnh kỹ thuật của Node.js. Nó được thiết kế với kiến trúc hướng sự kiện (event-based) và không đồng bộ (asynchronous). Theo tao tìm hiểu được thì sở dĩ họ lựa chọn kiến trúc phần mềm như này là để tối ưu băng thông và khả năng mở rộng của ứng dụng web, cũng như để phục vụ cho các ứng dụng web thời gian thực.

— Thú vị đấy, thế mày có biết công ty nào đã phát minh ra Node.JS không?

— Ah, thực ra Node.JS không phải do một công ty nào viết ra. Một anh chàng tên là Ryan Dahl là người đã tạo ra Node.js vào năm 2009.

Anh Dahl này từng phát triển phần mềm LiveWire Pro Web của hãng Netscape, đó chính là một môi trường thực thi JavaScript đầu tiên từng được giới thiệu.

Dahl sau đó đã nảy sinh ra ý tưởng tạo ra Node.js khi nhận thấy sự hạn chế của LiveWire Pro Web, đồng thời nhận thấy nhiều điểm không ổn của hầu hết web server thời bấy giờ (tức năm 2009). Chẳng hạn Apache HTTP Server phải xử lý lần lượt từng request khi có nhiều request đến cùng lúc, đồng thời tạo ra quá nhiều ngăn xếp thực thi gây lãng phí tài nguyên server.

Ryan Dahl – cha đẻ của Node.js

Dahl đã trình bày project của anh ta vào tháng mười một năm 2009, khi đó Node.js là một sự hoà trộn giữa V8 JavaScript engine của Google, một event loop (vòng lặp sự kiện), và một I/O API ở mức thấp.

Sau này, Node.js là một dự án phần mềm phân tán, tức là cùng được phát triển bởi nhiều lập trình viên khác nhau trên khắp thế giới, và được quản lý bởi Node.js Foundation. Dự án này cũng được hỗ trợ bởi chương trình hợp tác dự án của Linux Foundation.

— Thế có nghĩa là Node.JS có một cộng đồng phát triển rất lớn mạnh phải không? Thế còn cộng đồng người dùng thì sao?

— Node.js đang được sử dụng rất rộng rãi, kể cả các công ty lớn như IBM, Linkedin, Microsoft, Cisco System… cũng đang sử dụng Node.js trong hệ thống của họ…

— Nghe mày nói vậy tao cũng rất muốn học Node.JS để trở thành Fullstack trong nay mai. Không biết nó có dễ học dễ sử dụng không nhỉ?

— Tao đã thử dùng Node.JS và cảm thấy mọi việc rất dễ dàng nhanh chóng. Mày có thể vào trang nodejs.org để thử, trên đó có hướng dẫn rất cụ thể. Mày chắc chắn sẽ có cảm giác giống tao. Node.JS có phần mềm quản lý gói cài đặt gọi là npm, tương tự như pip của Python, nên việc cài đặt và quản lý dependencies rất tiện lợi. Các lập trình viên cũng đã tạo ra hàng ngàn thư viện mã nguồn mở cho Node.js, hầu hết được lưu trên trang web của npm. Họ cũng đã tạo ra các framework dành cho server để tăng tốc quá trình phát triển ứng dụng. Trong số các framework hỗ trợ Node.js có thể kể đến Connect, Express.js, Socket.IO, Meteor…

— Lát tao sẽ thử ngay, vậy mày đã dùng qua Node.JS rồi thì mày có thể so sánh Node.JS với PHP được không? Node.JS thật ra có ưu điểm gì?

— Như tao đã nói, ứng dụng phổ biến nhất của Node.js là để viết nên các web server. So với PHP, một ngôn ngữ đang rất phổ biến ở server-side, thì điểm khác biệt lớn nhất đó là các hàm trong PHP bị block (các dòng lệnh phải đợi cho tới khi các lệnh trước đó được hoàn thành), trong khi đó các hàm trong Node.js là non-blocking, có nghĩa là các dòng lệnh được thực thi song song với nhau.

Ngoài ra, Node.js sử dụng một tập các module để thực hiện các tác vụ khác nhau, các module này được thiết kế như là các API nhằm giảm thiểu độ phức tạp của ứng dụng. Sự mềm dẻo linh hoạt của Node.js còn ở chỗ nó có thể chạy trên gần như tất cả các nền tảng, cũng như có thể được viết bằng các ngôn ngữ lập trình khác nhau như CoffeeScript, Dart, TypeScript,… hay bất kỳ ngôn ngữ nào mà có thể dịch ra được thành mã JavaScript.

Node.js đã mang lập trình hướng sự kiện tới với web server, đồng nghĩa với việc tạo ra được các web server siêu nhanh.

— Tao cảm thấy đã đến lúc tao nói lời chia tay với PHP rồi mày ạ. Node.JS quá hấp dẫn, quá trẻ trung. Tao cảm giác như đang được yêu lại lần đầu ^^

Tôi đã đem lòng yêu em, Node.JS ạ ❤

Leave a comment