Câu hỏi Sự khác nhau giữa node.js và Tornado [closed]


Bên cạnh thực tế là node.js được viết bằng JS và Tornado trong Python, một số khác biệt giữa hai cái là gì? Cả hai máy chủ web không đồng bộ không chặn, phải không? Tại sao chọn một trong những khác ngoài ngôn ngữ?


76
2018-04-06 05:06


gốc




Các câu trả lời:


Ưu điểm chính của node.js là tất cả các thư viện của nó đều không đồng bộ vì vậy bạn không phải lo lắng nhiều về việc chặn. Có các thư viện async cho mysql, postgres, redis, vv Tất cả đều không đồng bộ theo mặc định.

Python có một thư viện cho bất cứ điều gì - nhưng hầu hết các thư viện này không phải là không đồng bộ. Để tận dụng lợi thế của lốc xoáy (và không chặn quá trình) các thư viện đặc biệt là cần thiết (ví dụ: bạn không thể 'pip install redis' và sử dụng nó, bạn sẽ cần một cái gì đó như brukva) và có ít thư viện lốc xoáy hơn các thư viện node.js. Hiện tại không có trình điều khiển lốc xoáy mysql không đồng bộ, ví dụ (hoặc ít nhất là tôi không biết về nó).

Nhưng bạn vẫn có thể sử dụng nhiều thư viện python với lốc xoáy (những cái không làm i / o), và cộng đồng lốc xoáy đang nâng cao và lấp đầy khoảng trống.

Việc viết ứng dụng bằng cách sử dụng node.js dễ dàng hơn việc sử dụng lốc xoáy trong trải nghiệm của tôi. Cá nhân tôi chuyển sang lốc xoáy từ node.js bởi vì nó phù hợp với cơ sở hạ tầng hiện có của dự án python của tôi tốt hơn (tích hợp giữa trang django phục vụ các trang html và máy chủ lốc xoáy cung cấp các tính năng thời gian thực là khá đau).


95
2018-04-06 14:14



Cần lưu ý rằng lốc xoáy bây giờ có một acces cho tất cả các thư viện async từ xoắn (xem tornadoweb.org/documentation/twisted.html). Và tuy nhiên câu hỏi ban đầu đã đề xuất một cách rõ ràng không nên dùng ngôn ngữ trong tài khoản, điều quan trọng là Python có máy phát và họ viết mã async dễ dàng hơn nhiều: không có một thứ như vậy trong javascript. Có hàng tá thư viện cố gắng giải quyết việc thiếu năng suất trong V8 (Bước, v.v.) nhưng không hỗ trợ ngôn ngữ họ có cú pháp không đẹp và xử lý các trường hợp ít cạnh hơn 'lợi nhuận' của python. - Mikhail Korobov
Mikhail, bạn không chính xác về việc thiếu sự hỗ trợ cho máy phát điện trong JavaScript. Xem thông tin về việc triển khai trình tạo trong JavaScript 1.7 (và lưu ý rằng phiên bản hiện tại, 1.8.2, là từ giữa năm 2009): Tính năng mới trong JavaScript 1.7: Máy phát điện. - Tadeck
Ngôn ngữ node.js sử dụng không phải là Javascript 1.7 hoặc 1.8, nó gần gũi hơn với ECMAScript5. Đó là bởi vì node.js sử dụng công cụ V8 không thực hiện tất cả các tính năng JavaScript 1.7 (xem code.google.com/p/v8/issues/detail?id=890 ). Điều này có thể thay đổi trong tương lai và có thể có lý do hợp lệ cho điều đó (ví dụ: JS 1.7 không phải là tiêu chuẩn), nhưng JavaScript 1.7 đã được giới thiệu vào năm 2006 và 'lợi nhuận' không nằm trong v8 vào năm 2012. - Mikhail Korobov
Bạn đúng, tôi bằng cách nào đó giải thích bình luận của bạn như thể bạn đang nói JavaScript không có máy phát điện. Lỗi của tôi. - Tadeck
Câu trả lời này có được cập nhật sau 2 năm không? - nkint


Như Rich Bradshaw chỉ ra Node.js được viết bằng JS, có nghĩa là bạn có thể giữ đầu trước và mặt sau ở cùng một ngôn ngữ và có thể chia sẻ một số codebase. Với tôi đó là một lợi ích tiềm năng to lớn của Node.js. Node cũng đi kèm với nhiều thư viện không đồng bộ ra khỏi hộp có vẻ như.

V8 nên làm cho JS nhanh hơn Python ít nhất đó là những điểm chuẩn có vẻ gợi ý, nhưng nó có thể không quan trọng nhiều, bởi vì cả hai Node.js và Vòi rồng (và hầu hết các khung công tác web khác cho vấn đề đó) sử dụng trình bao bọc cho các thư viện gốc. Rất nhiều thư viện chuẩn của Python được viết bằng C hoặc có thể được thay thế bằng một giải pháp thay thế nhanh hơn, giúp giảm thiểu sự khác biệt tiềm năng hơn nữa.

Các dịch vụ Web thường là I / O bị ràng buộc, vì vậy điều đó có nghĩa là chúng ta đang dành thời gian chờ đợi cho kho dữ liệu và không xử lý dữ liệu. Điều đó làm cho sự khác biệt về tốc độ tổng hợp giữa JS và Python không liên quan trong nhiều ứng dụng.


12
2017-09-18 07:30



Rất đúng quan điểm - securecurve


node.js sử dụng V8 để biên dịch thành mã assembly, lốc xoáy vẫn chưa thực hiện điều đó.

Khác hơn là (mà không thực sự có vẻ làm cho sự khác biệt nhiều đến tốc độ), đó là hệ sinh thái. Bạn có thích mô hình sự kiện của JS hay cách Python hoạt động? Bạn có hạnh phúc hơn khi sử dụng thư viện Python hoặc JS không?


10
2018-04-06 08:52



Hãy xem Pypy - Dmytro Leonenko
Tôi chỉ chạy httperf đối với các ứng dụng helloworld đơn giản. Tornado trên PyPy 1.8 (~ 8k req / s) không ở xa hiệu suất của Node (~ 11k req / s). - jholster
V8 biên dịch thành mã máy, không lắp ráp. Và điều quan trọng là việc biên dịch là đúng lúc thay vì tĩnh: en.wikipedia.org/wiki/V8_(JavaScript_engine) - Max Heiber


Nodejs cũng có tích hợp / triển khai liền mạch các websockets được gọi là Socket.io. Nó xử lý các trình duyệt hỗ trợ ổ cắm - sự kiện và cũng có khả năng tương thích bỏ phiếu ngược đối với các trình duyệt cũ hơn. Nó khá nhanh về phát triển đòi hỏi một khung thông báo hoặc một số chương trình dựa trên sự kiện tương tự.


3
2018-02-07 06:36



Python cũng có socket.io - jdi
cũng có socketTornad đó là một thực hiện chia rẽ của socket.io mà phụ thuộc hoàn toàn vào khi cập nhật tiếp theo đến trong điều khoản của hỗ trợ. Toàn bộ các điểm đề cập đến điều này ở đây là vẻ đẹp của socket.io trong nodejs làm giảm xử lý rất nhiều kịch bản. - Sushant Khurana
Không có ý tưởng những gì bạn đang nói về. Dự án đó cũ kỹ và lỗi thời. Tornadio luôn cập nhật các bản phát hành của tham chiếu socket.io: github.com/MrJoes/tornadio2 - jdi


Tôi sẽ đề nghị bạn đi với NodeJS, nếu không có pref cá nhân để python. Tôi thích Python rất nhiều, nhưng đối với async tôi chọn Tornado qua nút, và sau đó phải đấu tranh tìm cách để làm một điều, hoặc thư viện với sự hỗ trợ async (như Cassandra không đồng bộ trong các bài kiểm tra, nhưng không nơi nào tôi có thể tìm cách sử dụng cqlengine Đã phải chọn Mongo vì tôi đã vượt qua thời hạn). Xét về hiệu suất và async, Node tốt hơn nhiều so với cơn lốc xoáy.


3
2018-04-05 08:04