Окрім того, що node.js написано в JS, а Tornado - на Python, які деякі відмінності між ними? Вони обидва не блокують асинхронні веб-сервери, так? Чому вибирати одне над іншим, крім мови?
Відповіді:
Основною перевагою node.js є те, що всі його бібліотеки є асинхронними, тому вам не доведеться особливо турбуватися про блокування. Існують асинхронні бібліотеки для mysql, postgres, redis тощо. Все за замовчуванням є асинхронним.
У Python є бібліотека для чого завгодно - але більшість з цих бібліотек не є асинхронними. Для того, щоб скористатися перевагами торнадо (а не заблокувати процес) необхідні спеціальні бібліотеки для (наприклад, ви не можете просто "pip встановити redis" і використовувати його, вам знадобиться щось на зразок brukva ), а їх набагато менше бібліотеки торнадо, ніж бібліотеки node.js. На даний момент немає доступного драйвера асинхронного mysql для торнадо (або, принаймні, я про це не знаю).
Але ви все ще можете використовувати багато бібліотек python з торнадо (такими, які не виконують введення / виведення), і спільнота торнадо збільшує та заповнює прогалини.
На моєму досвіді простіше написати програму за допомогою node.js, ніж використовувати торнадо. Я особисто перейшов на торнадо з node.js, оскільки він краще вписується в існуючу інфраструктуру мого проекту python (інтеграція між сайтом django, що обслуговує HTML-сторінки, та сервером торнадо, що забезпечує функції реального часу, була досить безболісною).
Як зазначає Річ Бредшоу, Node.js написаний на JS, а це означає, що ви можете тримати інтерфейс і задній кінець однією мовою і, можливо, ділитися деякою кодовою базою. Для мене це величезна потенційна перевага Node.js . Node також постачається з більшою кількістю асинхронних бібліотек, як видається.
V8 повинен зробити JS швидшим, ніж Python, принаймні, це, мабуть, пропонують тести , але це може не мати великого значення, оскільки як Node.js, так і Tornado (і більшість інших веб-фреймворків) використовують обгортки для власних бібліотек. Багато стандартних бібліотек Python написані на мові C або можуть бути замінені на більш швидку альтернативу, яка ще більше пом'якшує потенційні відмінності.
Веб-служби, як правило, пов’язані з операціями вводу-виводу, тому це означає, що ми витрачаємо час на очікування сховища даних, а не на обробку даних. Це робить різницю синтетичних швидкостей між JS та Python неактуальною у багатьох програмах.
node.js використовує V8, який компілюється в код збірки, торнадо поки цього не робить.
Окрім цього (що насправді, здається, не сильно впливає на швидкість), це екосистема. Ви віддаєте перевагу моделі подій JS або способу роботи Python? Вам щасливіше користуватися бібліотеками Python або JS?
Nodejs також має безперебійну інтеграцію / реалізацію веб-сокетів під назвою Socket.io. Він обробляє браузери, що підтримують сокети - події, а також підтримує зворотне опитування для старих браузерів. Досить швидко розробляється, що вимагає системи повідомлень або подібного програмування на основі подій.
Я б запропонував вам піти з NodeJS, якщо немає особистого pref до python. Мені дуже подобається Python, але для асинхронності я вибираю Tornado замість вузла, і пізніше доводилося боротися, шукаючи спосіб зробити щось, або бібліотеки з підтримкою асинхронізації (як Кассандра має асинхронізацію в тестах, але ніде я не міг знайти спосіб використовувати cqlengine з Довелося вибрати Монго, оскільки я вже перевищив термін). Що стосується продуктивності та асинхронності, Node набагато кращий за торнадо.