Различия между node.js и Tornado

Кроме того, что node.js написано в JS и Tornado в Python, каковы некоторые различия между ними? Они оба являются неблокирующими асинхронными веб-серверами, не так ли? Зачем выбирать один над другим, кроме языка?

Ответ 1

Основным преимуществом node.js является то, что все его библиотеки асинхронны, поэтому вам не нужно много беспокоиться о блокировке. Существуют асинхронные библиотеки для mysql, postgres, redis и т.д. Все по умолчанию async.

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

Но вы все равно можете использовать множество библиотек python с торнадо (те, которые не делают i/o), и сообщество торнадо поднимает и заполняет пробелы.

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

Ответ 2

Как отмечает Rich Bradshaw, Node.js написан в JS, что означает, что вы можете сохранить передний и задний концы на одном языке и, возможно, поделиться некоторой базой кода. Для меня это огромное потенциальное преимущество Node.js. Node также поставляется с более асинхронными библиотеками из коробки.

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

Веб-службы обычно связаны с вводом-выводом, поэтому мы тратим время на хранение данных и обработку данных. Это делает синтетическую разницу в скорости между JS и Python нерелевантной во многих приложениях.

Ответ 3

node.js использует V8, который компилируется в код сборки, торнадо еще этого не делает.

Кроме того (что фактически не имеет большого значения для скорости), это экосистема. Вы предпочитаете модель события JS или способ работы Python? Вы счастливее используете библиотеки Python или JS?

Ответ 4

Я бы предложил вам пойти с NodeJS, если нет личного префикса для python. Мне нравится Python много, но для async я выбираю Tornado над node, а позже должен был бороться, чтобы найти способ сделать что-то, или библиотеки с поддержкой асинхронного программирования (например, Cassandra имеет асинхронные тесты, но нигде не могу найти способ использовать cqlengine с async. Пришлось выбирать Mongo, так как я уже превзошел крайний срок). С точки зрения производительности и асинхронности, Node гораздо лучше, чем торнадо.

Ответ 5

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