PHP и Node.js

PHP и Node.js

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

Прежде чем перейти к обсуждению наиболее важных различий между PHP и Node.js, давайте сначала кратко рассмотрим обе технологии.

PHP vs Node.js

Что такое PHP

Созданный Расмусом Лердорфом, PHP дебютировал где-то в 1994 году. Первоначально PHP означал персональную домашнюю страницу (Personal Home Page), но теперь это рекурсивный бэкроним "PHP: гипертекстовый препроцессор" (PHP: Hypertext Preprocessor). Этот серверный язык с открытым исходным кодом разработан специально для создания динамических веб-страниц.

В отличие от других популярных языков программирования, PHP развивался без письменной формальной спецификации до 2014 года. Первоначальная реализация языка PHP действовала как стандарт де-факто до того момента.

Хотя PHP является языком сценариев на стороне сервера, его также можно использовать для других целей. Скрипты PHP имеют расширение .php и содержат комбинацию CSS, HTML, JavaScript и даже обычного текста. На данный момент PHP является одним из ведущих языков программирования в веб-разработке.

Facebook и Wikipedia разработаны на PHP.

Что такое Node.js

Разработанный Райаном Далем, Node.js впервые был представлен широкой публике в мае 2009 года. С появлением Node.js стало возможным создавать чистые js-приложения, которые могут работать вне среды веб-браузера.

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

Файлы Node.js имеют расширение .js и содержат чистый код JavaScript.

LinkedIn и PayPal – приверженцы Node.js

PHP против Node.js – давайте сравним

Давайте для начала разберёмся за что отвечает JavaScript и за что отвечают языки бекэнда, такие, как PHP. JavaScript отвечает за работу в браузере – манипуляции элементами страницы. У JavaScript есть ограничения: он не может создавать файлы, управлять браузером, манипулировать папками и файлами. В то же время любой язык бэкенда может делать огромное количество вещей, которые не может делать JavaScript: работа с Базами Данных разных типов, создание и инициализация сокетов, работа с файловой системой и т.д. Т.е. языки бэкенда – такие универсальные языки программирования, заточенные под web (и не только под web, Python, к примеру, более универсален). Node.js является относительно новым языком бэкенда и уже показал свою работоспособность и эффективность. В чем же отличия?

Стеки разработки

PHP в основном используется как часть стека LAMP (Linux, Apache HTTP Server, MySQL и PHP). При написании внутреннего кода на PHP разработчик часто переключается между разными языками программирования. Теоретически переключение между различными средами и языками программирования должно способствовать снижению эффективности при написании кода, но многим это абсолютно не мешает. Кроме того, есть такая вещь, как шаблонизаторы.

Node.js обычно использует стек MEAN ( MongoDB , Express.js, AngularJS и Node.js) или MERN (MongoDB, Express.js, React и Node.js). Единственное знание языка программирования, необходимое для использования всего стека – это JavaScript. И синтаксис JavaScript позволяет сохранить преемственность при переходе с фронтенда, что, в общем, облегчает задачу новичкам.

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

Базы данных

Чаще всего PHP используется с традиционными реляционными базами данных, такими как MariaDB, MySQL и PostgreSQL. Для Node.js, как правило, тенденция смещается в сторону использования баз данных NoSQL, таких как MongoDB.

Что в этом случае следует принять во внимание.  Конечно, легкость освоения MongoDB делает её весьма привлекательной (можно пихать что угодно, с любой структурой, не заморачиваясь), тогда как для корректной работы с MySQL необходимо и важно знать теорию баз данных. Конкретнее: как работют базы данных, как строить БД, для чего ключи, как распределять данные... Поэтому легкость Mongo здесь как бы палка о двух концах: сделали что-либо на Mongo - всё отлично, всё работает, но если вдруг по какой-то причине понадобится перейти на MySQL, а у вас полный хаос, то...

Скорость работы

Оба быстрые. "Node.js быстрее PHP" – чушь несусветная. Когда говорят, что Node.js быстрый, нужно уточнять понятие быстроты: быстрый на каких-то синтетических тестах на какой-то операции. Поэтому результаты так называемых тестов весьма условны и, кроме того, некоторые тесты на последних версиях PHP намного опережают Node.js в скорости.

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

Инструменты разработчика

Обе технологии имеют хороший выбор редакторов, интегрированных сред разработки, отладчиков, валидаторов и других инструментов. С одинаковой +/- скоростью, производительностью и похожими проблемами при их обновлении ))

Почему-то некоторые считают, что npm (Node Package Manager) – это стандартный менеджер пакетов (инструмент управления модулями и зависимостями), автоматически устанавливающийся вместе с Node.js – лучше, чем composer (менеджер пакетов для PHP). Не вижу никаких причин, чтобы утверждать подобное – оба этих инструмента удобны и прекрасно работают.

Фреймворки

В PHP огромное количество очень мощных фреймворков, которые позволяют решать очень серьёзные задачи. Для Node.js тоже разработаны и продолжают разрабатываться фреймворки, позволяющие облегчать и ускорять разработку. Но для PHP их гораздо больше, в силу того, что сам PHP появился раньше.

Синхронность и асинхронность

Есть два типа программного кода:

Синхронный: код выполняется построчно. Следующая строка кода выполняется только после завершения выполнения предыдущей строки кода

Асинхронный: весь код выполняется одновременно

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

С другой стороны, код Node.js выполняется асинхронно. Это означает, что движок JS выполняет сразу весь код, и нет необходимости ждать, пока функция успешно завершит выполнение. Следовательно, Node.js может быть очень быстрым по сравнению с PHP. Но здесь важно одно "но": очень часто этим преимуществом либо не пользуются, либо пользуются очень плохо. Кроме этого, в асинхронном коде есть одна загвоздка: программа может застрять в аду обратного вызова, если нужно связать много функций. Есть, конечно, способ решения этой проблемы. Функция async/await в Node.js позволяет блоку кода выполняться, как если это был бы синхронный код. Но тогда теряются преимущества Node.js перед PHP. Поэтому сказать, что асинхронность – это 100-процентное преимущество Node.js перед PHP, будет не совсем корректно. Тем не менее, данная особенность сама по себе открывает очень большие возможности.