Хочешь стать веб-разработчиком? Учи Node.js, а не PHP! Часть 2

Хочешь стать веб-разработчиком? Учи Node.js, а не PHP! Часть 2

Nuances of programming

Перевод статьи Andrei Neagoie: Want to be a Web Developer? Learn Node.js not PHP

Предыдущая часть: Часть 1

Node.js vs PHP — анализ технологий

Теперь давайте обсудим преимущества и недостатки каждой из технологий по отдельности.

Преимущества Node.js

  • Идеально подходит для приложений, работа которых строится на непрерывном взаимодействии клиента и сервера - к примеру, чаты, которые очень просто делать на socket.io. Благодаря этой же особенности Node.js его удобно использовать для обработки данных, получаемых от устройств IoT (Internet of Things) и одностраничных сайтов Single Page Applications (SPAs) -обе эти области довольно активно развиваются.
  • Встроенная возможность сериализации и десериализации JSON, а значит, легкая и простая работа с AJAX.
  • Отлично подходит для приложений, управляемых событиями, которые не имеют блокировки ввода / вывода (ввод-вывод - это связь между системой обработки информации - компьютером, и внешним мир, представленным человеком или другими системами обработки информации, такими как базы данных.
  • Учишь Javascript - значит учишь и Node.js. И не нужно тратить силы на изучение другого серверного языка типа PHP. Это значит, что можно направить все силы на доскональное изучение и совершенствование одного единственного языка - Javascript - и овладеть им в совершенстве. Таким образом, получаем два в одном - на одном языке можно будет писать и бэкенд, и фронтенд части приложений - то есть по сути, реализовать все приложение целиком.
  • Многие известные фреймворки для создания клиентской части веб-приложений, такие как React, Vue и Angular написаны на JavaScript, который также является главным языком современных браузеров. Использование Node.js на стороне сервера позволяет ощутить все преимущества единого языка программирования для всего стека технологий приложения. Такие приложения легче поддерживать, потому что все разработчики в такой команде работают с одними и теми же структурами данных, функциями и стандартами одного языка - JavaScript.
  • Однопотоковая система событий легко справляется с высокими нагрузками, такими как большое количество запросов от браузеров.
  • На NPM существует огромное число сторонних библиотек и модулей как для клиентской, так и для серверной разработки, а также средств для работы с командной строкой. И их число постоянно растет. Кроме того, большинство из них размещены в GitHub, где есть возможность оперативно сообщить о проблеме или самостоятельно форкнуть код для его настройки под свой проект.
  • Он стал стандартной средой, в которой можно запускать инструменты, связанные как непосредственно с Javascript, так и с веб-разработкой в целом, включая планировщики задач, инструменты сжатия, форматирования кода и аналитики, линтеры, препроцессоры и системы сборки.
  • По умолчанию поддерживается множество новых API и служб, таких как AWS Lambda.
  • Можно пользоваться всей мощью движка V8, который является JavaScript-интерпретатором браузера Google, и самого Node.js. Поскольку инженеры Google постоянно улучшают производительность V8, значит они тем самым способствуют и развитию Node.js.

Недостатки Node.js:

  • Пакеты NPM, упомянутые выше, могут раздувать код, быть небезопасными, а также трудно выбрать лучший модуль в виду их разнообразия (просмотр числа загрузок и статистики GitHub — один из способов решить эту задачу);
  • Многообразие вариантов сборки сервера на Node.js и огромное число npm-модулей ставит перед новичками проблему выбора лучших модулей и пакетов.
  • Не подходит для серверов, которые требуют высокой производительности процессора, например, для выполнения таких сложных алгоритмов как обработка изображений или сортировка. Как правило, всё, что не является вводом-выводом данных, нагружает процессор. В этом случае многопоточная серверная среда станет лучшим вариантом, чем Node.js (решение: если необходимо, вы можете передать части кода, потребляющие мощности CPU, в программу, написанную на языке C).
  • Node не использует все ядра базовой системы или машины. Вы должны сами писать логику для использования многоядерных процессоров. Это может быть достигнуто многими способами, но для этого потребуется дополнительная работы (настоящие профессионалы могут самостоятельно максимизировать использование ЦП в системе).

Вердикт для Node.js

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

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

Node.js поставляется с очень небольшим количеством зависимостей, правил и рекомендаций, которые дают разработчику свободу и простор для творчества. Разработчики для своего проекта вольны сами выбрать лучшую архитектуру, шаблоны проектирования, модули и функции, при этом пользуясь всеми благами NPM.

Преимущества PHP:

  • Мощное сообщество, сформированное за долгие за годы существования языка.
  • На PHP написано немало известных платформ для создания сайтов (i.e. WordPress, Joomla, Drupal), а также систем управления контентом - CMS (Content Management Systems), самой популярной из которых является WordPress. Они позволяют за считанные минуты создать сайт или интернет-магазин, оформить и настроить которые сможет даже непрофессионал.
  • Легко настроить и поднять сервер, сделать это могут даже непрофессионалы, не знакомые с SSH и администрированием Linux, чем и объясняется повышенный спрос у частных лиц и небольших компаний. Многие PHP-приложения (например, cPanel) предлагаются по умолчанию простейшими платформами хостинга, и установить их можно установить одним щелчком мыши.
  • В отличие от других языков программирования общего назначения, PHP был разработан специально для интернета. PHP предлагает отличное решение на стороне сервера, где нет необходимости связываться с JavaScript в браузере, поскольку все страницы могут быть легко сгенерированы и отображены на сервере. Это полезно, если вы хотите избежать слишком большого количества кода на стороне клиента. Node.js так тоже умеет, но сделать это далеко не так просто.
  • Новая версия PHP - PHP7 и HHVM (виртуальная машина от Facebook) улучшили производительность PHP.

Недостатки PHP:

  • PHP используется только для разработки серверной части приложений. Это означает, что вам все равно нужно изучить Javascript, если вы хотите работать на стороне клиента или стать fullstack-разработчиком.
  • Использование PHP с его тяжелым серверным рендерингом и многочисленными запросами к серверу для создания и отрисовки страниц - это далеко не самое лучшее решение для лендингов.
  • Каждый активный клиент (браузер) использует один серверный процесс, что не подходит для приложений с большим числом подключений.
  • Встроенная поддержка PHP для новых API и сервисов, таких как AWS Lambda, ограничена по сравнению с Node.js.
  • Приложения на PHP строятся по классической модели клиент-сервер, где каждый запрос страницы инициирует запуск приложение, соединение с базой данных и рендеринг HTML. Это делает PHP медленнее, когда вы перемещаетесь по веб-сайту по сравнению с приложением на Node.js, которое работает постоянно и запускает только один раз в самом начале. Благодаря этому Node.js больше подходит для нового направления, в которым развивается интернет - HTML5, AJAX и WebSockets.

Вердикт языку PHP:

PHP проще выучить в связи с обширностью сформировавшегся вокруг него сообщества. Это хороший выбор для стандартизованного решения, такого как блог или новостной сайт. Он обладает мощью Wordpress, который является самой популярной CMS (Content Management System), и которая позволяет вам создавать настраиваемые блоги, используя минимальное число кода. Однако простота в этом случае достигается в ущерб качеству. Чем проще научиться технологии, тем легче для кого-то войти в отрасль и тем выше конкуренция, а значит, тем меньшую придется брать плату за свои услуги.

Заключение

PHP был одним из лучших языков в эпоху Web 1.0, когда был популярен Wordpress. Node.js был запущен в 2009 году и технически является не языком, а средой выполнения для Javascript. Он является фаворитом более молодого поколения веб-разработчиков и лучше подходит для создания сложных I/O - приложений, основанных на событиях, оперирующих большими объемами данных, - то есть именно тех приложений, с которыми вы сталкиваетесь в век Web 2.0.


В частности, асинхронная и основанная на событиях архитектура Node.js отлично подходит для приложений, работающих в режиме реального времени, таких как мессенджеры и чаты, а также для приложений совместного использования, в которых одновременно выполняется много запросов и идет постоянный обмен данными между клиентом и сервером. Не может жить без Wordpress? Ну, у Node.js есть своя собственная прекрасную CMS, которая называется  Keystone.js.


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

Я выбираю Node.js.

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

В своем курсе я преподаю материал, который актуален сегодня для профессиональной карьеры в этой области, а также инструменты, используемые некоторыми крупнейшими компаниями, такими как Facebook, Netflix, Google и Amazon. Если вы хотите стать fullstack-разработчиком в 2018 году, я рекомендую вам изучить:

HTML5

CSS3

Javascript

React.js

Node.js + Express.js

PostgreSQL

и некоторые другие технологии…

Узнать о них больше можно в моей статье об обучении разработке в 2018 году или в моем онлайн-курсе , который позволит вам с нуля получить весь набор необходимых навыков и в конечном счете устроиться на работу по новой специальности (стоимость курса составит всего $10.99  по промокоду MEDIUMNODE1723).

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

Перевела Журавлева Дарья.