Tại sao chọn node.js

Nodejs đã nổi lên vì một vài lý do chính mà mình sẽ trình bày ngay sau đây.

Lập trình Web

Trong quá khứ, việc viết những ứng dụng web đã là một quy trình khá chuẩn. Bạn có một hoặc nhiều máy lắng nghe 1 cổng (ví dụ cổng 80 cho HTTP), và khi một yêu cầu nhận được, nó phân ra một tiến trình hoặc một luồng để bắt đầu một một xử lý và đáp ứng câu truy vấn. Công việc này thường liên quan đến các dịch vụ bên ngoài, như là cơ sở dữ liệu, bộ nhớ đệm, máy chủ tính toán bên ngoài hoặc thậm chí chỉ là các tập tin hệ thống. Khi những công việc này cuối cùng đã hoàn thành, thì luồng hay tiến trình trên sẽ được trả về vùng lưu trữ khả dụng của máy chủ, và những yêu cầu tiếp theo có thể được xử lý sau đó.

Đó là một quá trình hợp lý, dễ hiểu, đơn giản để lập trình. Tuy nhiên, có một vài bất lợi gây ra một vài điều tệ hại cho mô hình này:

  1.  Mỗi luồng hay tiến trình này chiếm một lượng hao phí bộ nhớ dành cho nó. Trên các thiết bị, PHP + Apache có thể chiếm lên tới 10 – 15MB mỗi tiến trình. Thậm chí là trong những môi trường máy chủ lớn hoạt động liên tục và phân chia nhiều luồng để tiến hành xử lý các yêu cầu, mỗi tiến trình này mang một lượng hao phí bộ nhớ để tạo một ngăn xử lý mới và môi trường thực hiện, và bạn thường xuyên đạt đến giới hạn của bộ nhớ sẵn có của máy chủ.
  2. Trong hầu hết các tình huống sử dụng phổ biến, nơi một máy chủ web liên kết với cơ sở dữ liệu, máy chủ lưu trữ bộ nhớ đệm, máy chủ bên ngoài hoặc hệ thống tập tin, hầu hết thời gian sẽ chỉ là dành cho việc chờ đợi các dịch vụ này kết thúc xử lý và trả về lại kết quả cuối cùng. Trong khi luồng xử lý chờ đợi và không làm gì, thì nó bị chặn (“blocked”) để có thể xử lý các công việc khác. Các tài nguyên mà nó tiêu thụ và kể cả tiến trình hay luồng để mà nó hoạt động là hoàn toàn bị đóng băng, và cùng chờ đợi kết quả trả về từ các dịch vụ bên ngoài đó để chúng quay trở lại tiếp tục công việc. Chỉ đến sau khi các dịch vụ bên ngoài kết thúc xử lý và gửi lại kết quả cuối cùng, các tiến trình xử lý hay luồng xử lý này cùng với các tài nguyên đang dành ra để chạy nó mới có thể tự do hoàn thành yêu cầu, gửi đi một phản ứng trả lời đến máy khách, và sau đó được thiết lập lại để chuẩn bị cho một yêu cầu khác.

Vì vậy, mặc dù khá dễ để hiểu và làm việc với mô hình này, thì bạn vẫn có một mô hình có thể không hiệu quả nếu các tập lệnh của bạn dành hầu hết thời gian để chờ đợi các máy chủ cơ sở dữ liệu hoàn thành việc xử lý một truy vấn. Đó là một kịch bản rất phổ biến cho rất nhiều các ứng dụng web hiện đại.

Nhiều giải pháp cho vấn đề này đã được đưa ra, phát triển và đang được sử dụng phổ biến. Bạn có thể mua các máy chủ web lớn hơn và mạnh hơn với bộ nhớ nhiều hơn. Bạn có thể thay thế các máy chủ HTTP mạnh mẽ và giàu tính năng hơn như Apache với các thiết bị nhỏ hơn, nhẹ như lighttpd hoặc nginx. Bạn có thể tự xây dựng các phiên bản ngôn ngữ yêu thích của mình như PHP hoặc Python. (Thực tế, Facebook đã tiến thêm một bước này và xây dựng một hệ thống chuyển đổi PHP sang mã C ++ gốc để đạt được tốc độ tối đa và kích thước tối ưu.) Hoặc bạn có thể mở rộng thêm nhiều máy chủ hơn để giải quyết vấn đề này để tăng số kết nối đồng thời mà bạn có thể đáp ứng.

Công nghệ mới

Mặc dù các nhà phát triển web trên thế giới đã và đang tiếp tục cuộc đấu tranh vĩnh cửu của họ chống lại giới hạn về tài nguyên máy chủ và số lượng yêu cầu mà họ có thể xử lý, một vài điều thú vị khác đã xảy ra trong thời gian chờ đợi.

JavaScript, ngôn ngữ cũ (nghĩa là từ 1995 hoặc trước đó) được biết đến nhiều nhất (và thường xuyên gây nhầm lẫn) để viết kịch bản phía máy khách trong trình duyệt web, đã trở nên phổ biến trở lại. Các phiên bản hiện đại của các trình duyệt web đang dọn dẹp các công cụ hiện có của nó và thêm vào các tính năng mới để làm cho nó mạnh hơn và ít khó khăn hơn. Với sự xuất hiện của các thư viện phía máy khách cho các trình duyệt này, chẳng hạn như jQuery, script.aculo.us, hoặc Prototype, lập trình trong JavaScript đã trở nên thú vị và hiệu quả hơn nhiều. Những API khó sử dụng đã được làm sạch, và trở nên mạnh mẽ, rất nhanh, các hiệu ứng động cũng đã được thêm vào.

Đồng thời, một thế hệ trình duyệt mới đã bùng nổ, với Chrome của Google, Firefox của Mozilla, Safari của Apple và Internet Explorer của Microsoft đều đang cố giành vương miện của vua trình duyệt. Là một phần của điều này, tất cả các công ty này đang đầu tư mạnh mẽ vào phần JavaScript của các hệ thống này vì các ứng dụng web hiện đại tiếp tục phát triển ngày càng năng động hơn và dựa trên kịch bản. Đặc biệt, thời gian chạy JavaScript của V8 của Google Chrome rất nhanh và cũng có nguồn mở để mọi người sử dụng.

Với tất cả những điều nói trên trên, lúc này, một số người đã nảy sinh ra một cách tiếp cận mới để phát triển ứng dụng mạng (web). Đó chính là sự ra đời của Node.js.

Sharing is caring!

Chủ đề:

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *