Wednesday, May 20, 2015

NodeJS là gì?

Chào các bạn,

Kể từ khi được Joyent đưa ra từ năm 2009, NodeJS đã được giới công nghệ để ý và phát triển mãnh mẽ. Ngày nay, NodeJS đã được ứng dụng rộng rãi trong rất nhiều ứng dụng trên khắp thế giới, đặc biệt là các đại gia công nghệ như Yahoo, Microsoft, LinkedIn hay các tập đoàn thương mại hàng đầu như Walmart, Groupon, PayPal và kể cả GoDaddy, Voxer... cũng sử dụng.....
Nhiều nơi trên thế giới, thậm chí tại thung lũng Silicon, người ta tuyển dụng Lập trình viên NodeJS với mức lương cao ngất ngưỡng, các dự án NodeJS được chào hàng vô cùng hấp dẫn.
Vây thì thành công của công nghệ này vì đâu, hôm nay, chúng ta cùng tìm hiểu xem nó là gì, nó có những đặc điểm nào, ưu - nhược điểm, và hướng đi nào cho riêng bạn????

Sẽ có nhiều bạn chưa biết Nodejs là gì, có nhiều bạn đã làm quen với Nodejs rồi nhưng cũng chưa nắm được rõ ràng Nodejs là gì, bắt nguồn từ đâu, mục đích là gì và định hướng làm sao cho tốt.
Trong bài này, mình sẽ nói rõ ràng những kiến thức đầu tiên về NodeJS, từ đó, bạn sẽ có cài nhìn đúng đắn hơn về NodeJS.
1. Nodejs là gì?
Node.js® is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.
Như trên trang chủ của NodeJS có viết rõ:
Node.js là 1 nền tảng chạy trên môi trường V8 Javascript runtime. Node.js cho phép lập trình viên dễ dàng - nhanh chóng xây dựng các ứng dụng có tính mở rộng và đáp ứng cao sử dụng Javascript trên server. Và vì được porting từ C nên về mặt tốc độ xử lý thì rất nhanh.
Nodejs sử dụng lập trình hướng sự kiện, mô hình giao tiếp  non-blocking I/O cho nên làm cho ứng dụng nhẹ mà hiệu quả, vô cùng hoàn hảo cho các ứng dụng thời gian thực. Một đặc điểm nữa là sử dụng javascript, nên NodeJS chạy trên đa nền tảng và trên mọi loại thiết bị phân tán.

2. Các ứng dụng (thật sự mạnh khi được xây dựng với Node.js)
  • Xây dựng websocket server (Chat server)
  • Ứng dụng upload file rất nhanh trên client
  • Các máy chủ quảng cáo
  • Hoặc bất kỳ ứng dụng dữ liệu thời gian thực nào.
3. Nhược điểm NodeJS
  • Ứng dụng nặng tốn tài nguyên:
Nếu bạn cần xử lý các ứng dụng tốn tài nguyên CPU như encoding video, convert file, decoding encryption… hoặc các ứng dụng tương tự như vậy thì không nên dùng NodeJS (Lý do: NodeJS được viết bằng C++ & Javascript, nên phải thông qua thêm 1 trình biên dịch của NodeJS sẽ lâu hơn 1 chút ). Trường hợp này bạn hãy viết 1 Addon C++ để tích hợp với NodeJS để tăng hiệu suất tối đa !(Việc tích hợp rất thân thiện và nhanh chóng)!
  • NodeJS và ngôn ngữ khác
NodeJS, PHP, Ruby, Python .NET …thì việc cuối cùng là phát triển các App Web. NodeJS mới sơ khai như các ngôn ngữ lập trình khác. Vậy nên bạn đừng hi vọng NodeJS sẽ hơn PHP,Ruby,Python… ở thời điểm này. Nhưng với NodeJS bạn có thể có 1 ứng dụng như mong đợi, điều đó là chắc chắn (perfect)!
Với những gì các ngôn ngữ tiền bối đang có(cộng đồng lâu năm, framework, cms, opensource…) Nếu bạn/doanh nghiệp chưa biết về NodeJS thì việc cần xây dựng dự án quan trọng, kinh doanh phát triển trên NodeJS sẽ không phải lựa chọn bây giờ.
  • NoSQL + Nodejs + Noob !
Với NodeJS, NoSQL thì là sự kết hợp hoàn hảo nhưng :
Bạn là người có kinh nghiệm với các ngôn ngữ lập trình để phát triển các dự án. Bạn biết được NodeJS qua tin tức, báo chí, bạn bè… Bạn quyết định xây dựng dự án bằng NodeJS. Nhưng khi gặp sự cố rủi ro xây dựng dự án với NodeJS đồng thời quay lưng luôn. Hãy đừng đổ lỗi cho công nghệ bạn đang dùng mà hãy hiểu rằng “BẠN CHƯA HIỂU ĐƯỢC NodeJS !”

4. Ưu điểm NodeJS
  • JSON APIs
Bởi lẽ REST/JSON APIs gọn nhẹ là điều khiến NodeJS tỏa sáng. Với cơ chế event-driven, non-blocking I/O(Input/Output) và mô hình kết hợp với Javascript là sự lựa chọn tuyệt vời cho các dịch vụ Webs làm bằng JSON.
  • Ứng dụng trên 1 trang( Single page Application)
Nếu 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. Với khả năng xử lý nhiều Request/s đồng thời thời gian phản hồi nhanh. Các ứng dụng bạn định viết không muốn nó tải lại trang, gồm rất nhiều request từ người dùng cần sự hoạt động nhanh để thể hiện sự chuyên nghiệp thì NodeJS sẽ là sự lựa chọn của bạn.
  • Shelling tools unix
NodeJS sẽ tận dụng tối đa Unix để hoạt động. Tức là NodeJS có thể xử lý hàng nghìn Process và trả ra 1 luồng khiến cho hiệu xuất hoạt động đạt mức tối đa nhất và tuyệt vời nhất.
  • Streamming Data (Luồng dữ liệu)
Các web thông 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 các luồng dữ liệu để đảm bảo tối đa hoạt động cho các luồng dữ liệu khácl
  • Ứng dụng Web thực
Giả sử bạn xây dựng 1 ứng dụng chat, feed … Facebook, Twitter là điển hình cho Web thực. NodeJS làm khá tốt điều đó!

Với những ưu - nhược trên, khi nào chúng ta sẽ dùng Node.js?

Node.js rất hấp dẫn, nó như một cô nàng quyến rũ. Nhưng khi bạn quyết định bắt tay xây dựng một dự án bằng Node.js, hãy đặt câu hỏi: “Tôi có nên dùng Node.js hay không?”. Bởi vì, Nodel.js không phải là cô nàng quyến rũ đâu, mà nó là một con quái vật!

Bạn KHÔNG nên sử dụng Node.js khi:
  • Xây dựng các ứng dụng hao tốn tài nguyên: Bạn đừng mơ mộng đến Node.js khi bạn đang muốn viết một 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 những file dung lượng lớn.
  • Một ứng dụng chỉ toàn CRUD: Node.js không nhanh hơn PHP khi bạn làm các tác vụ mang nặng tính I/O như vậy. Ngoài ra, với sự ổn định lâu dài của các webserver script khác, các tác vụ CRUD của nó đã được tối ưu hóa. Còn Node.js? Nó sẽ lòi ra những API cực cực kỳ ngớ ngẩn.
  • Bạn cần sự ổn định trong ứng dụng của bạn: Chỉ với 4 năm phát triển của mình (2009-2013), version của Node.js đã là 0.10.15. Trong document của Node.js còn có cả mục API stable: đánh số từ 1-5. Tức là mọi API đều có thể thay đổi – một cách không tương thích ngược – hãy thật cẩn thận với những API mà bạn đang dùng, và luôn đặt câu hỏi: “Khi nó thay đổi, nó sẽ ảnh hưởng gì đến dự án của tôi?”
  • Quan trọng nhất: Bạn chưa hiểu hết về Node.js. Node.js cực kỳ nguy hiểm trong trường hợp này, bạn sẽ rơi vào một thế giới đầy rẫy cạm bẫy, khó khăn. Với phần lớn 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 cho việc xuất hiện những error mà thậm chí bạn không biết nó xuất phát từ đâu? Và mệt mỏi hơn nữa: Khi cộng đồng Node.js chưa đủ lớn mạnh, và sẽ ít có sự support từ cộng đồng. Khi mà phần lớn cộng đồng cũng không khá hơn bạn là bao.

Các khó khăn trên chỉ là tạm thời. Bạn có thể vượt qua bằng cách xây dựng những add-on cho Node.js bằng C/C++. Hy vọng với phiên bản 1.x.x, mọi chuyện sẽ khác.

Vậy bạn nên dùng Node.js khi nào:

  • Node.js thực sự tỏa sáng trong việc xây dựng RESTful API (json). Chả có ngôn ngữ nào xử lý JSON dễ dàng hơn Javascript đúng không? Chưa kể 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ì rất cao. Mà Node.js thì xử lý non-blocking. Chả còn gì thích hợp hơn Node.js trong trường hợp này!
  • Những ứng dụng đòi hỏi các giao thức kết nối khác chứ không phải chỉ có http. Vâng! Với việc hỗ trợ giao thức tcp, từ nó bạn có thể xây dựng bất kỳ một giao thức custom nào đó một cách dễ dàng.

  • Những ứng dụng thời gian thực: Khỏi phải nói nhé! Node.js dường như sinh ra để làm việc này!

  • Những website stateful. Node.js xử lý mọi request trên cùng một process giúp cho việc xây dựng các bộ nhớ đệm chưa bao giờ đơn giản đến thế: Hãy lưu nó vào một biến global, và thế là mọi request đều có thể truy cập đến bộ nhớ đệm đó. Caching sẽ không còn quá đau đầu như trước đây, và bạn có thể lưu cũng như chia sẻ trạng thái của một client với các client khác NGAY TRONG NGÔN NGỮ, chứ bạn không cần thông qua các bộ nhớ ngoài!
  • Quan trọng nhất: Bạn yêu thích và đã tự khẳng định: “Tôi sẽ dùng Node.js” vậy thì hãy dùng nó.
5. Những kiến thức cần có để bắt đầu với Nodejs 
Để bắt đầu được với NodeJS, các bạn cần có những kiến thức cơ bản sau:
  • Javascript: Bắt buộc rồi, đơn giản vì code NodeJS là hoàn toàn bằng Javascript
  • Shell Command: Bạn cần biết những lệnh cơ bản như: duyệt đến thư mục, tạo thư mục, copy thư mục, phân-cấp quyền.v.v.v. Tùy theo môi trường bạn sử dụng để develop mà lệnh của windows, linux, osx là khác nhau.
  • Biết về kiểu dữ liệu, đặc biệt là kiểu dữ liệu JSON, là kiểu dữ liệu mà NodeJS sẽ sử dụng nhiều.
  • Những hiểu biết cơ bản về ứng dụng dạng server-client, ip, port.., IO blocking - IO non-blocking.
  • Biết về lập trình web để viết ứng dụng web, hoặc biết về service khi bạn chỉ đơn thuần là viết một service cung cấp một số chức năng nào đó.
Ngoài ra, những thứ nâng cao hơn một chút giúp bạn có thể tạo ra một dự án có mục đích hơn, có nội dung hơn đó là các module cần thiết bạn nên biết để tích hợp vào ứng dụng NodeJS, giúp bạn design, code, debug, deploy, handle ứng dụng của bạn tốt hơn tại đây: Những module nên biết và cần có trong một ứng dụng NodeJS hoàn chỉnh.
6. Những biến thể hoặc phát triển khác của Nodejs
  • IOJS là một trong những phát triển mạnh mẽ từ Nodejs, được sử dụng khá nhiều. Dành cho các bạn sử dụng nhiều ES6.
7. Hiểu một chút cơ bản về event-driven, non-blocking I/O
  • event-driven
  • non-blocking I/O 
Là key của NodeJS, các bạn đọc bài này để hiểu sơ qua về nó nhé. Ở phần sau, chúng ta sẽ bắt đầu với cài đặt và viết ứng dụng đầu tiên.

Bài viết có tham khảo thêm từ : NodeJS.VN
Share this post
  • Share to Facebook
  • Share to Twitter
  • Share to Google+
  • Share to Stumble Upon
  • Share to Evernote
  • Share to Blogger
  • Share to Email
  • Share to Yahoo Messenger
  • More...

1 comments

  1. Sloty Casino 2021 - Las Vegas - MapyRO
    The 포항 출장안마 sloty casino offers a great 구미 출장마사지 selection 충청북도 출장안마 of 익산 출장샵 games, from classic slots to video slots 경산 출장마사지 and has a wide range of slot machines and jackpots.

    ReplyDelete

:) :-) :)) =)) :( :-( :(( :d :-d @-) :p :o :>) (o) [-( :-? (p) :-s (m) 8-) :-t :-b b-( :-# =p~ :-$ (b) (f) x-) (k) (h) (c) cheer

 
Posts RSSComments RSSBack to top
© 2011 Tự học NodeJS ∙ Designed by BlogThietKe
Released under Creative Commons 3.0 CC BY-NC 3.0