Q/A NodeJS là cái gì?

July 4, 2017
Categories:
Tags:

NodeJS là gì?

Anh ui, NodeJS là cái gì vậy anh?

Định nghĩa của NodeJS trên trang chủ nè:

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient. Node.js' package ecosystem, npm, is the largest ecosystem of open source libraries in the world.

Đù, Một cái đinh nghĩa thui mà cả tá thuật ngữ chuyên ngành, em hem hiểu gì hết trơn

  • Javascript engine là cái quần gì?
  • event-driven là quần gì?
  • non-blocking nữa, vậy blocking là sao?
  • I/O model ???
  • package ecosystem là seo?

Javascript chạy như thế nào?

Chắc hẳng chú thường nghe nói Javascript chạy trên trình duyệt web ( browser ) đúng không?

Thì trình duyệt web nó cũng là một phèn mìm ( phần mềm ) thui, có gì đâu.

Giống như Microsoft Word để gõ văn bản vậy đó. Nhưng mà trình duyệt nào cũng vậy, để chạy được thì cần phải có 3 chương trình con trong nó. Nếu coi trình duyệt như một ông giám đốc thì cần có 3 thằng nhân viên:

  • DOM interpreter: thằng này để dịch HTML sang mã máy
  • CSS interpreter: thằng này để địch CSS sang mã máy
  • Javascript Engine: thằng này để dịch Javascript sang mã máy

Tại sao cần phải dịch?

Máy tính nó như người nguyên thủy sống giữa thời hiện đại vậy đó, nó chỉ hiểu ngôn ngữ cực thấp là

Binary code ( mã máy ) là 0 với 1 thôi. Chú có muốn viết code giống này không? Ăn rồi ngồi bấm lỗ 0 với 1 thôi nhé:

binary code

Chu choa mẹ ơi, nhìn cool vl anh à, em cũng muốn học binary code quá

Ừa, chú có thể vào đây học viết binary code để tặng gấu nè

Em làm gì có gấu, mà em hiểu sơ sơ rồi, tức là trình duyệt nó muốn chạy một trang web thì trình duyệt đó cần 3 phần mềm dịch bên trong nó để dịch code sang mã máy đúng không?

Chuẩn

À, hèn gì học lập trình web là phải học HTML, CSS với Javascript. Ủa vậy thì Chrome, Firefox, IE nó khác nhau thế nào?

Thì nó xài Javasript Engine khác nhau.

Mozilla

Spidermonkey

Chrome

V8

Safari

JavaScriptCore ( hay gọi là Nitro )

IE and Edge

Chakra

Đù gì tùm lum vậy, em chỉ muốn biết NodeJS là gì thôi mà?

Thì NodeJS xài V8 engine đó, hem thấy hả?

Nhưng trình duyệt mới cần Javascript Engine chứ, NodeJS cần mẹ gì?

Thì NodeJS dùng để viết web server đúng không, mà Javascript chạy được khi có Javascript Engine thôi, nên mới cần NodeJS.

Nhưng mà web server là gì?

Bây giờ máy tính của chú muốn lên Facebook được đúng không? Thì phải gõ vô trình duyệt web là

facebook.com. Ok chưa?  Thực ra facebook.com là tên miền thôi, nó sẻ trỏ qua địa chỉ IP này  31.13.95.36

Khoan, sao anh biết biết địa chỉ IP của Facebook gê vậy?

Dễ ẹt, vô Terminal ( máy Mac ) hoặc Command Prompt ( Windows):

ping facebook.com

Nó sẽ ra địa chỉ thôi:

địa chỉ IP Facebook

Sẽ có một cái máy tính khác đặt ở bên Mỹ ( ví dụ thôi chứ không biết nó đặt ở đâu nha ) có địa chỉ IP này.

Và giả sử máy tính hiện tại của chú có IP là 69.96.69.96 nha, thì khi chú  truy cập đến facebook.com sẽ nhận kết quả trả về, người ta gọi đó là mô hình client - server:

Ví dụ, khi yêu cầu vào đường dẫn facebook.com thì web server nó trả về trang newsfeed

Tức là cái web server cùi bắp nhất phải làm những được việc sau:

  • Giao tiếp trên Internet
  • Nhận request là gửi response cho client
  • Kết nối với database
  • Quản lý FileFile
  • Xử lý nhiều request cùng lúc từ users
  • vv

Đó là lý do NodeJS ra đời.

Ừa, tạm hiểu, nhưng em vẫn không hiểu tại sao NodeJS xài V8 engine làm gì?

Ok, ta vô trang chủ V8 engine xem nó là gì nhá:

V8 is Google's open source JavaScript engine.

V8 implements ECMAScript as specified in ECMA-262.

V8 is written in C++ and is used in Google Chrome, the open source browser from Google.

V8 can run standalone, or can be embedded into any C++ application.

Để ý câu cuối là can be embedded into any C++  nha. Tức là NodeJS là một library lớn hơn nhưng trong đó có xài V8 engine. Mục đích là để tạo nên một web server có những tính năng như: Nhận request là gửi response cho client, vv ( đã nói ở trên )  mà vẫn sử dụng Javascript chứ không phải C++ hay Python.

A, thì ra là vậy

Đó vậy là đã hiểu ý đầu "Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine" rồi đúng không.

Vậy là còn:

  • event-driven là quần gì?
  • non-blocking nữa, vậy blocking là sao?
  • I/O model ???
  • package ecosystem là seo?

Ừa, vậy event-driven là gì vậy anh?

Author: Khoa Nguyen
https://niviki.com
Thất nghiệp. Đang rủ rê nhiều người thất nghiệp. Nhận làm ứng dụng MVP để nhiều người bỏ việc. Hy vọng với NIVIKI.COM có thể lan toả tinh thần thất nghiệp đến với nhiều người hơn nữa.