Node.js Là Gì? - Hướng Dẫn Cơ Bản Về Node.js

Thảo luận trong 'Công Nghệ' bắt đầu bởi Wall-E, 23 Tháng tư 2016.

  1. Wall-E

    Wall-E Active Member

    Bài viết:
    Tìm chủ đề
    135
    NodeJS là bộ mã nguồn mở được viết bởi Ryan Dahl năm 2009 trên nền tảng Javascript Engine V8 của Google. Khác với Javascript được chạy ở phía client cho phép người dùng tương tác với trang web thông qua trình duyệt thì Node. Js chạy trực tiếp trên máy chủ.

    Lập trình viên sử dụng Node. Js để xây dựng các ứng dụng trên máy chủ hoặc các ứng dụng về network ví dụ như các trang video clip, các forum và đặc biệt là trang mạng xã hội phạm vi hẹp. NodeJS có thể chạy trên nhiều nền tảng hệ điều hành khác nhau từ WIndow cho tới Linux, OS X. NodeJS cung cấp các thư viện phong phú ở dạng Javascript Module khác nhau giúp đơn giản hóa việc lập trình và giảm thời gian ở mức thấp nhất.

    NodeJS giúp lập trình viên xử lý các vấn đề trên web theo thời gian thưc - realtime và được thực thi trực tiếp trên server. Ví dụ như Facebook mỗi khi có người tương tác là ngay lập tức bạn nhận được thông báo. Nếu như bạn sử dụng Javascript - Ajax request tới server để xử lý các yêu cầu và trả về thông báo cho người dùng thì server sẽ không thể chịu tải với khối lượng request cực lớn như vậy. NodeJS sẽ trực tiếp xử lý trên server và trả kết quả ngay mà không phải trả về kết quả cho client xử lý, giúp tiết kiệm được 1 bước & loại bỏ bớt javascript giúp trang web nhẹ hơn, cũng không phải lo vấn đề trình duyệt của người dùng bị tắt javascript hoặc lợi dụng các lỗ hổng từ javascript để tấn công website.

    Các đặc tính của NodeJS

    Không đồng bộ: Tất cả các API của NodeJS đều không đồng bộ - none-blocking, nó chủ yếu dựa trên nền của NodeJS Server và chờ đợi Server trả dữ liệu về. Việc di chuyển máy chủ đến các API tiếp theo sau khi gọi và cơ chế thông báo các sự kiện của Node. Js giúp máy chủ để có được một phản ứng từ các cuộc gọi API trước.

    Chạy rất nhanh: NodeJ được xây dựng dựa vào nền tảng V8 Javascript Engine của Google nên việc thực thi chương trình rất nhanh.

    Đơn luồng nhưng khả năng mở rộng cao: Node. Js sử dụng một mô hình luồng duy nhất với sự kiện lặp. Cơ chế tổ chức sự kiện giúp các máy chủ để đáp ứng một cách không ngăn chặn và làm cho máy chủ cao khả năng mở rộng như trái ngược với các máy chủ truyền thống mà tạo đề hạn chế để xử lý yêu cầu. Node. Js sử dụng một chương trình đơn luồng và các chương trình tương tự có thể cung cấp dịch vụ cho một số lượng lớn hơn nhiều so với yêu cầu máy chủ truyền thống như Apache HTTP Server.

    Không đệm: NodeJS không đệm bất kì một dữ liệu nào và các ứng dụng này chủ yếu là đầu ra dữ liệu.

    Có giấy phép: NodeJS đã được cấp giấy phép bởi MIT License.

    Bài viết được tổng hợp từ nhiều nguồn trên mạng.
     
    Last edited by a moderator: 23 Tháng tư 2016
  2. Admin

    Admin Cho đi là còn mãi Thành viên BQT

    Bài viết:
    Tìm chủ đề
    1,063
    Lý do nên học lập trình NodeJS

    Bài viết được dịch từ trang web MakeUseOf

    [​IMG]

    JavaScript chỉ là một ngôn ngữ lập trình phía client chạy trên trình duyệt, phải không? Nhưng điều này không còn đúng chút nào 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ú trong việc 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.js 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. Bình thường thì bạn cũng có thể tải bộ 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. JavaScript suy cho cùng 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 (Linux-Apache-MySQL-PHP), 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.js 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ẽ phải tự quản lý kiến trúc lõi của máy chủ đó. May mắn thay, có một số module 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ó tốc độ thực thi cao.

    [​IMG]

    Klout – Một ứng dụng web thống kê các hoạt động xã hội được xây dựng dựa trên Node.js vì ưu điểm tốc độ thực thi 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. 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ừ database 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.js sẽ chẳng bao giờ bị khóa (lock up) và có thể hỗ trợ cho hàng chục nghìn user truy cập cùng lúc. Node.js đó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 module (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.js vẫn đang ở trong giai đoạn ban đầu 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 function 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 function thực thi xong trước khi có thể tiếp tục chạy tiếp. Với Node.js, bạn xác định các function 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. Nó là một chủ đề phức tạp mà tôi sẽ không đi vào quá sâu trong bài viết này, nhưng đó là một trong những đặc trưng tiêu biểu của Node.js, vì vậy việc nắm vững nó là điều hết sức quan trọng. Tuy nhiên tôi sẽ đưa ra một ví dụ Hello World để mang lại cho bạn một cái nhìn thoáng qua một vài những khái niệm này.

    Mã:
    var http = require("http");
    http.createServer(function (request, response) {
    response.writeHead(200, { 'Content-Type': 'text/plain' });
    response.write('Hello World!');
    response.end(); }).listen(8080);
    console.log("Server running!");

    Hãy thử phân tích đoạn code trên. Đầu 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ố - function này sẽ được gọi khi mỗi kết nối mới sinh ra. Nó có hai đối số - request, bao gồm các tham số yêu cầu từ người dùng; và response, cái chúng ta sử dụng để gửi kết quả trả về. Tiếp đến, chúng ta sử dụng đối tượng response đó để write 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 message "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 Node.js về, và từ cửa sổ command line chạy dòng lệnh sau -

    node test.js

    Sau đó 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! Lúc này bạn sẽ có một chút ý 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. Nếu bạn là một người mới tiếp xúc với JavaScript, thì khái niệm truyền các function như là một đối số của function khác có thể có một chút lạ lẫm.

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

    Đầu tiên là ưu điểm 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 phát triển lên.

    Node.js 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.js có thể xử lý hàng ngàn kết nối đồng thời trong khi PHP sẽ chỉ có nước sụp đổ. 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ự phấn khích 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.js đ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.js trên host không phải là điều dễ dàng. Nếu bạn có một web hosting xài chung, bạn không thể đơn giản tải lên một ứng dụng Node.js và mong chờ nó hoạt động tốt. VPS và dedicated server là một sự lựa chọn tốt hơn - bạn có thể cài đặt Node.js 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ả tiền 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.js chạy cục bộ trên máy tính của bạn 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 lập tức - chỉ việc tải phiên bản Node.js tương ứng tại đây. Một điều quan trọng nên chú ý là Node.js 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.js đó 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 (stability index), 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ó.

    [​IMG]

    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 web service 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 để xây dựng phần front end.
     
Từ Khóa:

Chia sẻ trang này

Đang tải...