Nó đặc biệt mạnh khi xử lý hàng tấn tệp I / O và tôi hy vọng nó cũng sẽ xử lý tốt cả tấn giao tiếp mạng. Nó có vẻ đặc biệt phổ biến cho các ứng dụng điều khiển ổ cắm. Điều quan trọng cần lưu ý là nếu nhu cầu của bạn không được đáp ứng bởi các thư viện hiện có (có rất nhiều), bạn có thể cần phải đi sâu vào một số C có thể bị ràng buộc với các lệnh JS. Bạn cũng có thể sinh ra các quy trình Node bổ sung nhưng tôi nghi ngờ việc thực hiện nhiều quy trình có thể bị đánh thuế (tôi cho rằng - có thể sai - có một phiên bản V8 được sinh ra cho mỗi một trong số đó).
JS là một luồng đơn và chặn, có nghĩa là không có gì khác có thể thực thi cho đến khi một lệnh gọi hàm hoàn thành. Đây là một tính năng mong muốn của JS, về cơ bản lấy tất cả các mối quan tâm phân luồng và xếp hàng ra khỏi tay bạn. JS không ngăn các công cụ C / C ++ chạy theo kiểu đa luồng hơn dưới mui xe, vì vậy vai trò của JS thực sự là kiến trúc / trình nhắn tin nhiều hơn. Nếu bạn đang xử lý hình ảnh, bạn sẽ không muốn xử lý điều đó bằng các lệnh JavaScript đồng bộ vì mọi thứ khác trên ứng dụng hoặc máy chủ của bạn sẽ bị chặn cho đến khi hoàn thành. Ý tưởng là bạn gọi cho một hình ảnh được xử lý bằng chức năng C / C ++ bị ràng buộc, và sau đó trả lời sự kiện 'xong' khi hình ảnh được xử lý xong.
Điều này đòi hỏi rằng JS trong bất kỳ ứng dụng Node.js nào phải chịu nhiều sự kiện và điều khiển gọi lại hoặc nó có thể sẽ hoạt động rất kém. Vì vậy, bạn sẽ không thấy nhiều cuộc gọi phương thức trong Node mà không được trao một hàm để sử dụng sau này. Một điều trở nên rất rõ ràng rất nhanh trong Node là bạn đang ở trong một thế giới xấu xí nếu bạn không tìm cách xử lý kim tự tháp gọi lại. ví dụ
//event CBs are more DOM-style than Node style and this isn't built-in Node file I/O
//keeping it simple and quick since I'll just get Node stuff wrong from memory
file.get('someFile.txt', function(e){
e.fileObj.find('some snippet', function(e){
someFinalCallBackHandler( e.snippetLocations );
} );
} );
May mắn thay, có rất nhiều công cụ và ví dụ ngoài kia để xử lý việc này tốt hơn. Hầu hết có xu hướng xoay quanh các cơ chế hứa hẹn và chỉ đơn giản là xâu chuỗi một loạt các chức năng nhằm đáp ứng các trạng thái gọi lại của nhau trong một mảng thực hiện công cụ kim tự tháp xấu xí cho bạn dưới mui xe.
Cá nhân, tôi rất thích tình yêu rằng chúng tôi có được JS ở mức cao và C / C ++ gần với chrome hơn. Đó là sự kết hợp tuyệt vời và nó thôi thúc tôi bắt đầu học C. Và đừng để việc thiếu tiềm năng thư viện làm bạn hoảng sợ cho đến khi bạn thực hiện một số nghiên cứu. Các thư viện nút đang được sản xuất với tốc độ rất nhanh và đang trưởng thành rất nhanh. Nếu bạn không làm bất cứ điều gì tỷ lệ cược cao bất thường là tốt thì ai đó đã bảo hiểm.
Sự khác biệt lớn nhất từ Rails, là JS không bao giờ có khả năng nằm trên đường ray như trước đây. Chúng tôi có xu hướng mã hóa để có thể có nó tuy nhiên bạn muốn nó rất nhanh vì vậy có một sợi dây để tự treo mình với yếu tố và kiến trúc đã khá DIY trong JS cho đến những năm gần đây. Tôi gọi đó là sự tự do, nhưng tôi nhận ra rằng đó không phải là lý tưởng cho nhiều nhà phát triển.
Ngoài ra, bạn sẽ không bao giờ gặp sự cố "đá quý" trong Node.js vì bạn đã cố cài đặt trên một thứ khác ngoài máy Mac. Các nhà phát triển web phía khách hàng coi thường các vấn đề phụ thuộc và đó là nơi có rất nhiều cốt lõi của Node. Nếu nó không hoạt động trong vòng 5 phút hoặc ít hơn trên mọi nền tảng phổ biến, chúng tôi thường vò nó và ném nó. Tôi vẫn chưa chạy vào một mô-đun phổ biến yêu cầu tôi làm bất cứ điều gì đặc biệt để làm cho nó hoạt động. Hệ thống trọn gói, là tuyệt vời.
Nhưng để trả lời câu hỏi cốt lõi của bạn rõ ràng / ngắn gọn hơn: Nó có tốt với các quy trình nền không?
Có, về cơ bản, Node xử lý nền IS với phương tiện điều khiển ứng dụng thông qua các sự kiện và cuộc gọi lại.