Node.js là gì?

Node.js là một mã nguồn mở, cross-platform runtime environment cho phía máy chủ và các ứng dụng mạng. Ứng dụng Node.js được viết bằng JavaScript, và có thể hoạt động trên các hệ điều hành phổ biến như OS X, Microsoft Windows, Linux và FreeBSD.

Node.js là gì? - là gì Node.js nodejs - Phát triển website

Node.js Logo

Node.js cung cấp kiến trúc hướng sự kiện và non-blocking I/O API, tối ưu hóa thông lượng của ứng dụng và có khả năng mở rộng cao. Những công nghệ này thường được sử dụng cho các ứng dụng thời gian thực (real-time applications) như ứng dụng chat, ,….

Node.js sử dụng Google V8 JavaScript engine để thực thi mã, và một tỷ lệ lớn các mô-đun cơ bản được viết bằng JavaScript. Node.js chứa một thư viện built-in cho phép các ứng dụng hoạt động như một máy chủ Web mà không cần phần mềm như Nginx, Apache HTTP Server hoặc IIS,…

Node.js được sử dụng làm nền tảng server-side bởi các website và dịch vụ nổi tiếng như Groupon,  SAP, LinkedIn, Microsoft, Yahoo!, Walmart, Rakuten và PayPal.

Website chính thức của Node.js là : http://nodejs.org/

Ưu điểm của Node.js

Đặc điểm nổi bật của Node.js là nó nhận và xử lý nhiều kết nối chỉ với một single-thread. Điều này giúp hệ thống tốn ít RAM nhất và chạy nhanh nhất khi không phải tạo thread mới cho mỗi truy vấn giống PHP.

Ngoài ra, tận dụng ưu điểm non-blocking I/O của Javascript mà Node.js tận dụng tối đa tài nguyên của server mà không tạo ra độ trễ như PHP

Với sự ra đời của các & HTML 5 nên Node.js rất hiệu quả khi xây dựng những ứng dụng thời gian thực (real-time applications) như ứng dụng chat, các dịch vụ mạng xã hội như Facebook, Twitter,…

Lịch sử Node.js

Node.js được tạo ra và xuất bản lần đầu cho Linux sử dụng vào năm 2009. Node.js được phát triển và duy trì bởi Ryan Dahl và được tài trợ bởi Joyent, công ty nơi Dahl làm việc.

Node.js là gì? - là gì Node.js nodejs - Phát triển website

Ryan Dahl, creator of Node.js

Dahl được truyền cảm hứng để tạo ra Node.js sau khi nhìn thấy file upload progress bar trên Flickr. Các trình duyệt (browser) không bao nhiêu dung lượng tập tin đã được tải lên và phải truy vấn các máy chủ Web (Web server) để lấy thông tin, do đó Dahl mong muốn một cách dễ dàng hơn cách truyền thống này.

Node.js thu hút được sự quan tâm lớn sau khi ra mắt tại hội nghị JSConf EU. Sau đó vào năm 2011, npm (package manager) để quản lý các thư viện của Node.js được giới thiệu.

Vào tháng 1 năm 2014, Timothy J Fontaine (@tjfontaine) trở thành người đứng đàu mới của dự án Node.js

Node.js là gì? - là gì Node.js nodejs - Phát triển website

Timothy J Fontaine new project lead of Node.js

Kỹ thuật của Node.js

Tác giả của Node.js ban đầu có mục đích tạo ra các trang web với khả năng push như trong Gmail. Sau khi cố gắng thử và tim giải pháp bằng một số ngôn ngữ lập trình khác, ông đã chọn JavaScript vì khả năng bất đồng bộ của nó. Trong Node.js, tất cả các I / O được thực hiện theo cách không đồng bộ (asynchronous) và non-blocking, kết hợp với vòng lặp dựa trên sự kiện đơn luồng, đưa ra một cách mới để thực hiện các thời gian thực. Node.js do đó có thể giữ nhiều kết nối có hiệu lực mà không cần phải từ chối kết nối mới đến.

Ứng dụng Node.js thường chạy đơn luồng, mặc dù thực hiện đa luồng được hỗ trợ trên Node.js 0.10+ từ JXcore.

Các ứng dựng được thực thi từ dòng lệnh theo cú pháp sau : “node <application_name>.js”

Threading

Kỹ thuật web truyền thống yêu cầu mỗi kết nối (theo yêu cầu) để tạo ra một thread mới, chiếm RAM hệ thống và cuối cùng là hết RAM nếu có nhiều truy vấn. Node.js thì khác, nó hoạt động trên single-thread, sử dụng non-blocking I/O, cho phép nó hỗ trợ hàng chục ngàn kết nối đồng thời (concurrent connections), mà không lo lắng về giới hạn bộ nhớ RAM. Thiết kế của chia sẻ một single-thread giữa tất cả các truy vấn có nghĩa là nó có thể được sử dụng để xây dựng các ứng dụng đồng thời cao (highly concurrent ).

Google V8 JavaScript engine

V8 là JavaScript execution engine được xây dựng cho trình duyệt Google Chrome. Được viết bằng C++, V8 biên dịch mã nguồn JavaScript just-in-time thành mã máy thay vì thông dịch nó trong thời gian thực.

Node.js chứa libuv để xử lý sự kiện không đồng bộ. V8 cung cấp run-time cho JavaScript. Libuv là một abstraction layer cho các chức năng của hệ thống mạng và tập tin hệ thống trên cả Windows và các hệ thống POSIX-based như Linux, Mac OS X và Unix.

Mã Hello World của Node.js

Dưới đây là đoạn mã xuất ra màn hình “Hello World” của Node.js :

var http = require('http');

http.createServer(function (req, res) {
	res.writeHead(200, {'Content-Type': 'text/plain'});
	res.end('Hello World\n');
}).listen(1337, "127.0.0.1");

console.log('Server running at http://127.0.0.1:1337/');