Node.js против PHP: эпическая битва за мысли разработчиков

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

Раньше партнерство было простым. JavaScript обрабатывал небольшие детали в браузере, в то время как PHP управлял всеми задачами на стороне сервера между портом 80 и MySQL. Это был счастливый союз, который продолжает поддерживать многие важные части Интернета. В WordPress, Drupal и Facebook люди вряд ли смогут хоть минуту просидеть в сети, не столкнувшись с PHP.

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

С тех пор, как это было сделано, JavaScript стал популярным. Разработчики Node.js теперь могут выбирать между постоянно расширяющейся коллекцией отличных фреймворков и каркасов: React, Vue, Express, Angular, Meteor и др. Список длинный, и самая большая проблема - выбрать между отличными вариантами.

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

Но ажиотаж исчезает, и программное обеспечение может жить десятилетиями. Большая часть базы кода PHP не собирается переноситься и продолжает обслуживать большие части текста, который мы читаем каждый день. По некоторым оценкам, 40 процентов просматриваемых страниц в той или иной форме начинаются с PHP. Частично это связано с тем, что PHP продолжает возрождаться. За последние несколько лет внутренности систем, работающих на PHP, были полностью переписаны. Это не тот PHP-код, с помощью которого был запущен веб-сайт ваших дедушек и бабушек.

Быстрый и своевременный компилятор PHP предоставляет ответы быстрее, чем когда-либо, благодаря тем же умным методам, которые привели к революции Node.js. Теперь PHP 7.2 и HHVM предлагают многие из тех же умных оптимизаций на лету, которые V8 привнес в Chrome и Node.js. Более того, в HHVM есть Hack, умный диалект PHP, который предлагает полную поддержку сложных функций программирования, таких как лямбды, обобщения и коллекции. Поэтому, если вам нужны эти функции, вам не нужно искать более полнофункциональный стек.

Конечно, финал еще не написан. На каждого программиста, кричащего о чистоте и молодости Node.js и простоте JavaScript повсюду, найдется другой, который доволен глубокой кодовой базой и давно понятой стабильностью PHP. Сможет ли старый тупица отбить выскочку на стороне сервера? Свергнет ли JavaScript своего старого друга, чтобы добиться мирового господства? Положите еще одну порцию попкорна в микроволновую печь и откиньтесь на спинку кресла.

Где побеждает PHP: смешивание кода с контентом

Вы печатаете, вкладываете мысли в текст для своего веб-сайта, и вы хотите добавить в процесс ветвь, небольшой оператор if-then, чтобы он выглядел красиво, скажем, в зависимости от какого-либо параметра в URL-адресе. Или, может быть, вы хотите смешать текст или данные из базы данных. С PHP вы открываете волшебные теги PHP и начинаете писать код в считанные секунды. Нет необходимости в шаблонах - все является шаблоном! Нет необходимости в дополнительных файлах или сложных архитектурах, только программируемые логистические возможности у вас под рукой.

Где Node побеждает: разделение проблем

Смешивание кода с контентом - это костыль, который может навредить вам. Конечно, забавно смешивать код с HTML в первые два или три раза. Но вскоре ваша кодовая база превращается в запутанную логику. Настоящие программисты добавляют структуру и отделяют косметический слой от логического. Новым программистам он понятнее и проще в обслуживании. Фреймворки, работающие на Node.js, созданы программистами, которые знают, что жизнь лучше, когда модель, представление и контроллер разделены.

Где побеждает PHP: глубокая база кода

Интернет наполнен кодом PHP. Самые популярные платформы для создания сайтов (WordPress, Drupal, Joomla) написаны на PHP. Не только платформы с открытым исходным кодом, но и большинство их плагинов. Код PHP есть повсюду, и он ждет, когда вы загрузите, измените и используете для своих нужд.

Где побеждает Node: более современные функции

Конечно, существуют тысячи отличных PHP-файлов с открытым исходным кодом, но некоторые из них представляют собой плагины WordPress 12-летней давности, которые надеются и молятся, чтобы кто-нибудь их загрузил. Для каждой современной версии Symfony есть пыльная, давно забытая библиотека, которую никто не обновляет.

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

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

Где побеждает PHP: простота (вроде)

В PHP нет ничего особенного: несколько переменных и базовых функций для манипулирования строками и числами. Это тонкий слой, который ничего не делает, кроме перемещения данных с порта 80 в базу данных и обратно. Вот что он должен делать. Современная база данных - это волшебный инструмент, и есть смысл переложить на него тяжелую работу. PHP - это подходящая степень сложности для работы, которая не должна быть сложной.

Опять же, если вы программист, который хочет больше, чем просто взаимодействовать с базой данных и форматировать результаты, теперь вы можете делать больше с PHP, не зажимая носа. HHVM Facebook добавляет поддержку Hack, полноценного языка, наполненного современными функциями, такими как аннотации типов, обобщения и лямбда-выражения. Использование этого ограничивает ваш код запуском только на HHVM, но это не самое худшее в мире. Это очень быстро.

Где Node побеждает: десятки языковых опций

Если пользователи PHP счастливы получить доступ к Hack, им следует подумать о переходе в мир Node.js, потому что многие основные языки могут быть скомпилированы для работы на JavaScript. Существуют хорошо известные варианты, такие как Java, C # или Lisp, и множество других, например Scala, OCaml и Haskell. Есть даже подарки для ностальгирующих любителей BASIC или Pascal. Этот список языков, которые компилируются в JavaScript от Джереми Ашкенаса, довольно обширен. К тому же двоюродные братья JavaScript, такие как TypeScript и CoffeeScript, предлагают несколько разные и улучшенные подходы к одной и той же игре.

В чем преимущество PHP: клиентское приложение не требуется

Все разговоры об использовании одного и того же языка в браузере и на сервере - это хорошо, но что, если вам не нужно использовать какой-либо язык в браузере? Что, если вы отправите данные в формате HTML? Что, если вы создаете спартанский, статический веб-сайт, чтобы предоставлять только то, что нужно, без интерактивного шика? Браузер открывает его, и нет никаких проблем или сбоев, вызванных пропусками потоков JavaScript, которые пытаются создать страницу в браузере из двух десятков вызовов веб-служб. Чистый HTML работает чаще, чем что-либо еще, и PHP оптимизирован для этого. Зачем использовать JavaScript в браузере? Создайте все на сервере и не перегружайте этот маленький браузер на маленьком телефоне.

Где Node выигрывает: служебные вызовы тоньше, чем HTML-толстые PHP-вызовы

Хотя в веб-приложениях HTML5 с безумным AJAX может быть слишком много движущихся частей, они крутые и очень эффективные. Как только код JavaScript находится в кеше браузера, единственное, что движется по проводам, - это новые данные. Там нет тонны разметки HTML, и нет повторных поездок для загрузки всей страницы. Только данные изменились. Если вы готовы потратить время на создание удобного веб-приложения на стороне браузера, вы получите большую выгоду. Node.js оптимизирован для доставки данных и только данных через веб-службы. Если ваше приложение сложное и содержит много данных, это хорошая основа для эффективной доставки.

Где побеждает PHP: SQL

PHP был создан для сосуществования с MySQL и его многочисленными вариантами, такими как MariaDB. Если MySQL не совсем правильный, есть и другие отличные базы данных SQL от Oracle и Microsoft. Ваш код может измениться с некоторыми изменениями ваших запросов. Огромный мир SQL не заканчивается на его границах. Некоторые из наиболее стабильных, хорошо разработанных кодов будут взаимодействовать с базой данных SQL, а это означает, что все эти возможности также могут быть легко интегрированы в проект PHP. Это может быть не одна идеальная счастливая семья, но она большая. Не только это, но и мир баз данных постепенно становится лучше, поскольку разработчики находят способы добавить в базу данных больше интеллекта, чтобы вам не нужно было так много работать.

Где Node.js выигрывает: JSON

Если вам необходим доступ к SQL, в Node.js есть библиотеки для этого. Но Node.js также использует JSON, лингва-франка для взаимодействия со многими новейшими базами данных NoSQL. Это не значит, что вы не можете получить библиотеки JSON для своего стека PHP, но есть что-то плавное в простоте работы с JSON при использовании JavaScript. Это один синтаксис от браузера к веб-серверу и базе данных. Двоеточие и фигурные скобки везде работают одинаково. Одно это спасет вас от многих часов разочарования.

Где побеждает PHP: скорость кодирования

Для большинства разработчиков написание PHP для веб-приложений кажется более быстрым: без компиляторов, без развертывания, без файлов JAR или препроцессоров - просто ваш любимый редактор и несколько файлов PHP в каталоге. Ваш опыт будет разным, но когда дело доходит до быстрой совместной работы над проектом, PHP - хороший инструмент.

Где Node.js выигрывает: скорость приложения

Написание кода JavaScript немного сложнее, когда вы считаете фигурные скобки и круглые скобки, но когда это будет сделано, ваш код Node.js может летать. Механизм обратного вызова великолепен, потому что избавляет вас от жонглирования потоками. Ядро хорошо продумано и спроектировано так, чтобы делать все это за вас. Разве не этого все хотят?

Где побеждает PHP: конкуренция

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

Где побеждает Node.js: солидарность

Вам действительно нужны две разные кодовые базы? Конечно, конкуренция помогает, но вскоре следует фрагментация. Что происходит, когда ваш код работает только на одном из двух? Конкуренция не принесет никакой пользы, если вам придется потратить недели или месяцы на переписывание кода. Хотя несколько лет назад Node.js пережил собственное раскол, с запуском io.js, вселенная Node.js с тех пор воссоединилась, придав ему языковую солидарность, к которой вскоре могут стремиться разработчики PHP.

Где побеждает PHP: базовые приложения

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

Реакцию на это безумие рококко можно найти в командах, создающих генераторы статических сайтов (463 на момент написания) и урезанных веб-страницах в формате AMP. PHP - естественный выбор для любой команды, которая хочет сконцентрировать интеллект на сервере, чтобы не перегружать клиента.

Где Node.js побеждает: богатство

Людвиг Мис ван дер Роэ, архитектор зданий, однажды сказал: «Лучше меньше, да лучше». Роберт Вентури, другой архитектор, подошел и возразил: «Меньше скучно». Смартфоны обладают большей мощностью, чем комната, полная компьютеров Cray. На настольных компьютерах есть видеокарты с несколькими вентиляторами, чтобы они охлаждались во время всей обработки. Почему мы должны избавиться от кода и жить как жертва эпохи депрессии из романа Стейнбека? Жить в кайф. Большие привлекательные веб-сайты, заполненные кодом JavaScript, привлекают внимание, впечатляют и, прежде всего, забавны. Конечно, неприлично тратить такую ​​большую пропускную способность на несколько бит данных, но пропускная способность никогда не была дешевле. Живи немного!

Где выигрывают оба: Без головы

Слово «безголовый» относится к PHP-коду, запущенному на сервере. Недавно некоторые из ведущих PHP-приложений, таких как Drupal, заглянули через проход и были поражены сложными пользовательскими интерфейсами, созданными с помощью фреймворков JavaScript, таких как React, Angular или Vue. Вместо того, чтобы пытаться конкурировать с ними, они отказываются от контроля над клиентом и сосредотачиваются на том, чтобы хорошо работать с серверной частью на сервере.

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

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

Где выигрывают оба: микросервисы и бессерверные

Растущие микросервисы или бессерверные парадигмы предлагают способ для кода JavaScript и PHP сосуществовать с сервером и уживаться. Оба решения разделяют работу на десятки более мелких сервисов или функций, которые могут работать независимо и оставаться в своих рамках. Некоторые части, обычно более старые и наиболее стабильные разделы приложения, могут запускать PHP. Остальные части, часто более новые, будут написаны на Node.js. Язык POSTили GETможет быть lingua franca, который их всех объединяет.