Học NodeJS Phần 1: Node.js – Giới Thiệu – NodeJS cơ bản cho người mới bắt đầu

Học NodeJS Phần 1: Node.js – Giới Thiệu                        – NodeJS cơ bản cho người mới bắt đầu

Bài 1: Node.js – Giới Thiệu
– NodeJS căn bản cho người mới bắt đầu

1. Node.js là gì ?

  • Nodejs là 1 nền tảng (Platform) phát triển độc lập được xây dựng bên trên Javascript Runtime của Chrome mà chúng ta sẽ có thể xây dựng được những ứng dụng mạng 1 cách dễ dàng và nhanh chóng mở rộng.
  • Nodejs được xây dựng và phát triển từ năm 2009, bảo trợ do công ty Joyent, trụ sở tại California, Hoa Kỳ. Dù sao thì ta cũng nên biết qua 1 chút chút lịch sử của thứ mà ta đang học 1 chút chứ nhỉ? =))
  • Phần Core phía dưới của Nodejs được viết phần lớn bằng C++ nên cho tốc độ xử lý và hiệu năng tương đối cao.
  • Nodejs tạo nên được những ứng dụng có tốc độ xử lý nhanh, realtime thời gian thực.
  • Nodejs áp dụng đối với các sản phẩm có lượng truy cập lớn, cần mở rộng nhanh, cần đổi mới công nghệ, hay tạo nên những dự án Startup nhanh nhất có thể.

Node.js is a platform constructed on Chrome’s JavaScript runtime for simply constructing quick and scalable community functions. Node.js makes use of an event-driven, non-blocking I/O mannequin that makes it light-weight and environment friendly, excellent for data-intensive real-time functions that run throughout distributed gadgets.

Node.js = Runtime Atmosphere + JavaScript Library
Trong 1 môi trường server điển hình LAMP (Linux-Apache-MySQL-PHP), bạn có 1 internet server là Apache hay NGINX nằm dưới, cùng PHP hoạt động trên nó. Mỗi 1 kết nối đến server sẽ sinh ra 1 thread mới, và điều đó khiến cho ứng dụng nhanh chóng trở nên chậm chạp hay quá tải – cách duy nhất để hỗ trợ khá nhiều người sử dụng hơn là bằng việc bổ sung thêm thêm nhiều server. Đơn giản là nó không có thể mở rộng tốt. Nhưng đối với Node.js thì điều đó không phải là vấn đề. Không có 1 server Apache lắng nghe các kết nối đến và trả về mã trạng thái HTTP – bạn phải tự quản lý kiến trúc lõi của server đó. May thay, có những module giúp thực hiện điều đó được dễ hơn, nhưng công việc này vẫn gây cho các bạn 1 chút khó khăn khi mới bắt đầu. Tuy vậy, kết quả nhận được là 1 ứng dụng internet có tốc độ thực thi cao.

2. Ai có thể sử dụng Node.js

 Nếu như bạn có sử dụng github, bạn sẽ có thể dễ dàng tìm kiếm được danh sách những dự án, ứng dụng và các firm sử dụng Node.js.Gồm eBay, Common Electrical, GoDaddy, Microsoft, PayPal, Uber, Wikipins, Yahoo!, và Yammer
Rõ ràng, không phải cứ scorching và mới là Nodejs làm gì cũng tốt, ví dụ như 1 ứng dụng cần tính ổn định khá cao, logic phức tạp thì các ngôn ngữ PHP hay Ruby… vẫn đang là sự chọn lựa tốt hơn. Còn dưới đây chính là các ứng dụng có thể và nên viết bằng Nodejs:
  • Websocket server: Các server internet socket như là On-line Chat, Recreation Server…
  • Quick File Add Shopper: là những chương trình add file tốc độ cao.
  • Advert Server: Các server quảng cáo.
  • Cloud Companies: Những dịch vụ đám mây.
  • RESTful API: đây chính là các ứng dụng mà được dùng cho những ứng dụng khác qua API.
  • Any Actual-time Information Utility: bất kỳ 1 ứng dụng nào có yêu cầu về tốc độ thời gian thực. Micro Companies: Ý tưởng của micro providers là phân nhỏ 1 ứng dụng lớn thành những dịch vụ nhỏ và kết nối chúng lại cùng với nhau. Nodejs có thể làm tốt điều đó.

3. Nội dung :

 Hãy em biểu đồ sau đây có một số điều quan trọng về Node.js mà ta sẽ bàn luận chi tiết trong những bài tiếp theo
Ta sẽ tìm hiểu thêm về JavaScrpit – ngôn ngữ được dùng trong Node.js
JavaScript là 1 ngôn ngữ dựa vào sự kiện, vì thế bất kỳ thứ gì xảy ra trên server đều tạo nên 1 sự kiện non-blocking. Mỗi kết nối mới sinh ra 1 sự kiện; dữ liệu được nhận từ 1 add type sinh ra 1 sự kiện data-received; việc truy vấn dữ liệu từ database cũng sinh ra 1 sự kiện. Trong thực tế, điều đó nghĩa là 1 website Node.js sẽ chẳng bao giờ bị khóa (lock up) và có thể hỗ trợ cho hàng chục ngàn person truy cập cùng một lúc. Node.js đóng một vai trò của server – Apache – và thông dịch mã ứng dụng hoạt động trên nó. Giống Apache, có nhiều module (thư viện) có thể được cài đặt để bổ sung thêm thêm các điểm đặc biệt và tính năng – như lưu trữ dữ liệu, hỗ trợ file Zip, đăng nhập bằng Fb, hay những cổng thanh toán. Dĩ nhiên, nó không có nhiều thư viện như PHP, nhưng Node.js vẫn đang ở trong giai đoạn ban đầu và có 1 cộng đồng rất mạnh mẽ ở đằng sau nó.
1 khái niệm cốt lõi của Node.js đó là các perform bất đồng bộ (asynchronous features) – vì thế về căn bản thì toàn bộ mọi thứ chạy ở trên nền tảng này. Với phần lớn các ngôn ngữ kịch bản server, chương trình phải đợi mỗi perform thực thi xong trước khi mà có thể tiếp tục chạy tiếp. Với Node.js, bạn xác định các perform sẽ chạy để hoàn thành 1 tác vụ nào đấy, trong khi phần còn lại của ứng dụng vẫn chạy bên cạnh đó. Nó là 1 chủ đề phức tạp mà tôi sẽ không đi vào quá sâu trong bài này, nhưng đó là 1 trong các điểm đặc biệt tiêu biểu của Node.js, vì thế việc nắm vững nó là điều rất quan trọng. Tuy vậy tôi sẽ đưa ra 1 ví dụ Hey World để mang đến cho các bạn 1 cái nhìn thoáng qua một số những khái niệm này.
var http = require("http");   
http.createServer(perform (request, response) {   
response.writeHead(200,    'Content material-Kind': 'textual content/plain'   );   
response.write('Hey World!');   
response.finish();  }).hear(8080);  
console.log("Server operating!");
Hãy thử phân tích đoạn mã trên. Đầu tiên, ta together with module http vào trong challenge. Rồi ta tạo nên 1 server và truyền vào 1 perform nameless như 1 tham số – perform này sẽ được gọi khi mỗi kết nối mới sinh ra. Nó có 2 đối số – request, gồm các tham số yêu cầu từ người sử dụng; và response, cái ta dùng để gởi kết quả trả về. Tiếp tới, ta sử dụng đối tượng response đó để write 1 header đến người sử dụng với mã HTTP response là 200(“okay”) và content material kind, viết ra 1 message “Hey World!”, và kết thúc response đó.
Cuối cùng, ta nói server lắng nghe các request tới trên cổng 8080, và xuất ra 1 message trên cửa sổ console (command line) để báo cho ta biết rằng nó đang chạy. Nếu như bạn cần thực sự làm thử, thì hãy lưu đoạn mã trên thành file take a look at.js, download bộ cài đặt Node.js về, và từ cửa sổ command line chạy dòng code sau –
node take a look at.js
Rồi mở trình duyệt lên và truy cập địa chỉ localhost:8080 để xem ứng dụng đầu tay của các bạn! Bây giờ bạn sẽ có 1 chút ý niệm về cách làm sao mà tất cả quá trình bất đồng bộ (asynchronous) hoạt động, đi cùng những mô hình hướng sự kiện. Nếu như bạn là 1 người mới tiếp xúc với JavaScript, thì khái niệm truyền các perform như là 1 đối số của perform khác có thể có 1 chút lạ lẫm.

4. Những kết luận sai lầm về Nodejs

  • Thứ nhất, Nodejs là 1 nền tảng (platform), không phải Net Framework, cũng không phải ngôn ngữ lập trình. Có 1 kỷ niệm đáng nhớ của chính mình khi đi phỏng vấn, được hỏi Nodejs là gì? Và mình đã trả lời 1 cách rất tự tin rằng “Nodejs là 1 Framework của javascript.” Và thế là thôi khỏi bàn luôn, could mà hồi đó mình mới tìm hiểu nên các anh phỏng vấn cũng thông cảm cho =))
  • Thứ 2, Nodejs không hỗ trợ đa luồng, nó là 1 server đơn luồng.
  • Và 1 điều nữa, Nodejs không dành cho người mới tinh mà không biết gì về lập trình, vì như đã nói bên trên, Nodejs không phải là ngôn ngữ lập trình, để học được Nodejs thì các bạn cần biết về Javascript, kỹ thuật lập trình, những giao thức…v..v

5. Ưu và nhược điểm của Nodejs:

a. Ưu điểm :
  1. Điểm nổi trội của Node.js là nó nhận và xử lý nhiều kết nối chỉ bằng 1 single-thread. Điều đó giúp hệ thống tốn ít RAM nhất và hoạt động nhanh nhất khi không phải tạo thread mới cho mỗi truy vấn giống PHP.
    Bên cạnh đó, 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 nên độ trễ như PHP
  2. JSON APIs
    Với cơ chế event-driven, non-blocking I/O(Enter/Output) và mô hình kết hợp cùng với Javascript là sự chọn lựa tuyệt vời cho những dịch vụ Webs làm bằng JSON.
  3. Ứng dụng trên 1 trang( Single web page Utility)
    Nếu như bạn định viết 1 ứng dụng thể hiện trên 1 trang (Gmail?) NodeJS rất phù hợp để làm. Bằng khả năng xử lý nhiều Request/s bên cạnh đó thời gian phản hồi nhanh. Những ứng dụng bạn định viết không thích nó tải lại trang, gồm nhiều request từ người sử dụng cần sự chạy nhanh để thể hiện sự chuyên nghiệp thì NodeJS sẽ là sự chọn lựa của các bạn.
  4. Shelling instruments unix
    NodeJS sẽ tận dụng tối đa Unix để hoạt động. Tức là NodeJS có thể xử lý hàng ngàn Course of và trả ra 1 luồng khiến cho cho hiệu xuất hoạt động đạt mức tối đa nhất và tuyệt nhất.
  5. Streamming Information (Luồng dữ liệu)
    Các internet bình thường gởi HTTP request và nhận phản hồi lại (Luồng dữ liệu). Giả xử sẽ cần xử lý 1 luồng giữ liệu cực lớn, NodeJS sẽ xây dựng các Proxy phân vùng những luồng dữ liệu để bảo đảm tối đa hoạt động cho những luồng dữ liệu khác.
  6. Ứng dụng Net thời gian thực
    Với sự ra mắt của những ứng dụng di động & HTML 5 nên Node.js hiệu quả khi xây dựng các ứng dụng thời gian thực (real-time functions) như app chat, những dịch vụ MXH như Fb, Twitter,…
b. Nhược điểm :
  • Xây dựng những ứng dụng hao tốn tài nguyên:
    Bạn đừng mơ mộng tới Node.js khi các bạn đang muốn viết 1 chương trình convert video. Node.js hay bị rơi vào trường hợp thắt cổ chai khi làm việc với các file dung lượng nặng.
  • 1 ứng dụng chỉ toàn CRUD:
    Node.js không nhanh hơn PHP khi các bạn làm những tác vụ mang nặng tính I/O như thế. Bên cạnh đó, với sự ổn định lâu dài của các webserver script khác, những tác vụ CRUD của nó được tối ưu. Còn Node.js? Nó sẽ lòi ra những API cực cực ngớ ngẩn.
  • Khi các bạn cần sự ổn định trong app của các bạn:
    Chỉ bằng 4 năm phát triển của chính mình (2009-2013), model của Node.js đã là 0.10.15 (hiện giờ đến thời điểm hiện nay là v0.10.35). Mọi API đều có khả năng thay đổi – 1 cách không tương thích ngược – hãy thật cẩn thận với các API mà các bạn đang sử dụng, và luôn đặt câu hỏi: “Khi nó thay đổi, nó sẽ ảnh hưởng gì tới dự án của tôi?”
  • Và quan trọng nhất:
    Bạn chưa hiểu hết về Node.js
    Node.js cực nguy hiểm trong trường hợp này, bạn sẽ rơi vào 1 thế giới đầy rẫy cạm bẫy, khó khăn. Với đa số các API hoạt động theo phương thức non-blocking/async việc không hiểu rõ vấn đề sẽ làm đối với việc xuất hiện những error mà hay bạn không biết nó xuất phát từ đâu? Và mệt mỏi hơn thế nữa: Khi cộng đồng Node.js chưa đủ lớn mạnh, và sẽ ít có sự assist từ cộng đồng. Khi mà đa số cộng đồng cũng không tương đối hơn bạn là bao.

6. Nên sử dụng Nodejs trong các trường hợp :

  • Node.js thực sự tỏa sáng ở trong việc xây dựng RESTful API (json). Hầu như không có ngôn ngữ nào xử lý JSON dễ hơn Javascript, chưa nói các API server thường không phải thực hiện những xử lý nặng nề nhưng lượng concurrent request thì cao. Mà Node.js thì xử lý non-blocking. Chẳng còn gì thích hợp hơn Node.js trong trường hợp này!
  • Các ứng dụng đòi hỏi những giao thức kết nối khác chứ không phải chỉ có http. Với việc hỗ trợ giao thức tcp, từ nó bạn sẽ có thể xây dựng bất kỳ 1 giao thức customized nào đấy 1 cách dễ dàng.
  • Các ứng dụng thời gian thực: Khỏi phải nói vì Node.js có vẻ như sinh ra để làm việc này!
  • Các trang web stateful. Node.js xử lý mọi request trên cùng 1 course of giúp đối với việc xây dựng những bộ nhớ đệm chưa khi nào đơn giản tới thế: Hãy lưu nó vào 1 biến international, và thế là mọi request đều có khả năng truy cập tới bộ nhớ đệm đó. Caching sẽ không còn quá đau đầu như xưa, và bạn sẽ có thể lưu cũng như là chia sẻ trạng thái của 1 consumer với những consumer khác ngay ở trong ngôn ngữ, chứ bạn không cần qua những bộ nhớ ngoài!
  • Quan trọng nhất: Bạn thích và muốn dùng nó.

 

 

admin

Leave a Reply

Your email address will not be published. Required fields are marked *