PHP VS Node.js: что лучше для бизнеса
Автор статьи – разработчик с шестилетним опытом работы, а также совладелец двух стартапов. Автор умеет в разработку на PHP и Node.js, знаком с такими технологиями как WordPress, Laravel, Doctrine, Express, Sequelize.
Забежим вперед и скажем сразу: в статье нет однозначного ответа какой из представленных языков программирования лучше. Данная статья вообще не про техническое сравнение. Цель данного материала помочь предпринимателю определиться с выбором конкретной технологии, дабы бизнес не пострадал. Поэтому, мы рассмотрим все с коммерческой стороны (но с техническим обоснованием).
Что такое Node.js
Node.js – это серверная реализация языка программирования JavaScript (не путать с Java). Грубо говоря, это тот же JavaScript, только теперь его еще можно использовать за пределами браузера.
Вообще, когда клиенту в СНГ предлагаешь сайт на Node.js он начинает много гуглить, потому что либо ничего об этом не слышал, либо слышал, но что-то плохое (и то только от других программистов). Почему так происходит? Во-первых, данная технология среди обывателей (малого бизнеса) в России и СНГ мало кому известна (как Python и Django), скорее всего, потому что сам Node.js появился в 2009 году, а популярность начал обретать после 2014, поэтому достойной информации в СНГ сегменте интернета о нем мало. Во-вторых, можно часто встретить негативные высказывания, но они все абсолютно пустые для нас: вся ненависть по отношению к данному языку идет от других программистов, ну вот сущность у людей такая, сложно многим новое воспринимать.
Просто, посмотрите на следующую статистику. JavaScript (помним, Node.js этот тот же JavaScript) в данный момент самый популярный язык программирования в мире
Это статистика с популярного среди разработчиков сайта Stack Overflow. Да, статистика за 2017 год, но пока мало что поменялось, вот еще ссылка на статистику за 2020 год. Как видите, популярность JavaScript растет, а вот PHP потерял две позиции. Так что мнение людей в интернете сильно отличается от фактов из реальной жизни. И да, чуть позже Вы поймете почему так происходит.
Что такое PHP
PHP – это серверный язык программирования, в отличии от JavaScript может работать только на сервере.
Язык появился в 1994 году ради одной цели – создавать сайты, ну и в 2020 году цель не изменилась. В отличии от Node.js, который создавался для широкого применения, PHP создан для разработки сайтов и веб-приложений. Даже аббревиатура языка PHP – Personal Home Page (персональная домашняя страница) о много нам говорит.
Обычно, чем старше технология, тем хуже для IT бизнеса. Старые технологии имеют свойства умирать из-за неактуальности или терять популярность, а все это ведет к удорожанию стоимости работы программистов. Со временем появляются более удобные инструменты для решение тех или иных задач, которые (чаще всего) дешевле предыдущих. Так, в 2000-х годах PHP сместил Perl с пьедестала языка для разработки сайтов, так сейчас Node.js начал заходить на территорию PHP и Ruby и забирать себе все больше аудитории.
С PHP происходит примерно тоже самое что с Perl и Ruby, но говорить о его смерти глупо и признак необразованности. Хотя потеря популярности на лицо: о языке все меньше говорят на различных конференциях, в интернете и других массмедиа. Сейчас уже выросло целое поколение программистов, которые не знакомы с PHP, но занимаются веб-разработкой. Несколько лет PHP был хедлайнером среди разработки веб-сайтов, а сейчас многие IT-компании начинают от него отказываться.
Как разрабатывают сайты
Даже если “реально” знаете, все равно прочтите чтобы не терять мысль автора. Так Вы начнете понимать откуда растут ноги у проблем с популярностью PHP, и почему в сторону Node.js идет необоснованная критика.
Немного истории
В году 2000 сайты делались очень просто: HTML, CSS и PHP. JavaScript существовал, но его мало кто использовал. Язык был создан для оживления веб-страниц через создание анимаций и внедрения различных интерактивных элементов. На тот момент мало кто его использовал, потому что язык был противоречивый: от браузера к браузеру одни и те же языковые конструкции работали по разному (или вообще не работали), плюс для анимаций была технология Flash.
Но все изменили Google, IT-компании и Райан Даль. Во-первых, Google убил Flash. Да, они сделали это только в 2021 году, но процесс был запущен уже в 2017 и все веб-разработчики понимали что пора переходить на JavaScript. Во-вторых, Google приложили руку к созданию браузера Chromium на базе которого, позже, будет работать более 70% всех современных браузеров: Яндекс Браузер, Google Chrome, Edge, Uran, Vivaldi, Opera. Из-за того что все браузеры работают на едином ядре, проблемы с языком JavaScript начали исчезать и появились новые фишки. Ну и в-третьих, родился Node.js. Райан Даль создал Node.js на базе движка JavaScript V8 от компании Google.
Из-за всех вышеперечисленных вещей JavaScript плотно вошел в мир веб-разработки. Благодаря новым возможностям JavaScript, маркетологи и дизайнеры начали эпоху современного веба где интерактив стоит на первом месте. Раньше сайт постоянно “загружался” на каждое действие пользователя будь то заход на другую страницу или отправка формы обратной связи. Сейчас это нонсенс и дурной тон, сегодня в моде отзывчивый интерфейс без лишних загрузок (например Ozon, Netflix).
Сегодняшнее время
Современные сайты и веб-приложения состоят из микросервисов и смеси различных технологий. Обычный сайт в 2021 году состоит из JavaScript (всегда, ведь это единственный браузерный язык программирования) и любого другого серверного языка: PHP, C#, Python, Node.js (JavaScript), Java, C++, выбирайте любой.
На сервере Вы можете использовать любой язык программирования, но вот для фронтенда (браузера, то, что видит пользователь) выбор не велик (только JavaScript). Да, технически можно сделать сайт без JavaScript, но тогда даже добавление товара в корзину будет перегружать сайт, поэтому логически можно сказать что без JavaScript сегодня нельзя сделать сайт (если это не визитка одностраничник без административной панели).
Из-за того что JavaScript плотно въелся в современную разработку, многим бекенд (PHP, Java, C#) программистам приходится с ним сталкиваться все чаще и чаще. Как Вы знаете, многие люди не любят инновации, проще ведь сидеть в своей зоне комфорта. Поэтому, вместо того, чтобы учить язык, его просто поливают грязью. Но вот незадача, язык-то с каждым годом становится все популярней, а потом еще и Node.js появился, теперь JavaScript посмел залезть в их “святую святых” – на сервера. Многие оказались не готовы.
Все популярное всегда встречает волну сопротивления, которая рано или поздно изживет себя, это закономерность. Интересный факт, даже ядро популярной CMS WordPress почти на 20% состоит из JavaScript:
Чтобы никто не обвинял нас в подмене понятий, сразу сообщим, что это не серверный JavaScript (Node.js), это браузерный код, но через этот пример мы хотим показать насколько JavaScript плотно засел везде где только можно.
Среди некоторых IT-предпринимателей ходит такое мнение, пусть оно и кажется натянутым, но имеет место быть: если в современных реалиях, при создании чего-то сложнее калькулятора, все равно придется писать на JavaScript, почему бизнес должен нанимать программиста, знающего PHP и JavaScript (или даже двух), если можно взять одного знающего только JavaScript? Последний вариант всегда будет дешевле и здесь нет смысла спорить.
И да, бизнес реально создает спрос на такие вещи. Нам, как разработчикам, такое высказывание кажется забавным (это очень доступная концепция, которая легко ложится в голову), но в нем есть доля истины, ведь единая техническая архитектура (в виде общего языка программирования) дает массу плюсов: более простое горизонтальное масштабирование и обслуживание проекта.
PHP VS Node.js
Теперь, когда Вы познакомились со всей экосистемой вокруг данных технологий, переходим к коммерческому сравнению.
CMS
Если не знаете, что такое CMS, прочитайте эту статью. Если лень переходить по ссылке, кратко опишем термин ниже.
CMS – это система управления контентом, дабы любой человек без знаний программирования мог управлять некоторым содержимым сайта: создавать товары, редактировать страницы.
Для PHP существует много разных и готовых CMS: Bitrix, WordPress, OpenCart. Все они помогают сократить расходы при разработке типового решения. Например, если хотите сделать обычный корпоративный сайт – выбираете WordPress, там внутри есть почти все для ведения блога и создания обычных страниц. Если хотите интернет-магазин, то выбирайте между Bitrix и OpenCart в зависимости от размера и Ваших амбиций (Bitrix более типовой, OpenCart гибкий для разработки).
У Node.js нет настолько известных и популярных CMS, на ум приходит лишь парочка: Keystone и Strapi. Keystone больше фреймворк (инструмент), нежели CMS. С помощью Keystone можно создать свою CMS под какую-либо задачу. У нее нет четкой концепции, как OpenCart – интернет-магазин, WordPress – блог. А Strapi – это WordPress в мире Node.js, удобный инструмент для создания информационных ресурсов.
Если у Вас ограниченный бюджет и на руках задача создать максимально типовой проект, то выбор падает на PHP с его популярными инструментами WordPress, Bitrix, OpenCart. Для всех этих CMS существуют готовые темы и плагины, поэтому разработка будет вестись быстро и дешевле чем на Node.js.
Если у Вас уникальный дизайн (значит готовые темы не учитываем) и хочется информационных сайт, то можно повыбирать между WordPress (PHP) и Strapi (Node.js). Окончательный выбор поможет сделать понимание какой сайт Вы хотите: классический или реактивный интерфейс?
Реактивный интерфейс
Реактивный интерфейс – это когда для отрисовки страницы браузер не перегружает сайт полностью, а лишь конкретный компонент. Это современный подход, позволяющий создавать самые быстрые сайты. Пример реактивного сайта мы уже показывали, но если хотите увидеть еще примеры, то ознакомьтесь с Netflix, Ozon, YouTube, Dodo Pizza, VK. Реактивный интерфейс создается только лишь с помощью языка программирования JavaScript.
У данного подхода в разработке есть один подводный камень: сайты, сделанные с помощью JavaScript, плохо индексируются поисковой системой. Но выход есть – достаточно разрабатывать сайт учитывая технологию SSR
Наша популярная статья про SSR для тех, кому будет мало.
SSR, Server Side Rendering, технология, которая позволяет заранее отрисовать сайт на сервере и отдать в браузер пользователя по запросу (как делает это PHP). Это позволяет наладить SEO продвижение и делает и сайт еще быстрее.
Технология SSR работает только в Node.js, поэтому создать реактивный сайт с SSR без Node.js невозможно.
Поэтому, из следующего делаем вывод: если нам требуется реактивный сайт и нужен SSR, то выбор падает на Node.js. Если SSR не важен, но есть ограниченный бюджет, то снова выбираем Node.js (делать все на одной технологии дешевле). Сам по себе SSR не сильно увеличивает стоимость проекта, ибо существует масса готовых решений для этого – Nuxt, Next и все это можно вместе объединить с вышеописанным Strapi CMS.
Если уж сильно хочется реактивный сайт с бэкендом на PHP, и SSR, то предлагаем смотреть в сторону headless CMS (следующий абзац). Главное понимайте, что это вариант дорогой, ибо уже придется кодить как на PHP, так и на Node.js.
Headless CMS
Headless CMS – это обычная CMS, но только у которой нет внешней части сайта, фронтенд разделен от бекенда. Грубо говоря, это лишь административная панель, которая хранит в себе какую-то информацию.
Иными словами, Вы можете развернуть на поддомене свой Bitrix, OpenCart, WordPress сайт. В привычном состоянии работать с ним и обслуживать, но второй сайт (наш реактивный на Node.js) будет “питаться” данными от первого сайта. В итоге, Вы получили модный реактивный сайт с административной панелью от WordPress.
К слову, многие крупные компании таким способом мигрировали на реактивные интерфейсы. Они до сих пор используют свои первые сайты, которые валяются на поддоменах типо api.site.ru или wordpress.site.ru, зайти на них просто так нельзя, но вот общение между Node.js сайтом и старым PHP сайтом реализовано.
Фреймворки и разработка нетипичных решений
Фреймворк – это инструмент для более быстрой разработки чего либо с нуля. Более подробней можно почитать тут.
К разработке на фреймворках прибегают в нескольких случаях: проблема с безопасностью; необходимо контролировать как можно больше протекающих на сайте процессов ради оптимизации; готовые CMS имеют изъяны, которые могут себя неадекватно проявить при высокой нагрузке.
У PHP и Node.js существует огромное количество инструментов. У PHP есть Laravel, у Node.js есть Nuxt и Next, у PHP есть Doctrine, у Node.js есть Sequelize. Этот, для многих непонятный, набор слов находится тут лишь чтобы сказать, что все, что делается на PHP, можно так же сделать и на Node.js.
Вообще, из-за того что JavaScript в целом куда более популярней PHP, за последнии годы вокруг него появилось куча готовых инструментов подходящих для разработки нетипичных решений (от криптовалюты, до мобильных приложений). Но вот инструментов для созданий простых сайтов (аля CMS) до сих пор не так много, тут преимущество больше на стороне PHP. Но если представить (в вакууме), что в инструментах они оба равны, можно было бы сказать “здесь разницы нет”, но вот только она есть, и кроется она в следующем абзаце.
Производительность и работа в highload
В начале статьи мы Вам рассказали полноценную историю двух языков программирования, и все ради этого момента. Почему же Node.js за каких-то 10 лет стала таким популярным инструментом? Вот пока Вы читали, в голове такая мысль не появилась? А все дело в деньгах, ведь Node.js позволяет экономить деньги за счет эффективной обработки пользовательских запросов. Если все происходит намного эффективней, значит нужны сервера поменьше и дата центры скромнее. А значит и затрат на персонал и электричество меньше.
Секрет производительности прост, и он кроется в самом корне языка программирования. Но сначала обсудим как это все работает в PHP. Многие слышали о том, что на PHP можно делать высоконагруженные сервисы. Мол посмотрите на Facebook* и VK, они ведь работают на PHP. Да, они работают на PHP, только вот у них свои собственные версии этого языка.
А вот теперь внимание. Когда человек заходит на сайт, сделанном на PHP, платформа выделяет на пользователя поток. Поток – это условная операция, в которой разбирается запрос, происходит связь с базой данных и всякие страшные вещи с файлами (при условии созданий сессий). Естественно, 4 пользователя – это 4 потока. Если потоков много (много людей на сайте), то ядра сервера не успевают все обрабатывать и переключаться между потоками, что очень плохо влияет на производительность (возникает потоковое голодание).
И все это стандартный PHP, тот самый который стоит у Вас на сервере. Тот самый, на котором программисты будут делать сайт. Ни VK, ни Facebook* не отдадут свои версии PHP и не выложат полную копию своего сервера в открытый доступ для всех желающих. Это их разработка и только для них.
По словами VK, они используют kPHP, его ядро лежит в открытом доступе, и данный язык многим похож на PHP, но все равно отличается от оного из-за части урезанных функций в угоду производительности.
Node.js, в отличии от многих серверных языков, предоставляет сразу (без каких-то настроек) платформе набор потоков, которыми сам и распоряжается. Их всегда фиксированное число, и поэтому процессор не может войти в потоковое голодание как в случае с обычным PHP. Именно по этой причине Netflix, PayPal, Twitter, Uber, LinkedIn, NACA, Trello перешли на Node.js.
Если заинтересовались технической частью, и хотите более детальней ознакомиться c материалом, то вот литература: Libuv – сердце Node.js, Even Loop in Node.js. Весь материал на английском языке.
Справедливости ради (снова повторим) можно попытаться заставить PHP работать как Node.js: для этого существуют определенные расширения, которые устанавливаются на сервере, например, PHP UV, но вот незадача… это не из коробки. А все, что не из коробки, надо устанавливать, а значит, надо кому-то платить. Да и одно дело рыться в ядре PHP или делать сайты на WordPress. Уровень программистов диаметрально противоположный, и для этой задачи нужен неплохо-таки разбирающийся в матчасти технарь (который попросит хорошо ему платить).
Именно поэтому, в нише кастомной разработки выгодней выбирать Node.js. Абсолютно такой же набор инструментов как у PHP, только с более высокой производительностью без танцев с бубном. Поэтому, имея желание сделать мессенджер (для него же нужен сервер), крупный интернет-магазин с большим количеством данных и подключений, или просто API для любого мобильного приложения, то рассмотрите Node.js.
Сложность обслуживания и стоимость программистов
Если брать рынок Восточной Европы и США, то там проще найти в проект программиста на Node.js (или Python), нежели на PHP. В России дела обстоят по другому, из-за того что рынок сайтов для малого бизнеса здесь пока что состоит на 90% из PHP. Хотя, исходя из личного опыта автора, недостатка ни в тех, ни в других тут не наблюдается, если знать где искать.
Неопытному предпринимателю кажется, что найти PHP программиста намного легче, но это потому что производить хантинг нужно в соответствующих местах. Помним, Node.js молодой язык, его учат молодые ребята 20-25 лет, поэтому искать надо в тематических телеграмм каналах или VK. Из-за того, что среди молодых программистов PHP теряет популярность, выросло целое поколение не знающих его, а для уже существующих программистов наступает “золотой век” – ведь цена на их услуги будет расти в будущем.
Сегодня, найти опытного программиста на PHP для решения простых бытовых задач (и за недорого) очень легко, но если мы говорим про нишу кастомной разработки (много с нуля писать), то такой специалист стоит куда больше типичного формошлепа на Битрикс или WordPress. Куда проще найти JavaScript программиста, который привык много писать самостоятельно, и стоить он будет чуть дороже бутерброда. Это все из-за того, что язык нашел свою нишу в среде разработки “с нуля” (потому что он отлично подходит под быстрое прототипирование систем), поэтому за несколько лет внутри его инфраструктуры скопилось огромное количество готового кода именно под эти задачи. А еще, на рынке JavaScript много молодых разработчиков, много желающих поработать, значит, можно демпинговать стоимость их услуг в аутсорсе.
У JavaScript есть интересная штука – NPM. Если кратко, это открытое хранилище кода, куда любой разработчик может отправить свои наработки в виде готового плагина (чем-то похоже на WordPress плагины, но устанавливаются чуть сложней). В данный момент это самое крупное хранилище, которое содержит более 380 тысяч готовых решений. Это в разы больше чем у PHP и Python.
Из всего вышесказанного можно сделать вывод: если нужно много писать кода (кастомная разработка), то лучше смотреть в сторону Node.js. Для малого бизнеса все куда проще, есть PHP с кучей готового функционала под любой тип задачи связанной с CMS.
Итог
Надеемся, сегодня Вы узнали что-то новое для себя. Рекомендуем закрыть статью, а завтра почитать снова на свежую голову, чтобы более хорошо усвоить информацию и сделать необходимые выводы, ибо объем материала получился отнюдь не маленький.
Автор же придерживается следующего мнения: если проект простой, типовой, наподобие обычного корпоративного сайта или локального интернет-магазина, то смотрите в сторону PHP и его популярных инструментов: WordPress, Bitrix, OpenCart. Если Вы собираетесь делать высоконагруженный проект с большим количеством параллельных операций, посещений или хотите сделать API для мобильного приложения, то смотрите сторону Node.js и его популярных инструментов: Express, Sequelize. Ну и если хотите реактивный сайт, то тоже смотрите в сторону Node.js и Strapi CMS.
Статья писалась 9 часов, материал собирался 2 дня. Поэтому, если все понравилось, подумайте добрым словом об авторе, ему будет приятно.
*Организация Meta, а также её продукт Facebook, на который мы ссылаемся в этой статье, признаны экстремистскими на территории РФ.
Оставьте комментарий