Привет, Хабр! Представляю вашему вниманию перевод статьи «NodeJS vs Python: How to Choose the Best Technology to Develop Your Web App's Back End» автора Oleg Romanyuk.

Предыстория


NodeJS и python — очень популярные технологии для бэкенда. Ни для кого не секрет, что нет «плохих» или «хороших» технологий. Всё зависит от предпочтений разработчика. Но всё же я осмелюсь сравнить их и выбрать лучшую.

Критерии оценивания:


  1. Архитектура
  2. Скорость
  3. Синтаксис
  4. Масштабируемость
  5. Расширяемость
  6. Библиотеки
  7. Универсальность
  8. Кривая обучения
  9. Сообщество
  10. Лучшее применение

Для особо ленивых, суть статьи в двух словах: NodeJS быстрее

P.s. замечания переводчика выделены в таком блоке


Общий обзор


NodeJS


NodeJS-это не язык программирования, а скорее среда выполнения с открытым исходным кодом для JavaScript. Первоначально он был выпущен в 2009 году Райаном Далем. Последняя версия-NodeJS 12.6.0-была выпущена в июле 2019 года.

Самое выдающееся в NodeJS заключается в том, что он основан на движке V8 от Google. Это виртуальная машина со встроенным интерпретатором, компиляторами и оптимизаторами. Написанный на C++, этот движок был разработан Google для использования в Google Chrome. Целью этого движка является компиляция функций JavaScript в машинный код. V8 хорошо известен своей высокой скоростью и постоянно растущей производительностью.

Python


Python-это язык программирования высокого уровня с открытым исходным кодом. Он был впервые выпущен в 1991 году Гвидо ван Россумом. Последняя версия Python 3.8, и она была выпущена в октябре 2019 года. Но Python 3.7 все еще более популярен.

Python в основном работает на платформе Google’s App Engine. Также разработанный Google, движок приложений позволяет разрабатывать веб-приложения с помощью Python и позволяет использовать многочисленные библиотеки и инструменты, которые используют лучшие разработчики Python.

NodeJS vs Python: 0 – 0



Архитектура


NodeJS


NodeJS спроектирован как событийная среда, которая обеспечивает асинхронный ввод / вывод. Определенный процесс вызывается, как только происходит соответствующее событие, что означает, что ни один процесс не блокирует поток. Событийная архитектура NodeJS отлично подходит для разработки чат-приложений и веб-игр.

Python


А вот Python не разработан таким образом. Вы можете использовать его для создания асинхронного и управляемого событиями приложения с помощью специальных инструментов. Такие модули, как asyncio, позволяют писать асинхронный код на Python, как это было бы сделано в Node.JS. Но эта библиотека не встроена в большинство фреймворков Python, и это требует некоторой дополнительной суеты.

Эта событийная архитектура приносит NodeJS ему победное очко.

NodeJS vs Python: 1 – 0



Скорость


NodeJS


Прежде всего, поскольку код JavaScript в NodeJS интерпретируется с помощью механизма V8 (в который Google вкладывает значительные средства), производительность Node.js на уровне.

Во-вторых, NodeJS выполняет код вне веб-браузера, поэтому приложение более эффективно использует ресурсы и работает лучше. Это также позволяет вам использовать функции, которые нельзя использовать в браузере, такие как TCP sockets.

В-третьих, управляемая событиями неблокирующая архитектура позволяет обрабатывать несколько запросов одновременно, что ускоряет выполнение кода.

И, наконец, в NodeJS включено кэширование, что сокращает время загрузки приложения и делает его более отзывчивым.
Подробнее можно почитать здесь.

Python


И Python, и JavaScript являются интерпретируемыми языками, и они обычно медленнее, чем скомпилированные языки, такие как Java.

Тем не менее, в отличие от NodeJS, Python является однопоточным, и запросы обрабатываются намного медленнее. Таким образом, Python-не лучший выбор для приложений, которые ставят во главу угла скорость и производительность или требуют много сложных вычислений. Поэтому веб-приложения Python работают медленнее, чем Node.веб-приложения js.

Победное очко Node.Js за скорость.

NodeJS vs Python: 2 – 0


Синтаксис


NodeJS


Синтаксис, по большей части, является вопросом личных предпочтений. Если я начну говорить, что одно лучше, а другое хуже, я знаю, что столкнусь с большим количеством критики и скептицизма со стороны хабровчан.

На самом деле, синтаксис NodeJS очень похож на JavaScript браузера. Поэтому, если вы знакомы с JavaScript, у вас не будет никаких трудностей с NodeJS.

Python


Синтаксис Python часто считается его самым большим преимуществом. При написании кода на Python разработчикам программного обеспечения необходимо написать меньше строк кода, чем если бы они писали в NodeJS. Синтаксис Python очень прост, и он свободен от фигурных скобок.

Из-за этого код намного легче читать и отлаживать. На самом деле, код Python настолько удобочитаем, что его могут понять клиенты с некоторой технической подготовкой. Но опять же, это зависит от личных предпочтений.

Объективное преимущество Python даёт ему победное очко.

NodeJS vs Python: 2 – 1


Масштабируемость


NodeJS


NodeJS избавляет вас от необходимости создавать большое монолитное ядро. Вместо этого вы создаете набор микросервисов и модулей, и каждый из них будет взаимодействовать с легким механизмом и запускать свой собственный процесс. Вы можете легко добавить дополнительный микросервис и модуль, что делает процесс разработки гибким.

Кроме того, вы можете легко масштабировать приложения на NodeJS как по горизонтали, так и по вертикали. Чтобы масштабировать его по горизонтали, вы добавляете новые узлы(nodes) в существующую систему. Чтобы масштабировать его по вертикали, вы добавляете дополнительные ресурсы к имеющимся узлам.

И, наконец, с точки зрения написания кода, у вас есть больше возможностей в NodeJS, чем в Python. Вы можете использовать слабо типизированный JavaScript или сильно типизированный TypeScript.

Python


Для того, чтобы масштабировать приложения, необходима многопоточность. Но Python не поддерживает многопоточность, потому что он использует глобальную блокировку интерпретатора (GIL).

Хотя Python имеет библиотеки для многопоточности, это не «истинная» многопоточность. Даже если у вас есть несколько потоков, GIL не позволяет интерпретатору Python выполнять задачи одновременно, а заставляет его запускать только один поток одновременно. Python должен использовать GIL, даже если это негативно влияет на производительность, потому что управление памятью Python не является потокобезопасным.
Чтобы понять, насколько важна встроенная многопоточность, попробуйте сделать хоть что-то многопоточное на Arduino, настрадаетесь вдоволь.
Кроме того, Python динамически типизирован. Однако динамически типизированные языки не подходят для больших проектов с растущими командами разработчиков. По мере того как она растет, система постепенно становится чрезмерно сложной и трудной для поддержания.

Хоть и немного, но Python проигрывает NodeJS
С этим пунктом переводчик не согласен. Хоть Python и проигрывает в скорости, он сильно выигрывает в поддержке за счёт относительно дешёвой «рабочей силы», особенно в СНГ. Сэкономленный бюджет можно использовать на расширение ресурсов. Ну и безумно приятный синтаксис в совокупности с покрытием тестов всего и вся перекрывает все минусы динамической типизации. По мнению переводчика, счёт 2-2

NodeJS vs Python: 3 – 1



Расширяемость


NodeJS


NodeJS можно легко настроить, расширить и интегрировать с различными инструментами. Его можно расширить с помощью встроенных API для разработки HTTP или DNS серверов.

Он может быть интегрирован с Babel (компилятором JS), что облегчает front-end разработку со старыми версиями Node или браузера.

Jasmine полезна для unit-тестирования; Log.io полезен для мониторинга проекта и устранения неполадок. Для миграции данных, управления процессами и объединения модулей можно использовать Migrat, PM2 и Webpack.

Также для NodeJS существует масса фреймворков Express, Hapi, Meteor, Koa, Fastify, Nest, Restify и так далее…

Python


Python был представлен в 1991 году, и на протяжении всей его истории было создано множество инструментов разработки и фреймворков.

Например, Python может быть интегрирован с популярным редактором кода Sublime Text, который предлагает некоторые дополнительные функции редактирования и расширения синтаксиса.

Для автоматизации тестирования придумали RobotFramework. Существует также несколько мощных фреймворков веб-разработки, таких как Django, Flask, Pyramid, Web2Py или CherryPy.

Оба получают по очку.

NodeJS vs Python: 4 – 2


Библиотеки


NodeJS


В NodeJS, библиотеки и пакеты управляются NPM-менеджером пакетов узлов. Это одно из крупнейших хранилищ программных библиотек. NPM является быстрым, хорошо документированным и простым в освоении.

Python


В python библиотеки и пакеты устанавливаются с помощью Pip. Pip быстр, надежен и прост в использовании, поэтому разработчикам также легко научиться работать с ним.

Оба получают по очку. Снова…

NodeJS vs Python: 5 – 3


Универсальность


NodeJS


NodeJS в большинстве случаев используется для бэкенда. А вот на фронтенде используется Javascript, благодаря этому вы можете писать и бэк и фронт на одном и том же языке.

С NodeJS, вы можете разрабатывать не только веб-приложения, но и настольные и гибридные мобильные приложения, а также облачные и IoT-решения.

NodeJS также является кроссплатформенной, что означает, что разработчик может создать одно настольное приложение, которое будет работать на Windows, Linux и Mac. Такая универсальность-отличный способ снизить затраты на проект, поскольку все это может сделать одна команда разработчиков.

Python


Как и NodeJS, python кросс-платформенный, так что программа, написанная на mac, отлично заработает и на linux.

И Mac, и Linux имеют предустановленный Python, но в Windows вам нужно установить интерпретатор Python самостоятельно.

Хотя Python отлично подходит для веб-разработки и разработки настольных компьютеров, он довольно слаб для мобильных вычислений. Поэтому мобильные приложения, как правило, не пишутся на Python. Что касается IoT и AI решений, популярность Python быстро растет.

С точки зрения универсальности, обе технологии идут ноздря в ноздрю. Будет справедливо дать каждой по очку.

NodeJS vs Python: 6 – 4


Кривая обучения


NodeJS


NodeJS основан на JavaScript и может быть легко изучен начинающими разработчиками. Как только у вас появятся некоторые знания JavaScript, осваивание Node.js не станет проблемой.

Установка NodeJS довольно проста, но она вводит некоторые продвинутые темы. Например, поначалу может быть трудно понять его событийную архитектуру. Событийная архитектура оказывает значительное влияние на производительность приложений, но разработчикам часто требуется некоторое время, чтобы освоить ее.

Тем не менее, порог входа для NodeJS все еще довольно низок. Но это может означать, что есть много неквалифицированных NodeJS-разработчики. Это может затруднить вам поиск работы на таком оживленном рынке. Но если вы уверены в себе и имеете отличное портфолио, то легко сможете решить эту проблему.

С другой стороны, если вы владелец бизнеса, вы можете столкнуться с проблемой найма низкокачественных специалистов. Но вы также можете решить эту проблему, наняв доверенное агентство по разработке программного обеспечения.

Python


Если вы не знаете JavaScript и вам нужно выбрать, что изучать – Python или NodeJS — вам, вероятно, следует начать с первого. Python может быть проще в освоении, потому что его синтаксис прост и компактен.

Обычно для написания определенной функции в Python требуется меньше строк кода, чем для написания той же функции в NodeJS. Но это не всегда так, потому что длина вашего кода сильно зависит от вашего стиля программирования и парадигмы. Еще один плюс заключается в том, что здесь нет фигурных скобок, как в JavaScript.

Изучение Python также учит вас, как правильно отступать в коде, так как язык чувствителен к отступам и пробелам. (То же самое верно и для NodeJS) Проблема с языками, чувствительными к отступам и пробелам, заключается в том, что одна ошибка отступа или неуместная скобка могут нарушить ваш код без очевидной причины. И новым разработчикам может оказаться трудно устранить такие проблемы.

Проблема высосана из пальца, так как все более-менее адекватные редакторы способны мгновенно отреагировать на неправильный отступ и сообщить разработчику


Установка Python сложнее, чем установка NodeJS. Если у вас есть Linux или Windows, вы должны быть в состоянии установить Python без проблем. Если вы используете MacOS, вы увидите, что у вас есть предустановленный Python 2.0 – но вы не можете использовать его, так как он будет мешать системным библиотекам. Вместо этого вам нужно скачать и использовать другую версию. При настройке среды разработки не забудьте выбрать соответствующую версию.
Настоящая трагедия. Это же отнимет минут 5...
И Python, и NodeJS легко изучить, поэтому трудно объективно сказать, какой из них проще. Это также вопрос личных предпочтений. Итак, в очередной раз обе технологии получают очко.

NodeJS vs Python: 7 – 5


Сообщество


NodeJS


NodeJS сообщество большое и активное. Это зрелый язык с открытым исходным кодом и огромным сообществом пользователей. Прошло уже десять лет после ее выхода, и разработчики со всего мира полюбили эту технологию. Как владелец бизнеса, вы можете легко найти NodeJS-разработчика. Как разработчик, вы всегда можете рассчитывать на поддержку коллег.

Python


Python несколько старше NodeJS, и он также является открытым исходным кодом. Сообщество пользователей имеет огромное количество участников с различным уровнем опыта. Опять же, если вы являетесь владельцем бизнеса или разработчиком, вы получаете выгоду от большого сообщества.

И Python, и NodeJS есть большие сообщества, поэтому оба получают очко.

NodeJS vs Python: 8 – 6


Лучшее применение


NodeJS


Благодаря своей событийной архитектуре, NodeJS идеально подходит для приложений с многочисленными параллельными запросами, интенсивным рендерингом на стороне клиента или частым перетасовыванием данных с клиента на сервер.

Некоторые примеры включают решения Интернета вещей, чат-боты и мессенджеры в реальном времени, а также сложные одностраничные приложения.

NodeJS также хорошо работает для разработки сервисов совместной работы в реальном времени или платформ потоковой передачи. Тем не менее, NodeJS — не лучший вариант для разработки приложений, требующих много ресурсов процессора.

Python


Python подходит для разработки как небольших, так и больших проектов. Его можно использовать для data science, анализа и визуализации данных, для систем распознавания голоса и лиц, программного обеспечения для обработки изображений, нейронных сетей и систем машинного обучения. Python также может быть использован для разработки программного обеспечения для 3D-моделирования и игр.

Обе технологии позволяют разрабатывать широкий спектр приложений. Какой из них больше подходит, зависит исключительно от того, что вам нужно. Поэтому выбирать лучшего не имеет никакого смысла. Здесь ни одна из технологий не получает очка, потому что они не конкурируют непосредственно таким образом.

NodeJS vs Python: 8 – 6


7-7 по мнению переводчика

Вывод


Помните, я говорил, что докажу, что одна технология лучше другой? Отлично!

Но вы также должны помнить, что каждый проект программного обеспечения имеет свои собственные потребности и требования, и вы должны выбрать технологию, основанную на этих потребностях.

Язык, который работает для одного проекта, может вообще не работать для другого проекта.

Теперь я могу сделать выводы. С результатом 8-6, NodeJS немного опережает Python. Помните об этих результатах при выборе Python vs JavaScript для веб-разработки.