Відмінності між node.js та Tornado [закрито]


79

Окрім того, що node.js написано в JS, а Tornado - на Python, які деякі відмінності між ними? Вони обидва не блокують асинхронні веб-сервери, так? Чому вибирати одне над іншим, крім мови?

Відповіді:


97

Основною перевагою node.js є те, що всі його бібліотеки є асинхронними, тому вам не доведеться особливо турбуватися про блокування. Існують асинхронні бібліотеки для mysql, postgres, redis тощо. Все за замовчуванням є асинхронним.

У Python є бібліотека для чого завгодно - але більшість з цих бібліотек не є асинхронними. Для того, щоб скористатися перевагами торнадо (а не заблокувати процес) необхідні спеціальні бібліотеки для (наприклад, ви не можете просто "pip встановити redis" і використовувати його, вам знадобиться щось на зразок brukva ), а їх набагато менше бібліотеки торнадо, ніж бібліотеки node.js. На даний момент немає доступного драйвера асинхронного mysql для торнадо (або, принаймні, я про це не знаю).

Але ви все ще можете використовувати багато бібліотек python з торнадо (такими, які не виконують введення / виведення), і спільнота торнадо збільшує та заповнює прогалини.

На моєму досвіді простіше написати програму за допомогою node.js, ніж використовувати торнадо. Я особисто перейшов на торнадо з node.js, оскільки він краще вписується в існуючу інфраструктуру мого проекту python (інтеграція між сайтом django, що обслуговує HTML-сторінки, та сервером торнадо, що забезпечує функції реального часу, була досить безболісною).


24
Слід зазначити, що торнадо тепер має доступ до всіх асинхронних бібліотек із кручених (див. Tornadoweb.org/documentation/twisted.html ). І хоча в оригінальному запитанні прямо пропонується не враховувати мову, важливо, щоб у Python були генератори, і вони значно полегшували написання асинхронного коду: у javascript такого немає. Існують десятки бібліотек, які намагаються усунути відсутність прибутковості у V8 (Крок тощо), але без підтримки мови вони мають не дуже гарний синтаксис і обробляють менше регістрових випадків, ніж `` yield '' пітона.
Михайло Коробов

1
Михайле, ви невірно говорите про відсутність підтримки генераторів у JavaScript. Перегляньте інформацію про реалізацію генераторів у JavaScript 1.7 (і зауважте, що поточна версія, 1.8.2, починається з середини 2009 року): Нове у JavaScript 1.7: Генератори .
Tadeck

8
Мова node.js використовує не Javascript 1.7 або 1.8, вона ближча до ECMAScript5. Це тому, що node.js використовує движок V8, який не реалізує всі функції JavaScript 1.7 (див. Code.google.com/p/v8/issues/detail?id=890 ). Це може змінитися в майбутньому, і для цього можуть бути вагомі причини (наприклад, JS 1.7 не є стандартом), але JavaScript 1.7 був введений в 2006 році, а "вихід" не у v8 у 2012 році.
Михайло Коробов

3
Ви маєте рацію, я якось трактував ваш коментар так, ніби ви сказали, що JavaScript не має генераторів. Моя помилка.
Tadeck

4
Чи оновлюється ця відповідь через 2 роки?
nkint

13

Як зазначає Річ Бредшоу, Node.js написаний на JS, а це означає, що ви можете тримати інтерфейс і задній кінець однією мовою і, можливо, ділитися деякою кодовою базою. Для мене це величезна потенційна перевага Node.js . Node також постачається з більшою кількістю асинхронних бібліотек, як видається.

V8 повинен зробити JS швидшим, ніж Python, принаймні, це, мабуть, пропонують тести , але це може не мати великого значення, оскільки як Node.js, так і Tornado (і більшість інших веб-фреймворків) використовують обгортки для власних бібліотек. Багато стандартних бібліотек Python написані на мові C або можуть бути замінені на більш швидку альтернативу, яка ще більше пом'якшує потенційні відмінності.

Веб-служби, як правило, пов’язані з операціями вводу-виводу, тому це означає, що ми витрачаємо час на очікування сховища даних, а не на обробку даних. Це робить різницю синтетичних швидкостей між JS та Python неактуальною у багатьох програмах.


1
Дуже правильна точка зору
безпечна крива

10

node.js використовує V8, який компілюється в код збірки, торнадо поки цього не робить.

Окрім цього (що насправді, здається, не сильно впливає на швидкість), це екосистема. Ви віддаєте перевагу моделі подій JS або способу роботи Python? Вам щасливіше користуватися бібліотеками Python або JS?


6
Я просто запускаю httperf проти простих однопроцесних програм helloworld. Tornado на PyPy 1.8 (~ 8k req / s) не відстає від продуктивності Node (~ 11k req / s).
jholster

2
V8 компілюється до машинного коду, а не до складання. І важливо, щоб компіляція була точно вчасно, а не статичною: en.wikipedia.org/wiki/V8_(JavaScript_engine)
Макс Хейбер

3

Nodejs також має безперебійну інтеграцію / реалізацію веб-сокетів під назвою Socket.io. Він обробляє браузери, що підтримують сокети - події, а також підтримує зворотне опитування для старих браузерів. Досить швидко розробляється, що вимагає системи повідомлень або подібного програмування на основі подій.


ну є socketTornad, який є розгалуженою реалізацією socket.io, який залежить виключно від того, коли з’явиться наступне оновлення з точки зору підтримки. Весь сенс згадати про це тут - краса socket.io у nodejs, яка зменшує обробку багатьох сценаріїв.
Сушант Хурана

6
Не уявляю, про що ти. Цей проект застарілий і застарілий. Tornadio залишається в курсі випусків посилання socket.io
jdi

3

Я б запропонував вам піти з NodeJS, якщо немає особистого pref до python. Мені дуже подобається Python, але для асинхронності я вибираю Tornado замість вузла, і пізніше доводилося боротися, шукаючи спосіб зробити щось, або бібліотеки з підтримкою асинхронізації (як Кассандра має асинхронізацію в тестах, але ніде я не міг знайти спосіб використовувати cqlengine з Довелося вибрати Монго, оскільки я вже перевищив термін). Що стосується продуктивності та асинхронності, Node набагато кращий за торнадо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.