Статьи

PHP против Node.js Smackdown: право на ответ

Перчатки сняты: армрестлинг редакторов

В недавнем выступлении SitePoint по PHP против Node.js Крэйг Баклер (Craig Buckler) сравнил эти дисциплины разработки друг с другом в серии из десяти испытаний, чтобы определить, кто из них победит.

Как отмечает Крэйг в статье, эти сравнения всегда несколько противоречивы. В качестве забавного продолжения мы попросили Бруно Шкворца (PHP-редактор SitePoint) и Джеймса Хиббарда (один из JavaScript-редакторов SitePoint) предоставить комментарий к каждому из раундов.

Вот их оценка за ударом…


Раунд 1: Начало работы

Задача первого раунда состояла в том, чтобы увидеть, как быстро вы можете создать веб-страницу «Hello World» на каждом языке. Это включает время, необходимое для настройки серверной среды.

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

Бруно:

PHP выигрывает в «начале работы» исключительно потому, что больше хостов облегчают начало работы. Это вопрос усыновления, а не чего-то еще. Если больше хостов обойдут необходимость использовать командную строку с Node и сразу перейдут к загрузке файлов и простой кнопке «перезагрузить приложение» на панели управления, они будут равны. Однако в PHP синтаксис отображения чего-либо на экране намного проще, особенно для новичков в программировании.

Джеймс:

При местном развитии я не вижу большой разницы между ними. Чтобы запустить PHP-скрипт в вашем браузере, вам нужно установить какой-нибудь серверный стек; чтобы запустить скрипт Node, вам нужно установить Node и предпочтительно веб-фреймворк, такой как express . Однако, как говорит Крейг, PHP концептуально проще. Барьер Node для входа выше. Там нет споров.

Раунд 2: Помощь и Поддержка

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

Бруно:

Бруно молчал об этом.

Джеймс:

Я согласен с этим. Node.js — более молодая технология, поэтому в настоящее время доступно меньше помощи. Это, однако, будет становиться все менее и менее важным по мере взросления Узла.

Раунд 3: Синтаксис языка

В третьем раунде сравнивалось, насколько легко понять и использовать синтаксис PHP и JavaScript. Крейг присудил этот раунд JavaScript.

Бруно:

Я категорически не согласен по этому вопросу. Хотя в PHP есть свои причуды, многие из них были исправлены в последнее время, и многие странности будут удалены в последнем выпуске. С другой стороны, есть это и это в мире JS.

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

Bullet 4 ( это понимание JS заставляет вас хотеть использовать его больше ) также является тем, с чем я не согласен. Работая с JS и PHP в течение многих лет, чем больше я работаю с JS, тем меньше мне это нравится — хотя это чисто личное предпочтение.

Джеймс:

Я люблю JavaScript. Я знаю, что у него есть свои причуды , и я знаю, что у него есть кое-какие ошибки , но ECMAScript 2015 исправит многое из этого, а также привнесет некоторые интересные новые функции в язык. JavaScript является одновременно мощным и гибким, и может приспосабливаться к различным стилям программирования. В отличие от PHP, мне нравится писать JavaScript. Узел заслужил это.

Раунд 4: Инструменты разработки

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

Бруно:

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

У npm также есть ужасные сообщения об ошибках, которые я люблю называть «дружественными к ядру и разработчикам» — в том смысле, что их могут понять только те, кто их написал. Наконец, npm не очень хорошо работает с Vagrant и фактически мешает вам правильно начать работу — не говоря уже о том, что они не обращают внимания на желания своих пользователей. Вот ошибка, которая была открыта в течение многих лет, что делает ее в основном непригодной для Windows — вряд ли тривиальная база пользователей. В PHP тоже есть свои глупые ошибки , но они не отталкивают целую ОС годами.

Да, Composer не связан с PHP, но я не думаю, что так должно быть. Такую услугу не следует оказывать менеджеру пакетов, который в буквальном смысле является отдельным приложением. Если кто-то когда-нибудь действительно станет хорошим менеджером пакетов для Node, то будет бюрократическим адом сменить его на текущий, не говоря уже о переходе людей. Кроме того, его установка — это буквально одна строка в терминале или загрузка установщика.

Утверждение, что Composer оказал меньшее влияние, совершенно неверно. Composer повлиял на всех новых разработчиков PHP, появившихся на борту поезда PHP, с момента его разработки, а также на большинство хороших разработчиков, которым пришлось добавить его в свой текущий рабочий процесс. То, что до появления Composer было много пользователей PHP, не означает, что его влияние меньше. С тех пор, как он был сделан, он оказал огромное влияние. Абсолютные заявления типа «оказал меньшее влияние в обществе» не должны делаться без фактической поддержки.

Я не могу спорить с тем фактом, что большинство разработчиков PHP установят Node в один момент, это правда. К сожалению, многие хорошие инструменты разрабатываются Node-first, но я надеюсь на среду разработки без Node благодаря таким проектам, как BowerPHP .

Джеймс:

Я рад, что этот пошел в Узел.

Я люблю нпм . Он прост в установке, прост в использовании, и тысячи пакетов доступны практически для любых нужд. Мне также нравится тот факт, что npm позволяет вам выбирать между глобальной и локальной установкой пакетов (в отличие от таких языков, как Ruby, где стандартные гемы устанавливаются вместе с версией Ruby). Инструменты также фантастические. Такие инструменты, как Bower и Grunt, занимают постоянное место в моем рабочем процессе и многократно увеличили мою производительность.

Также стоит упомянуть, что npm v3 находится в бета-версии . Это касается многих моментов, которые поднимает Бруно, таких как ошибка подхода вложенных node_modules.

Цитата всего привкуса:

Разработчики PHP, вероятно, захотят / должны установить Node.js в какой-то момент. Обратное не верно.

Раунд 5: Среда

В пятом раунде обсуждались возможности использования и развертывания технологий, а также какие платформы и экосистемы поддерживаются. Крэйг не говорил о своем вызове по этому поводу, но это похоже на мокрый парус для Node.

Бруно:

Крейг сказал, что он сравнит сильные стороны PHP и Node (общие проблемы веб-разработки), а затем говорит, что JS везде. Во-первых, мы сравниваем Node.js , а не сам JS. Во-вторых, мы сравниваем языки и среды, в которых они могут работать. Сказать, что обезьяна лучше рыбы, потому что рыбе не удалось залезть на дерево, просто глупо. Но и обезьяна, и рыба могут плавать, поэтому давайте сравним, насколько хорошо они это делают.

В среде веб-разработки PHP побеждает. В PHP есть инструменты для разработки десктопов — и да, правда, вы, вероятно, не будете их использовать. Но вы определенно будете использовать аспект командной строки PHP.

Джеймс:

Опять же, я согласен с Крейгом. Некоторые функции, делающие Node.js столь популярными (скорость, масштабируемость, близость к JSON, низкое использование ресурсов), также делают его подходящим для многих других приложений, например, для питания устройств IoT. Я имею в виду, кто не любит роботов ?

В Node также появились такие проекты, как NW.js (среда выполнения приложений, основанная на Chromium и Node.js), которая позволяет писать собственные приложения на HTML и JavaScript. Захватывающие времена!

Раунд 6: Интеграция

Раунд 6 рассматривал интеграцию с базами данных и драйверами, и PHP выигрывает, главным образом, из-за своего возраста.

Бруно:

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

Джеймс:

Не уверен, что я согласен с этим. Весь раунд выглядит нечетко сформулированным, и я бы надеялся на пример «старых, менее популярных технологий». Это также было бы хорошей возможностью подчеркнуть один из больших плюсов Node — то, что он говорит на JSON. JSON, вероятно, является наиболее важным форматом обмена данными в Интернете, а также языком общения для взаимодействия со многими новейшими базами данных NoSQL. JSON идеально подходит для использования программой JavaScript, а это означает, что при работе с Node данные могут аккуратно передаваться между слоями без необходимости переформатирования. Вы можете иметь один синтаксис от браузера к серверу к базе данных.

Раунд 7: Хостинг и Развертывание

В 7 раунде мы увидели, насколько легко развертывать новые приложения на живом веб-сервере, и, по мнению Крейга, PHP является явным победителем в этом отношении.

Бруно:

Опять же, Бруно молчит, не имея ничего добавить.

Джеймс:

Это одна из областей, где Node нужно наверстать упущенное. Каждая бюджетная веб-хостинговая компания предлагает пакет PHP с добавленным MySQL. Чтобы увидеть какой-то вывод, все, что вам нужно сделать, это создать файл с расширением .php и?>, загрузите файл и укажите в нем свой браузер. То же самое нельзя сказать о Узле. Есть, конечно, много вариантов для хостинга Node, но они неизменно требуют большего количества настроек и доступа к командной строке, что потенциально отталкивает новичков. PHP побеждает в этом раунде, без вопросов.

Раунд 8: Производительность

Раунд 8 сфокусирован на скорости; и, хотя это часто сводится к опыту и заботе команды разработчиков, Крейг отметил преимущества Node по ряду направлений.

Бруно:

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

  • PHP получает многопоточный встроенный сервер. Это позволило бы полностью обойти внешний сервер, но не рекомендуется (пока). Есть также супер быстрые серверы, такие как Nginx, которые делают весь процесс запуска PHP и делегирования запросов к нему незаметным.
  • Такие проекты, как HHVM и Appserver, добавляют мощные аспекты асинхронности и многопоточности к PHP, и сам PHP7 также получает некоторые мощные обновления в этом отделе.
  • Время жизни приложения PHP с одним запросом — самый большой вес лодыжки, да, если вы ищете грубую скорость; но это также можно легко обойти, не только с помощью Memcached и подобных решений, как заявляет Крейг, но и с помощью методов, подобных Ajax . Кстати, JS-приложения на стороне сервера по умолчанию тоже обрабатываются по одному запросу. Более того, это время жизни с одним запросом также является преимуществом, так как оно перестраивает приложение каждый раз, когда оно используется, тем самым избегая проблем с памятью, убирая мусор и оставаясь худым и чистым. Когда в последний раз вы использовали стабильное, продолжительное приложение JavaScript без утечек памяти, как на внутреннем, так и на внешнем интерфейсах?

Обсуждение производительности — и всегда будет ничьей. (Если вы не имеете дело с Java — тогда Java всегда проигрывает!;))

Джеймс:

Node рекламируется как среда выполнения, выбранная для высокопроизводительных приложений с низкой задержкой, и уже нашла свой путь в стеки кода нескольких компаний из списка Fortune 500. Благодаря неблокирующему механизму ввода-вывода и технологии движка Google Chrome V8 он стал синонимом слов «быстрый» и «масштабируемый». В Интернете много историй о том, как Node принес серьезный прирост производительности компаниям и способствовал повышению производительности труда разработчиков. Я рад видеть, что это идет к Узлу, но понимаю, что это спорный момент.

Раунд 9: Страсть программиста

В 9 раунде Крейг оценил восприятие страстью разработчиков к PHP и Node, и, по его оценке, Node выигрывает.

Бруно:

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

Кроме того, я бы сказал, что любопытно, что разработчики Node до сих пор не узнали, как работают номера версий (версия v0.12.5 на момент написания), даже после 6 лет разработки. Такая незрелость и отчаянная «осторожность в игре» (упс, вы использовали что-то нестабильное, ваша вина, что она сломала вашу компанию), в сочетании с критическими, но игнорируемыми древними ошибками, которые отталкивают пользовательские базы целых операционных систем, это то, что превратит любой серьезный разработчик вдали от экосистемы языка программирования.

Мне не нравится Node. Моя неприязнь основана на негативном опыте, в основном вращающемся вокруг нпм. Это может измениться в будущем, но сейчас я полон страха и отчаяния каждый раз, когда мне приходится использовать Node в любом качестве. У всех нас есть свои предпочтения, но важно оставаться объективными и выбирать правильный инструмент для работы. Но также важно признать, что иногда выбор правильного инструмента влечет за собой выбор неправильного в первую очередь, потому что вы просто еще не знаете . Так что не слушай Крейга. Не слушай Джима. Не слушай меня Попробуйте — посмотрите, что работает, выясните, что хорошо, и используйте это. В конечном счете, среда, которая заставляет вас чувствовать себя продуктивно и потрясающе, является лучшей, а не той, которая дает вам миллисекунду более короткое время загрузки.

Джеймс:

Узел горячий. В настоящее время в Nodeland происходит множество инноваций. Хотя страсть субъективна, я рад, что Node выиграл этот раунд.

Раунд 10: будущее

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

Бруно:

Бруно пришлось броситься писать еще несколько PHP и редактировать невероятные статьи о PHP для SitePoint .

Джеймс:

Джеймс тоже жаждал вернуться на свой любимый JavaScript-канал , но предложил следующие напутствия:

Ничья была хорошим результатом для этого раунда. Node — это восходящая звезда, но для того, чтобы сбросить PHP, понадобится нечто грандиозное.

Подводя итог, если ваш единственный инструмент — молоток, то каждая проблема выглядит как гвоздь. Узел не идеально подходит для каждого сценария, и действительно, есть много раз, когда имеет смысл не использовать его. Однако то, что Node делает хорошо, это делает очень хорошо. Это зависит от вас, чтобы сделать осознанный выбор и выбрать лучший инструмент для работы.


Итак, теперь, когда Бруно и Джеймс сказали свое слово, что ты хочешь сказать?