Это перевод статьи Крэга Баклера (Craig Buckler) «SitePoint Smackdown: PHP vs Node.js» и судейских решений Бруно Шкворца и Джеймса Хиббарда (Bruno Skvorc, James Hibbard) статьи Крэга Баклера.

От переводчика


Существует много статей на эту тему, с качественными характеристическими анализами и прогнозами производительности. Однако, мне все же хотелось найти такую статью, где профессиональные программисты делятся своими мнениями и пытаются что-то подсказать, предостеречь новичка, который только изучает PHP или NodeJS (cерверный JavaScript). Многие не любят PHP и говорят, что PHP создан, чтобы умирать (да, там есть сборщик мусора, который убивает наши переменные после выполнения скрипта, а не потому что его забросил Расмус Лердорф), однако, что теперь не учить PHP совсем, в то время как на нем работает 80% сайтов в интернете. Поэтому, если мы хотим быть профессионалами и пытаться хоть как-то расширить свой кругозор, нам нужно четко разделять задачи PHP и задачи NodeJS, а не сливать все в кучу.

«10 раундов боксеров разных весовых категорий»


Одним прекрасным днем Крэг Баклэр (Craig Buckler) на сайте SitePoint.com опубликловал сравнительный анализ PHP и NodeJS под названием «10 раундов», чтобы определить кто является абсолютным чемпионом. Однако, в это же время он отметил, что такой анализ является несколько спорным. Поэтому, для некоторого развлечения, он пригласил двух судей, которые внесли бы свою лепту в этот боксерский поединок. Он попросил Бруно Шкворца (Bruno Skvorc, редактор колонки PHP на сайте SitePoint.com) и Джеймса Хиббарда (James Hibbard, редактор колонки JavaScript на сайте SitePoint.com) прокомментировать каждый из раундов, удар за ударом — оценка.

Введение


Web-программирование стремительно развивается, и перед back-end разработчиками встает вопрос выбора между устоявшимися тяжеловесами Java, C, Perl и современными веб-ориентированными языками, такими как, Ruby, Clojure, Go. Ваш выбор имеет огромное значение, накладывая свой отпечаток на работу приложения.

Но какой сделать выбор для веб-разработки?

Не хочеться затевать холивар, но все же мы будем сегодня говорить о PHP и NodeJS:

  • PHP — был создан в 1994 году Расмусом Лердфордом (Rasmus Lerdorf). Он создал программную оболочку (интерпретатор), которая устанавливается в качестве модуля для веб-сервера Apache или Nginx. Изначально разрабатывался как препроцессор гипертекстовых страниц, поэтому PHP может быть легко интегрирован в HTML код, однако, такой подход сейчас не является хорошей практикой, но все же для новичков такой подход был очевиден. Это способствовало популярности языка, поэтому 80% сайтов в интернете написаны на PHP, они же, в частности, работают под управлением WordPress CMS (20% сайтов в интернете).
  • Node.js — был создан в 2009 году Райаном Далем (Ryan Dahl). Он создал программную платформу, основанную на JavaScript движке V8 от Google. Необычно то, что платформа имеет встроенные библиотеки для обработки запросов и ответов, тем самым вам не нужно использовать сторонний веб-сервер и какие-либо другие зависимости. Node.js набирает обороты и он используется такими компаниями, как Microsoft, Yahoo, LinkedIn и PayPal.

Почему не говорим о C#, Java, Ruby, Python, Perl, Erlang, C++, Go, Dart, Scala, Haskell, и других?


Стали бы вы читать статью обо всем и вся, вам нужна энциклопедия? Поэтому мы огранили и сужили круг до двух знаменитых потому, что:

1. PHP и Node.js веб-ориентированны, у обоих открытый исходных код, они направлены, исключительно, на веб-разработку
2. PHP давний язык, однако, Node.js в нашем случае является выскочкой, который набирает обороты по популярности, поэтому php-разработчику стоит задаться вопросом. А стоит ли менять технологию?
3. Многие разработчики программируют с далеких 90х на PHP и JavaScript и переходить на другие языки программирования не все хотят, ибо не отдают им должное.

Правила


Боксер в правом углу — PHP, боксер в левом — Node.js. Абсолютным победителем будет та технология, которая победит по количеству раундов.

Первый раунд: быстрый старт


В этом раунде мы определяем, как быстро мы можем написать «Hello, world» страницу на том или ином языке программирования, в это время мы включаем время потраченное на настройку сервера.

Подготавливаем среду:



1) Как быстро вы можете построить «Hello World» веб-страницу на PHP:

<?php
	echo 'Hello World!';
?>

Этот код может быть написан где угодно, как правило, код пишут в файлах, оканчивающихся на расширение .php. Если вы написали этот код в файле index.php и запустили на локальном сервере через порт 8000 (на своем компьютере, а не на реальном хостинге), то его отображение будет доступно по адресу:

http://localhost:8000
.
Однако, используя готовый интерпретатор PHP со встроенным сервером довольно ненадежное занятие. Лучше использовать готовые решения, сборки Apache — XAMPP или виртуальные OS (Vagrant). Кстати, свой файл вы сможете загрузить на любой хостинг интернета.

2) Установить платформу Node.js проще простого, если вы работаете на unix-подобных системах, вы сможете это сделать и при помощи менеджеров пакетов. Давайте создадим страницу index.js:

const http = require('http');
const hostname = 'localhost';
const port = 8000;

http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello World\n');
}).listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

Мы повторили аналогичные действия, код на JavaScript, как правило, пишут в файлах, оканчивающихся на расширение .js. Если вы написали этот код в файле index.js и запустили на локальном сервере через порт 8000 (на своем компьютере, а не на реальном хостинге), то его отображение также будет доступно по адресу (при условии, что php теперь работает на другом порту):

http://localhost:8000

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

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

Оценка судей — PHP 1:0 Node.js


  • Бруно: PHP выигрывает из-за низкого порога вхождения. Тут скорее вопрос восприятия. На экране они отображаются одинаково и существенного отличия у них нет. Фактически синтаксис гораздо проще для новичков программирования.
  • Джеймс: При разработке на локальной машине, я не вижу разницы между ними. Чтобы запустить скрипт в браузере, вам необходимо иметь веб-сервер и терминал. Чтобы на Node.js делать что-то серьезное, нужно устанавливать дополнительные модули, например, express (фреймворк для веб-приложений). Однако, концептуально PHP — проще.

Второй раунд: помощь и поддержка


На самом деле вы никуда не уедете на своих знаниях без изучения каких-либо курсов, современных практик, чтобы развиваться, вам нужно задавать вопросы на форумах, таких как — StackOverflow. PHP выигрывает этот раунд легко, он имеет большое руководство на сайте php.net и двадцать лет частовстречаемых вопросов. Что бы вы ни делали, кто-то сталкивался с этой проблемой и пытался ее решить за вас.

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

Оценка судей — PHP 2:0 Node.js


  • Бруно: промолчал
  • Джеймс: Я согласен. Node.js более молодая технология, поэтому сейчас с поддержкой и документацией хуже. Эта проблема, однако, становится всё менее и менее серьёзной по мере взросления Node.

Третий раунд: синтаксис языка


В отличие от некоторых языков и фреймворков, PHP не заставит вас работать определенным образом, и растет вместе с вами. Вы можете писать свои маленькие программы на простых функциях PHP4, и они будут отличаться своей красотой от MVC PHP 5+. Однако в таком случае, ваш код может быть хаотичным, вы начнете писать лучший код только с пониманием некоторых вещей.

Синтаксис PHP изменялся с выходом новых версий, из-за чего была проведена работа по обратной совместимости. Вы можете легко перенести код с PHP4 на PHP5. Однако, в следствии такого подхода, в PHP образовался беспорядок (каша).

Например, как вы подсчитать количество символов в строке?

— count()? str_len()? strlen()? mb_strlen()?

Вы найдете в документации для этого несколько функции, но на самом деле, все просто. Вообще, в PHP много функций, которые работают одинаково, попробуйте написать несколько строк кода, не посоветовавшись с наставником.

<?php
        $str = 'Hello world'; 
	$size_1 = count($str);
	$size_2 = strlen($str); // верная функция

	$len = [$size_1, $size_2];
	print_r($len);
?>

C JavaScript все иначе:

    var len = ('Hello world').length; 
    console.log(len);

Мы видим, что JavaScript в тоже время является сравнительно четкий, имея несколько основных тенденций. Его объектно-прототипная модель привлекает разработчиков, и кажется, что синтаксис довольно легкий, но это не так. Вы найдете критику о математических ошибках (0,1 + 0,2 != 0,3) и динамической типизации ('4' + 2 == '42' and '4' — 2 == 2). Но эти ситуации редко вызывают проблемы, и все языки имеют особенности.

PHP имеет множество преимуществ, однако Node.js выигрывает по некоторым причинам:

1. JavaScript кажется самым непонятным языком в мире, но как только вы улавливаете его концепцию, остальные языки становятся громоздкими по сравнению с ним.
2. JavaScript выглядит минимальнее, чем PHP, вам не нужно бороться с тем же UTF-8.
3. Full-stack разработчики могут писать код на JavaScript как на стороне клиента, так и на стороне сервера. Вам больше не нужно переключаться между технологиями.
4. Изучая JavaScript, вам хочется больше и чаще писать на этом языке, про PHP такого нельзя сказать.

Оценка судей — PHP 2:1 Node.js


  • Бруно: Я категорически не согласен с этой точкой. Хотя PHP имеет свои особенности, многие из них были исправлены в последнее время, и многие странности удалены в новейших версиях. С другой стороны, точно такое же есть и в мире JS. Что касаемо серверной части, то тут я тоже не согласен. Клиентская сторона и серверная это разные вещи, и вам в любом случае, придется переключать свой мозг, на сервере такой же свой синтаксис, если мы пишем на Node.js, ежели мы пишем JavaScript-код для браузера. Поработав с JS и PHP, в свое время, первое мне нравится меньше и меньше, хотя это чисто личные предпочтения.
  • Джеймс: Я люблю JavaScript. Я знаю, она имеет свои причуды, и я знаю, что есть несколько подводных камней, но ECMAScript 2015 года исправляет многое, а добавляя интересные новые функции в язык. JavaScript является одновременно мощным и гибким, и может вместить много различных стилей программирования. В отличие от PHP, я люблю писать на JavaScript. Node.js выигрывает в этом раунде.


Четвертый раунд: инструменты разработчика


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

У PHP есть свой менеджер пакетов, разработанный под влиянием npm — Composer. Однако, ежели npm встроен по умолчанию, тот composer придется встраивать самостоятельно. Благодяря npm широкое распространение получили Gulp, Grunt — системы сборки front-end проектов.

Оценка судей — PHP 2:2 Node.js


  • Бруно: В то время как composer был первоначально вдохновлен npm, то теперь он даже лучше, чем npm. Composer не повредить вашу систему, если вы хотите установить две версии одной и того же библиотеки, в отличие от npm. Также в отличие от npm, composer может установить рекурсивные зависимости, в то время как npm просто не можете сделать. Npm также имеет совершенно ужасные сообщения об ошибках, которые называются «дружественными». Наконец, npm не особо работает с Vagrant, и тем самым препятствует вам начать работу должным образом, не говоря уже о том, что они не обращают внимания на желания своих пользователей. Присутствовала ошибка, которая была открыта в течение многих лет, из-за чего пользователям это было не пригодно на Windows — вряд ли это маленькая пользовательская база. PHP имеет свою долю ошибок, конечно, тоже глупых, но те не отталкивали целые ОС в течение многих лет.
  • Джеймс: Я люблю npm. Его легко использовать, и есть тысячи пакетов, доступные для почти любой необходимости. Мне также нравится тот факт, что npm позволяет выбрать между глобальной и локальной установки пакетов (в отличие от таких языков, как Ruby, где это стандарт для ваших драгоценных камней). Такие инструменты, как bower и grunt имеют постоянное место в моей работе, и увеличили мою производительность во много раз.


Пятый раунд: среда


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

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

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

Оценка судей — PHP 2:3 Node.js


  • Бруно: Ну, во-первых, мы сравниваем PHP с Node.js, а не PHP с JS. Во-вторых, мы сравниваем языки и среды, где они могут работать. Сказать, что обезьяна лучше, чем рыба, потому что рыбе не удалось подняться на дерево — это просто глупо. Но и обезьяны, и рыба может плавать, так что давайте сравнивать, насколько хорошо они это делают.
  • Джеймс: Несколько особенностей, которые делают Node.js так популярны (скорость, масштабируемость, совместимость с JSON, низкое использование ресурсов), позволяют использовать его для многих других видов применения, например, питающих разработке микроконтроллеров (IoT). Я имею в виду, кто не любит роботов?


Шестой раунд: интеграция


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

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

Оценка судей — PHP 3:4 Node.js


  • Бруно: Тут я дам ничью. PHP имеет возрастное преимущество, давая ему больше возможностей, но и тут можно было пострадать, от некоторых устаревших интегрированных вещей, например, расширение MySQL, от которого, наконец, сумели избавиться в PHP7.
  • Джеймс: Не уверен, что я согласен с этим. Я бы надеялся на примере «старых, менее популярных в технологии вещами». Один из главных плюсов Node.js — он понимает JSON. JSON является, вероятно, самым важным форматом обмена данных в Интернете, или взаимодействия с NoSQL базами данных. Когда вы работаете с Node.js, данные могут поступать аккуратно слоями без необходимости переформатирования. Вы имеете один синтаксис при общении с базой данных.

Седьмой раунд: хостинг и развертывание


Как легко разворачиваются новенький приложения на настоящем веб-сервере? Тут еще одна чистая победа PHP. Любой хостинг интернета поддерживает PHP. Вы можете получить MySQL базу данных по выгодной цене. Тут PHP значительно проще песочницы (локального сервера) и вы будете точно уведомлены, какие PHP расширения отключены, а какие нет.

Node.js совсем другой зверь, и он может работать на стороне сервера постоянно, без разрыва связи. Для этого, вам придется искать специализированные хостинги. Вам потребуется виртуальное облако (VDS/VPS, серверная среда, с полным доступом). К сожалению, такое могут себе позволить не все хостеры, поэтому и цены будут соответствующие.

Оценка судей — PHP 4:4 Node.js


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

Восьмой раунд: производительность


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

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

2. Быстрый интерпретатор
Node.js меньше и проворнее, чем РНР. Это связано с наследием Google, который сделал огромный вклад в производительность JavaScript движка — V8.

3. Приложения работают постоянно
РНР выполняет обычную клиент-серверную модель. Каждый запрос страницы инициирует приложение, загрузка параметров подключения к базе данных, извлечение информации и отображения HTML-кода. В Node.js приложение постоянно работает и его нужно инициализировать только один раз. Например, можно создать один объект подключения к базе данных, которая используется повторно при новом запросе. Правда, есть способы, реализации такого поведения и на PHP с использованием специальных систем, таких как memcached, но это не стандартная функция языка.

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

Хоть Node.js приложения заметно быстрее, чем PHP тут есть и свои подводные камни.

Node.js / JavaScript работает в одном потоке, а большинство веб-серверов многопоточные и обрабатывают запросы параллельно. Написание асинхронного кода является сложным и несет свои собственные проблемы.

Оценка судей — PHP 4:5 Node.js


  • Бруно: Заблуждения предостаточно. Во-первых, обсуждения производительности спорные. Любой прирост производительности зависят исключительно от опыта разработчиков и типа приложения. Но даже если это сообщение не является убедительным, вот некоторые из моих собственных аргументов: PHP вполне работает с многопоточным встроенным веб-сервером, это позволяет не использовать внешний сервер полностью, но это не рекомендуется (пока что). Есть также супер быстрые серверы, такие как Nginx, которые делают весь процесс запуска PHP и делегирования запросов к нему незаметными. Такие проекты, как HHVM и Appserver добавляют мощные асинхронные и многопоточные аспекты, сам PHP7 с обновлением версии станет намного мощнее прежнего. Да php приложение получает только статику, и живет всего лишь один раз в запрос, однако и это можно обойти: memcached, ajax. Серверные JS приложения работают в одном запросе по умолчанию. PHP же нужно постоянно делать запросы к странице, чтобы обновить ее, но более того — жизнь одного запроса является только преимуществом, так как мы делаем запрос снова на PHP, наше приложение восстанавливается (каждый раз при запросе), когда оно используется, тем самым мы избегаем проблемы с памятью, очисткой мусора.
  • Джеймс: Node.js распространяется как платформа с высокой производительностью, низкой латентности приложений. Благодаря неблокирующему механизму ввода / вывода и технологии Google Chrome V8, Node.js стал синонимом слов «быстрый» и «масштабируемый». Есть многочисленные истории о том, как Node.js принес серьезные прирост производительности в компании и произвел повышение производительности самих разработчика. Я рад такому, но опять же, это спорный момент.


Девятый раунд: страсть программирования


Это немного сложно сравнивать, но относительно немногие разработчики PHP увлечены самим языком. Когда в последний раз вы читали статью по PHP или смотрели презентацию, которая пленила публику? Возможно, все, что было сказано? Может быть, есть менее увлекательным? Может быть, вы не смотрите в нужных местах? Есть некоторые интересные особенности, которые появились совсем недавно, например, появление — PHP7, но все же эта технология топталась в течение нескольких лет. Это сказалось на самом языке, многие разработчики стали ругать PHP.

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

Оценка судей — PHP 4:6 Node.js


  • Бруно: Вы, безусловно, смотрите не в тех местах. PHP-сообщество невероятно страстное и очень активно. Есть более 20 крупных конференций в год, а некоторые удивительные темы получают свои обсуждения. Появиление HHVM и PHP7 тоже дает о себе знать. Кроме того, я хотел бы сказать, что это интересно, когда видишь, что разработчики Node.js по-прежнему не научились менять номера версий (версия v0.12.5 на момент написания статьи), даже после 6 лет развития. Многие незрелости, в сочетании с критическими, но игнорируемыми старыми ошибками, могут отталкивать целые операционных систем, все это является то, что серьезный разработчик будет думать дважды. Мне не нравится Node.js. Моz неприязнь основывается на негативном опыте в основном при работе с npm. Возможно все измениться в будущем, но сейчас, я полон страха и отчаяния, когда мне предстоит еще раз использовать Node.js. У всех нас есть свои предпочтения, но важно, чтобы все это оставалось объективным, нам нужно выбирать правильный инструмент для своей работы. Также важно признать, что иногда выбор правильного инструмента влечет за собой неправильный выбор другого. Не слушайте никого. Попробуйте сами — посмотрите, что работает, выясните, что вы чувствуете. В конечном счете, именно то, что вы делаете заставляет вас чувствовать себя продуктивным и это является лучшим выбором, а не тот выбор, который дает вам миллисекунды дополнительного прироста.
  • Джеймс: В сообществе Node.js очень жарко. Существует много открытий в Node.js-мире. Несмотря на то, моя страсть является субъективной, я рад, что Node.js выиграл этот раунд.

Деcятый раунд: будущее


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

Оценка судей — PHP 5:7 Node.js


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

Абсолютный победитель


Окончательный счет 5:7 в пользу Node.js. Node.js имеет крутую кривую обучения и не является идеальным для начинающих разработчиков, но он все же выигрывает. Просто. Если вы грамотный JavaScript-программист, который любит свой язык, Node.js не разочарует вас. Вы почувствуете себя свежее и получите освободительный опыт веб-разработки. Но не стоит сбрасывать PHP со счетов. PHP жив, и есть мало оснований ставить подножку PHP, из-за того, что это выглядит модным. PHP проще изучить, вы сможете овладеть профессиональными приемы программирования, главное практика. PHP очень легко развернуть на сервере. Даже упертые Node.js-разработчики должны использовать PHP для простых сайтов и приложений.

Мой совет: оценить варианты и выбрать язык, основанный на ваших требованиях. Это гораздо более практично, чем полагаться на «за и против»!

Комментарии (105)


  1. bromzh
    16.12.2015 13:04
    +24

    <?php
    	echo 'Hello World!';
    ?>
    


    const http = require('http');
    const hostname = 'localhost';
    const port = 8000;
    
    http.createServer((req, res) => {
      res.writeHead(200, { 'Content-Type': 'text/plain' });
      res.end('Hello World\n');
    }).listen(port, hostname, () => {
      console.log(`Server running at http://${hostname}:${port}/`);
    });
    


    Это как бы совсем разные вещи. Чтобы пхп-код отобразил hello world в браузере, нужно поднять и настроить сервер. А просто скормить этот код интерпретатору, то сообщение выведется в STDOUT. Так что аналогичный код на js — console.log('Hello world');.

    А вот приведённый код на js запускает сервер, слушающий 8000-й и выводящий строку в ответ на запрос. Причём сервер асинхронный.

    Даже упертые Node.js-разработчики должны использовать PHP для простых сайтов и приложений.

    Ну прям обязаны.

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

    2016 уже. VDS-ки дешёвые. Shared-хостинги уже отживают своё.

    А вообще — очередная ненужная холиварная статья с субъективными мнениями.


    1. apelsyn
      16.12.2015 13:12
      +8

      Hello world на PHP тоже выглядит проще

      Hello world!
      


    1. Fesor
      16.12.2015 13:22
      +9

      нужно поднять и настроить сервер


      php -S localhost:8000 .
      


      1. bromzh
        16.12.2015 13:55
        +3

        Это да, сейчас почти на любом языке можно 1-й командой поднять сервер даже с CGI. Но всё равно, способы выполнения кода разные.
        В случае пхп наш сервер — внешнее приложение, исполняющее пхп-код и перенаправляющий STDOUT в тело ответа (ну в простом случае, который в статье).
        В случае JS мы программно создаём сервер с неблокирующим IO, можем им управлять и т.д.


        1. Fesor
          16.12.2015 14:17
          +2

          В случае JS мы программно создаём сервер с неблокирующим IO, можем им управлять и т.д.


          Конечно, именно так. И именно по этой причине PHP проще. По умолчанию у PHP абсолютно тупая схема работы, и это позволяет очень быстро поднимать сервисы, удобно и быстро их скейлить а когда количество серваков уже дороже работы программиста, применять решения типа php-pm (не умирающий PHP, не путать с php-fpm) и т.д. для ускорения критических частей системы, при чем вообще не переписывая «синхронный» код. Так же есть проекты типа amphp, которые привносят асинхронщину на корутинах в PHP, что удобно.

          То есть PHP очень простой и очень хорошо скейлится. Для задач где мне придется точно работать с большими потоками данных (именно потоками данных а не сложной логикой) я скорее всего буду смотреть в сторону ноды с его простым ивент лупом или же в сторону go/erlang.

          мы программно создаём сервер с неблокирующим IO

          В Go http сервер часть стандартной библиотеки. Означает ли это что go проще чем nodejs в плане написания helloworld? нам же не надо ничего ставить для этого.


          1. bromzh
            16.12.2015 14:58

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


            1. SerafimArts
              16.12.2015 15:19

              Эм, а поконкретнее? Если в случае пыха всё довольно очевидно — абсолютно любое серверное I\O приложение, то в случае ноды я затрудняюсь с ответом, что бы «не пересекать» области применения.


              1. Fesor
                16.12.2015 16:10

                PHP плохо подходит (пока что) для обработки потоков данных, nodejs в этом плане лучше (event loop из коробки, вся стандартная библиотека не блокирует поток выполнения и все такое).

                То есть чатики писать удобнее на ноде, а сложную бизнес логику с возможностью скейлиться быстро + дешево — PHP. Подходы которые одинаково хороши как для ноды и как для PHP требуют немного другого уровня знаний от разработчиков (вроде cqrs, event sourcing) и тут стоимость решений и риски будут примерно одинаковые, но нода будет выигрывать по производительности из коробки.


                1. SerafimArts
                  16.12.2015 16:34
                  +2

                  По-моему это слишком «бородатые» факты (ну кроме локов стримов), что бы брать на веру. Надо тестить, т.к. php 7 + react в стеке на продакшене буквально перевернули мои взгляды на «умирание пыха».

                  Так что лично я нынче засомневался во всём, что касается вроде бы очевидных вещей, с которыми согласился бы раньше без раздумий.


                  1. Fesor
                    16.12.2015 19:03

                    т.к. php 7 + react в стеке на продакшене буквально перевернули мои взгляды на «умирание пыха».


                    Я говорю про «из коробки» и «удобство». PHP7 + amphp более чем норм для потоковой обработки данных, НО он все же медленнее jS и у него вся стандартная библиотека синхронная. Проект amphp развивается, через годик такими темпами уже будет ништяк все, но все же повторюсь. Для всего этого и что бы все было ништяк — надо брать дорогих разработчиков. И профит слегка теряется.


    1. kotomyava
      16.12.2015 21:32
      +2

      2016 уже. VDS-ки дешёвые. Shared-хостинги уже отживают своё.

      Вот только все разработчики и пользователи продуктов не стали, пока, поголовно системными администраторами.
      Предлагаете плодить массы не настроенных, и не поддерживаемых нормально vps? Что ж, ботнетоводы и прочие злоумышленники будут рады.


      1. bromzh
        16.12.2015 21:57

        А зачем пользователям продуктов хостинги вообще? Если они пользователи, то подпускать к серверам их не стоит.
        Да и все ли shared-хостинги настроены нормально? В их внутренности вы не сможете заглянуть. Вы уверены, что их админят знающие и адекватные люди? Приходится надеяться на неизвестных вам людей.
        А в случае VDS можно хотя бы нанять кого-то на аудит.


        1. kotomyava
          16.12.2015 23:19
          +1

          А зачем пользователям продуктов хостинги вообще?

          А кем являются все те люди, которые пользуются хостингом? Они являются пользователями того или иного продукта, например того же wordpress, установив его и ведя в нём блог.

          Да и все ли shared-хостинги настроены нормально?

          Нет, я даже на опыте знаю, что и близко не все, но это всё равно куда лучше чем всем их пользователям переехать на VPS.

          А в случае VDS можно хотя бы нанять кого-то на аудит.

          В случае VDS, абсолютному большинству, не можно, а нужно нанять того, кто его нормально настроит, а потом будет приглядывать за ним.
          Ещё раздобыть место для бекапов и.т.п. Т.е. это уже совсем не так бюджетно, как кажется на первый взгляд.

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


  1. apelsyn
    16.12.2015 13:10
    -1

    Я предлагаю сделать Вам голосовалку, я бы проголосовал за NodeJS


  1. Blumfontein
    16.12.2015 13:15
    +22

    Сравнение фреймворков нулевое, сравнение библиотек нулевое. Опять хелловорлдами меряемся?


    1. Fesor
      16.12.2015 13:26

      PHP — можно делать по DDD с красивым ООП (потому что красивая функциональщина в PHP не выйдет), JavaScript — можно делать красивую функциональщину. Отсюда имеем как минимум совершенно разные сферы применения. И все. Отсюда у нас есть ограничения по фреймворкам и их слабые/сильные стороны.

      Проблема — мало кто делает в PHP DDD с красивым ООП и уж тем более мало кто делает в JS красивую функциональщину.


    1. achekalin
      16.12.2015 18:27
      +1

      Страстью! :)

      P.S. По такому же критерию давайте ДВС и реактивные движки сравнивать. Ага, по страстности конструкторов )


  1. DexterHD
    16.12.2015 13:23
    +11

    Какая то субъективная оценка (Особенно в части пунктов о будущем технологий, о производительности и инструментах разработки).

    Достаточно вспомнить что Ruby в общем и RoR в частности тоже взлетел очень быстро и был окрещен «убийцей php и прочих „говноязыков“», а потом как то сдулся и занял свою узкую нишу стартапов.

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

    Пишут на бедной ноде сейчас все кому не лень и все что попало. Количество говнокода перевалило больше чем его было в том же PHP за все время. Слава богу в ракеты и авиационные системы до сих пор не встроили… И всегда у таких разработчиков один аргумент «Зачем мне учить С++ я и на node могу десктопное приложение написать». «Зачем мне учить ObjC я и на ноде могу под iOS написать». Увы но качество этого ПО ниже плинтуса в 90% случаях.

    IMHO порог входа у node.js с нуля (не переучиваясь с PHP или Java) на порядок ниже чем в PHP. Сам язык проще на порядок.


    1. SerafimArts
      16.12.2015 15:14
      +2

      JS намного сложнее, по-моему, если учитывать его структуру — прототипы, прото, километры подводных камней в типах и контекстах. Пых же имеет совершенно квадратную архитектуру языка, обвешан огромным апи на все случаи жизни и не имеет вообще проблем с типами (кроме разве что каста строки к массиву) и объектной структурой.

      JS кажется проще потому что там функция на все случаи жизни, а манки-патчинг позволяет творить всё что угодно с чем угодно. Задача на js решается всегда «в лоб», на пыхе зачастую проходится весь путь от интерфейсов и адаптеров до самой бизнес-логики. Т.е. пых в текущих его ипостасиях больше походит на джаву или шарп с их километровыми абстракциями и полиморфизмом из-за чего и кажется сложнее.


      1. DexterHD
        16.12.2015 15:21
        +6

        JS намного сложнее, по-моему, если учитывать его структуру — прототипы, прото, километры подводных камней в типах и контекстах.

        Это вы назвали те архитектурыне решения что в JS называют «фичами», а в PHP «Говняная архитектура говняного языка». :D

        Я рассматриваю с точки зрения синтаксиса языка и языковых конструкций которые повзоляют упростить решение тех или иных задач.
        С этой точки зрения на мой опять таки личный взгляд JS проще. Не надо парится надо абcтракциями, паттернами, не надо вообще не о чем думать, садишься и решаешь как вы заметили задачу «в лоб» попутно борясь с «фичами». Если не знать вообще об абстракциях, ООП, архитектуре и т.п. и изучать JS как первый язык то все будет достаточно просто.


        1. SerafimArts
          16.12.2015 15:37
          +2

          Так на пыхе тоже так же можно, «в лоб», но это, как вы выразились называется «Говняная архитектура говняного языка». Так писали раньше, когда 5.2 был в моде (хотя и это не факт).

          Я постарался просто объективно оценить «сложность языка для полного его осмысливания», а не ту ступень, на которой находятся популярные пакеты в npm\composer. Потому что если оценивать именно уровень «как начать писать, что бы никто потом не убил за говнокод», то тут JS однозначный лидер, согласен.


      1. SerafimArts
        16.12.2015 17:02
        +2

        Просьба пояснить что не так в моём высказывании (за что минусы), т.к. если расшифровывать моё высказывание, получается следующее.

        Объектная модель:

        В php:
        — Примитив (int, string, array, null, bool, resource)
        — Класс (интерфейсы и трейты тоже классы внутри языка)
        — Объект класса

        В js:
        — Функция
        — Объект от функции (в т.ч. null, который объект вообще без прототипа, т.е. без производной от функции)
        — Прототип объекта (поле у функции)
        — Прото объекта (поле __proto__)
        — Примитивный объект (объект с symbol методом primitive value в ES'15)
        — Примитив (только undefined)

        По поводу способа решения задач — можно открыть ссылки на гитхаб на любую популярную библиотеку\фрейм, из выдающихся на js могу отметить разве что Aurelia, в остальных, даже Angular на TypeScript — сделано всё высокосвязным и «в лоб» или минимальной абстракцией.

        Я честно, не понимаю, подправьте пожалуйста что не так.


    1. slavent77
      25.12.2015 18:10

      Судя по вашим комментариям ко многим постам у вас какая-то обида на фронтенд-разработчиков. Или вы просто им завидуете. Если вы думаете, что фронтенд — это писать формочки и прелоадеры, то вы явно что-то упускаете.


      1. DexterHD
        25.12.2015 18:45

        Судя по вашим комментариям ко многим постам у вас какая-то обида на фронтенд-разработчиков.

        Нету ни какой обиды, Я программирую уже больше 10 лет и за это время был и фронт и бэк и сайты и прикладные нативные приложения и промышленные контроллеры и мобильные приложения, мне просто есть с чем сравнивать. Я писал и на JS и на PHP и на C# и на Java и на Ruby и на Node.js и под системы Metso DNA и Siemens-S7 и я до сих пор уверен что место JS в браузере. Ну еще в области простеньких микросервисов если говорить о node.js


  1. uSide
    16.12.2015 13:25
    +3

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

    5 баксов за digitalocean — дорого? Или вы мечтаете про бесплатные хостинги?


    1. medved6216
      16.12.2015 14:09

      5$ по нынешнему курсу — это не так дорого, но дешевле брать у отечественного поставщика. Рубль не стабилен сейчас. Поэтому брать в долларах для проекта, который пока не имеет инвесторов — абсолютно не выгодно.


      1. uSide
        16.12.2015 15:10
        +1

        тогда шах и мат — aws 1 year free ;)
        тем более, они подняли фришный уровень и дают по факту 2 машины по 1гб оперативки


        1. medved6216
          16.12.2015 16:50

          Это отлично, с этого и надо начинать ;)


    1. ZoomLS
      16.12.2015 18:12

      Вот, тоже заметил этот момент. Сервера уже давно копейки стоят. Некоторые хостеры совсем обнаглели, там цены выше чем за VPS/VDS. Т.е. в некоторых случаяx, сервер даже дешевле будет.


      1. zapimir
        16.12.2015 20:58

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


        1. Fesor
          16.12.2015 21:14

          Да, есть такое. Администратирование стоит денег. С другой стороны проекты где это администратирование нужно — не влезут на шаред хостинги. Проблема в основном в базовой настройке (порты позакрывать, права настроить)


          1. zapimir
            16.12.2015 22:40

            Проблема в основном в базовой настройке (порты позакрывать, права настроить)

            Ну не скажите. Вот к примеру у одного из клиентов ломанули Joomla и начали массово рассылать спам, причем с такой интенсивностью, что очередь на отправку была больше миллиона писем (тупо место закончилось). Там даже проблема было почистить этот каталог штатными средствами всё очень тупило. И что вы предлагаете новичку делать?


    1. Nookie-Grey
      16.12.2015 19:30

      именно! Бесплатные! А как же студенты и опен сорс? Да и просто поиграться или показать кому-то, платить по 5$ в месяц?
      На php бесплатных хостингов море!


      1. Fesor
        16.12.2015 20:46

        А как же студенты и опен сорс?


        github pages покрывает 70% нужд опенсурса, остальные 30% — тут есть варианты. Да и студенты не такой бедный народ что бы небыло 5-ти баксов. А даже если нет — опенсурс же, найдется кто-то у кого есть сервачек за пазухой если сильно надо.


      1. estum
        18.12.2015 00:14
        -1

        Раньше студенты как-то догадывались собрать дома из говна и палок сервак, «допиздиться» с местным провайдером о выделенных IP и обратных зонах, после чего хостить на нем всякую никому не нужную хрень, получая за это лишнюю копеечку.


    1. zapimir
      16.12.2015 20:57
      -1

      Вы забыли, что с VPS, как минимум нужно разбираться больше, чем с хостингом. У многих начинающих проблема, с тем как залить что-то на хостинг по FTP, а вы хотите чтобы они подняли ноду на vps.


      1. bromzh
        16.12.2015 21:15
        +3

        Ну без знания азов администрирования UNIX нет смысла заниматься такой разработкой.
        Для ознакомления вполне подойдёт убунта в качестве ОС. Программ в репе много, все идут с хорошими конфигами. Нода на vps в режиме «поиграться» поднимается парой команд.


        1. zapimir
          16.12.2015 22:44

          Для «поиграться» ноду и на винду можно поставить. Речь о том, чтобы хоть какой-то хомпейдж сделать.


          1. bromzh
            16.12.2015 23:01

            Для хомпейджа достаточно тех же нескольких команд. А юниксы надо хоть немного знать, так как на 90% VDS будет именно он.
            В конце концов, это, например, не какая-нибудь платёжная система, где всё должно быть энтерпрайзно и секьюрно.


            1. kotomyava
              16.12.2015 23:27
              +1

              Если у вас есть свой сервер, виртуальный или нет не важно, у вас должно быть всё секюрно. Чтобы не слить домен в блеклисты при релее спама, например. Или не слить огромную сумму за ресурсы в облаке, которые потратили за вас… А если не повезёт можно и на что-то более криминальное нарваться.
              Многие этого не понимают, и многих из них это и не коснётся в итоге, но вероятность попасть отнюдь не нулевая.


      1. Fesor
        16.12.2015 21:16

        сначала пусть поднимут ее в вагранте на виртуалке. Потом потренеруются. Потом пусть поучатся, коль уж решили заниматься еще и администратированием а не приглашать специалиста… Ну вы меня поняли.


        1. VolCh
          17.12.2015 20:41

          Шаред хостинг и есть в какой-то мере «приглашать специалистов».


  1. DexterHD
    16.12.2015 13:32
    +2

    И самое забавное если почитать комментарии судей, то Бруно в основном выдает объективные суждения и где то даже молчит или уступает,
    а Джейсм в основном только и делаеть что расхваливает ноду :/


    1. jrip
      16.12.2015 13:51
      +3

      Потому что Бруно скорее всего в целом насрать.
      Он знает на каких задачах его язык не очень, и вместо того чтобы горлопанить, как этот переделаный версталь, тихо учит Scala :D


  1. jrip
    16.12.2015 13:40
    +10

    Лол. Как же забавляют почитатели ноды, что постоянно пишут какие-то левые сравнения что лучше и что хуже.
    Потушите уже пукан и пишите код.


    1. zapimir
      16.12.2015 21:02

      Причем обязательно пишут с интригой, типа сначала нода проигрывает, а потом догоняет и вырывается вперед :)
      Ну, а всякие параметры типа страсть и будущее — вообще смешно. Сколько уже этих убийц PHP было, где убийца Wordpress на ноде?


      1. m0sk1t
        17.12.2015 11:52
        -1

        Альтернатива Wordpress http://tovolt.com/. Как говорится «coming soon...» =)


        1. zapimir
          17.12.2015 12:42
          +1

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


        1. SerafimArts
          17.12.2015 15:43
          +4

          Очередная альтернатива, которая забудется через неделю. Про ghost ведь уже забыли? Который был первым блоговым движком на ноде ;)


  1. TedBeer
    16.12.2015 13:52
    +7

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

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


  1. maxru
    16.12.2015 14:35
    +7

    Подробный мануал «как устроить холивар из пустого места».


  1. ionicman
    16.12.2015 14:45
    -1

    — Милая, нам нужно серьезно поговорить…
    — Наконец-то повзрослел! Давай!
    — Как ты думаешь, кто сильнее, акула или медведь?

    Очередное сравнение несравнимого. Все это — лишь инструменты. Определенным задачам — определенные инструменты.


    1. poxu
      16.12.2015 15:40
      +1

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


      1. ionicman
        16.12.2015 16:06
        -2

        ИМХО:

        Если Вам надо написать быстро сайт из 2-3 страниц — я бы не стал его писать на Node.
        Не потому, что этого сделать нельзя, а потому что не целесообразно.

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

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

        Если мне надо написать высоконагруженное API для какого-то сервиса, я бы не стал его писать на PHP, а выбрал Node или, вообще, Go.
        Не потому, а просто потому, что удобней, стабильней и проще.

        И еще вдогонку на «подумать» — если у меня штат PHP-программистов, я бы не стал писать вторые две задачи на Node, как и не стал бы писать первые две на PHP, если бы у меня был штат NodeJS-ников.

        Надеюсь, понятно.

        P.S. Микроскопом вполне неплохо забиваются гвозди, если приноровиться. Но это не повод.
        Всегда есть инструмент который более подходит для одних конкретных задач и менее для других.


        1. ionicman
          16.12.2015 16:14

          Забыл дописать в P.S.:
          Всегда есть инструмент который более подходит для одних конкретных задач и менее для других. Но это не в коем случае не говорит о том, что данный, подходящий инструмент круче другого, не подходящего. Они просто разные. Ибо очень много гиков любят восхвалять то, что модно или на чем они пишут, принижая все остальное. Это не программисты — это гики, ибо программисты пользуются языками как мастер — инструментом. Нужный для нужной задачи. И не пишут статьи «Молоток vs Отвертка».


          1. poxu
            16.12.2015 17:59

            Вы начали с того, что сравнивать php и node некорректно, потому что каждой задаче нужно подыскивать свои инструменты, раскрыли свою мысль утверждением, что отличия инструментов в том, что кадров по php на рынке в разы больше и они дешевле, а закончили проведением аналогии между сравнением php с node и молотка с отвёрткой.

            Любая аналогия врёт, но ваша врёт особенно нагло. Основная функция молотка — забивать гвозди, основная функция отвёртки — закручивать шурупы. Нельзя заменить отвёртку молотком и молоток отвёрткой. Основная функция php и node — изготовление бекенда с веб-сайтам. Они прекрасно заменимы и без особых проблем справляются с одним и тем же множеством задач.

            Вы говорите, что это два разных инструмента, но описанные вами задачи одинаково хорошо решаются что php что node. И сравнивать их по критерию удобства решения таких задач не только можно, но и нужно.


            1. ionicman
              16.12.2015 18:08

              Инструменты — лишь аллегория.

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

              И я бы не сказал, что основная функция NodeJS — это бэкэнд сайтов. Посмотрите типичные задачи, которые на нем решают. А вот PHP, например, наоборот — типичный бэкэнд для сайтов — если уж говорить на Вашем языке.

              Все что угодно, написанное на одном языке, можно написать и на другом, если мы не утыкаемся в софт или хард ограничения. Я и на баше Вам сайтик сделаю. Однако есть разница, правда? Надеюсь, какая, Вам объяснять не понадобится.

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


              1. poxu
                16.12.2015 18:38

                У вас инструменты не аллегория, а аналогия. Есть разница. И аналогия эта лжёт. Лжёт потому, что в спектры применения php и node пересекаются, а спектры применения молотка и отвёртки — нет.

                Я просил вас раскрыть свою мысль и написать для каких задач подходит php а для каких node. Вы написали, что php подходит для 2-3 страничных сайтов, а node для высоконагруженных одностраничных приложений. То есть разница не такая уж чтобы большая. Но если вам вдруг кажется, что сделать 2-3 страничный сайт на node примерно настолько же сложно, как сделать сайт на баше, я буду очень удивлён.

                Считаете, что node и php должны решать совершенно разные задачи — может так и есть. Но пока что вы привели в пример задачи, которые без особых проблем решаются что одним инструментом, что другим. Как только находится задача, которую можно решить двумя разными инструментами — эти инструменты можно сравнивать по критению удобства решения этих задач.


            1. ionicman
              16.12.2015 18:14

              И еще — полегче на поворотах — я никому ничего не вру. Я ответил Вам на Ваш-же вопрос с моей точки зрения. Вы, я надеюсь, ИМХО видели в моем комментарии.
              Да и точек зрения на одно и тоже может быть несколько.


              1. poxu
                16.12.2015 18:40
                -1

                Вы не врёте, а аналогия ваша лжива. Как в общем и все аналогии. Просто в случае с молотком и отвёрткой это особенно очевидно. Вот как-то так.


                1. ionicman
                  16.12.2015 18:47

                  И тем и другим можно, в принципе, сделать одни и те же операции.
                  Но одним удобнее делать операцию, которую менее удобно делать другим.

                  В чем лживость?


                  1. poxu
                    16.12.2015 19:07

                    Какие операции, которые можно делать молотком, можно делать отвёрткой? И какие операции, которые можно делать отвёрткой — можно делать молотком?

                    Ответ простой — никакие. Множества операций, для которых предназначен молоток и операций, для которых предназначена отвёртка — не пересекаются. А множества операций, для которых предназначен php и операций, для которых предназначен node — пересекаются. Задачи, которые решает php можно без особых усилий решать нодой — и это будет удобно. И наоборот.

                    Вот поэтому аналогия между парой молоток-отвёртка и php-node лжива.


                    1. Fesor
                      16.12.2015 19:20

                      Какие операции, которые можно делать молотком, можно делать отвёрткой? И какие операции, которые можно делать отвёрткой — можно делать молотком?


                      И тем и другим можно здорово так калечить людей.

                      Задачи, которые решает php можно без особых усилий решать нодой — и это будет удобно. И наоборот.


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

                      В целом это все пустое.


                      1. poxu
                        16.12.2015 19:33

                        И тем и другим можно здорово так калечить людей.

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

                        Тем не менее многие задачи одинаково удобно делать на ноде и на php. И по критерию удобства решения этих задач nodejs и php прекрасно сравниваются.


                        1. ionicman
                          16.12.2015 19:37
                          -1

                          Эмм… Вы реально все это пишите, или просто поржать? :)

                          Нельзя сравнить эти инструменты по удобству причинения телесных повреждений, хотя бы потому, что повреждения они оставляют разные — отвертка — колотые, а молоток — давленные :D

                          А если серъезно — в принципе попытаться сравнить можно все что угодно — полезности только будет ноль. Кто сильнее — акула или медведь? :)


                          1. poxu
                            16.12.2015 20:12

                            Нельзя сравнить эти инструменты по удобству причинения телесных повреждений, хотя бы потому, что повреждения они оставляют разные — отвертка — колотые, а молоток — давленные :D

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

                            Можно обрисовать спектр ситуаций, когда очевидно нужен молоток, когда очевидно нужна отвёртка и когда можно использовать то, чем привык работать.
                            Кто сильнее — акула или медведь?

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


                            1. ionicman
                              16.12.2015 20:23
                              +1

                              Во-первых, кол-во мышечной массы с силой слабо связано.
                              Сухих людей встречали? Рукопожатие их чувствовали? А вообще — любимая Вами википедия Вам в помощь про это.

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

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

                              И давайте продолжим в личке, если хотите — и так тему замусорили.


                              1. poxu
                                16.12.2015 20:45

                                И давайте продолжим в личке, если хотите — и так тему замусорили.

                                Я думаю напишу статью, в комментариях можно будет обсудить. Будет по теме :). Как напишу — постучусь в личку.


                    1. ionicman
                      16.12.2015 19:23
                      -1

                      :)

                      Я могу молотком завернуть болт (тихонько ударяя по шляпке сбоку), могу отверткой. А отверткой я могу лупить по гвоздю и в конце-концов забью его. Понятно, что я замучаюсь — но можно.

                      На то это и АЛЛЕГОРИЯ а не АНАЛОГИЯ.
                      Ни надо это путать, и никто, конечно, так поступать с отверткой и молтком не будет.

                      Но NodeJS изначально заточен под асинхронку и кластеризацию «из коробки» и круг задач у него соотвествующий.
                      PHP был задуман именно для сайтов, его название расшифровывается даже как Hypertext Preprocessor.

                      И усилия придется прикладывать — ибо круг задач, хоть и в чем-то похож, но различается. Там вверху коммент есть про Hello world!
                      Ну и, конечно, для профи и там и там, хоть усилия и будут — но реализовать они все это смогут. Другой вопрос — зачем?

                      Аналогия — лжива, аллегория — нет. У меня — аллегория. Почитайте значение этих слов на досуге.

                      И да, как заметил комментатор Выше — это все софистика :)
                      Просто любят люди сравнивать несравнимое и потом получать кайф от этого, вместо того чтобы сесть, подумать и выбрать нужное, а не лучшее :))))


                      1. poxu
                        16.12.2015 20:00
                        +1

                        На то это и АЛЛЕГОРИЯ а не АНАЛОГИЯ.

                        То есть вы в технической дискуссии для обоснования своего мнения решили использовать аллегорию? Нет, круто конечно. Так и вижу — node — хорошо наточенная отвёртка легко проникающая в трещины предметной области, тогда как php молоток, который тупо корёжит всё, что видит :). Вот это — аллегория. У вас — аналогия.
                        Почитайте значение этих слов на досуге.

                        Да, почитайте. С википедии можно начать.
                        Просто любят люди сравнивать несравнимое

                        Несравнимое это неопределённый интеграл и вомбат по критерию удобства выхватывания катаны. node и php имеют сходный спектр применения и прекрасно сравниваются.


                        1. ionicman
                          16.12.2015 20:18

                          Да, почитайте. С википедии можно начать.

                          Давайте с гугла:
                          Выражение чего-н. какой-н. мысли, идеи в конкретном образе.

                          И да, не вижу ничего плохого в том, чтобы использовать это в тех. дискуссии. На простых понятиях проще объяснять, но, видимо, не всем :)


                        1. Nookie-Grey
                          16.12.2015 20:19

                          Ахахах Ребят, это Холивар PHP vs Node.JS, а не Отвертки против Молотка


                          1. poxu
                            16.12.2015 20:58
                            +1

                            Вот именно! :)


        1. jrip
          16.12.2015 16:24

          >а просто потому что это задача хорошо ложиться на Node.
          >а просто потому, что удобней, стабильней и проще.

          ну или просто потому, что вы знаете nodejs лучше, например?


          1. ionicman
            16.12.2015 16:31

            Я написал тоже самое там где «подумать» :)


  1. dizews
    16.12.2015 15:06

    а в 6 и 10 раундах обе технологии побеждали? почему в предидущих раундах у обоих технологий счёт меньше на 1?


  1. OlegFX
    16.12.2015 15:13
    +6

    PHP не сутулиться и есть реальные проекты, и варианты, которые позволяют PHP работать быстрее.

    За что вы так с нами?


  1. Scalar
    16.12.2015 16:46
    +1

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


  1. dimas09
    16.12.2015 17:00

    А как насчет того что бы сравнить дебаг этой всей истории?
    Когда пришлось профилировать и дебажить nodejs самый вменяемый инструмент оказался AppDynamics, который платный.

    Вообще начал использовать node.js из-за socket.io, но для таких целей сейчас можно go использовать.
    Какие еще задачи кроме риалтайма вы бы повесили на node.js? Да еще как тул для фронтенда (сборка клиентского js, скомпилировать js на сервере)


  1. rboots
    16.12.2015 17:00
    -7

    Сравнили лопату с микроскопом. На PHP ниже порог входа, но код ***. Node даёт полную свободу, вплоть до сохранения пользовательского состояния в RAM между запросами, метапрограммирования и кастомизации чего угодно, но нужно уметь с этим работать. Я не говорю про производительность, есть и на PHP проекты, выдерживающие миллионы запросов, но всё таки это платформы из разных миров.


    1. maxru
      16.12.2015 17:11
      -8

      На PHP легче писать говнокод, который будет проходить unit-тесты, про порог входа не уверен.


      1. maxru
        17.12.2015 12:35
        -3

        О, у похапешников бомбануло. Правда глаза режет, видать.


    1. jrip
      16.12.2015 17:43
      +2

      Стало интересно, кто из них лопата а кто микроскоп и почему?)
      И вы про написали про свободу, подкрепив это мутными примерами, думаете пхп такое как «до сохранения пользовательского состояния в RAM между запросами» вообще вообще не умеет?)


  1. tvolf
    16.12.2015 17:42

    Не сразу сообразил, о каких драгоценных камнях в Ruby идет речь ) Полез в словарь — и точно: gem — «драгоценный камень» )))


    1. jrip
      16.12.2015 17:47
      +2

      Наверное захватывающе пользоваться английскими словами при написании кода, при этом не знать что они означают)


      1. tvolf
        16.12.2015 17:48

        Во всяком случае, что касается гемов — никогда не задумывался об их истинном значении ))


        1. withkittens
          16.12.2015 18:19
          +2

          Ruby — это тоже драгоценный камень, только тссс ;)


          1. vintage
            16.12.2015 20:41
            +2

            По секрету, и перл тоже :-)


            1. oshibka404
              17.12.2015 19:35

              Жемчуг — не камень


              1. vintage
                17.12.2015 22:47
                +1

                «В соответствии с федеральным законом от 26 марта 1998 г. N 41-ФЗ «О драгоценных металлах и драгоценных камнях» (ст. 1), к драгоценным камням отнесены: природные алмазы, изумруды, рубины, сапфиры и александриты, а также природный жемчуг в сыром (естественном) и обработанном виде.»

                https://ru.wikipedia.org/wiki/%D0%94%D1%80%D0%B0%D0%B3%D0%BE%D1%86%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D0%BA%D0%B0%D0%BC%D0%BD%D0%B8


  1. ZoomLS
    16.12.2015 18:05

    >>Даже упертые Node.js-разработчики должны использовать PHP для простых сайтов и приложений.

    WTF? Node.js хватит для любых веб-приложений.


    1. rboots
      16.12.2015 18:09
      -1

      >> должны использовать PHP

      Сжеч ведьму!


  1. Nookie-Grey
    16.12.2015 19:31
    -1

    Почему ни кто не сказал про CMS? Про конструкторы?
    Они имеют свою нишу.


  1. Nookie-Grey
    16.12.2015 19:43
    -1

    А вы попробуйте настоить Apache, PHP и т.п. без XAMPP =)


    1. jrip
      16.12.2015 21:19
      +1

      Apache+PHP уже звучит как ругательство.
      Так то nginx же.
      Впрочем для того и другого how to по установке может понять даже пятиклассник, бывали тут случаи.


      1. withkittens
        16.12.2015 21:37

        А сколько таких пятиклассников в % соотношении?


        1. jrip
          16.12.2015 23:23

          Какие еще % о чем вы? Сейчас на прям на ютюбе уже есть видео гайд для установки и настройки походу уже чего угодно.
          А тут кто-то пишет в минусы «А вы попробуйте настоить Apache, PHP „


    1. Fesor
      16.12.2015 21:24
      +1

      А вы попробуйте настоить Apache, PHP и т.п. без XAMPP =)


      а зачем? Вы же не будете запускать node без nginx? для разработки же хватит PHP + база данных по вкусу. Ну то есть разницы практически никакой.


      1. SerafimArts
        17.12.2015 09:38
        +1

        Дополню, что в качестве БД можно использовать sqlite, особенно при наличии приемлемой ОРМ и не сильно завязанных на БД задач. Так что при разработке на php можно обойтись одним голым php.


    1. fog
      19.12.2015 01:20
      +1

      Там настраивать нечего особо: Одной командой консоли всё устанавливается, один файл конфига хоста создаётся для nginx.


  1. beduin01
    16.12.2015 19:44

    Я лично для своих проектов http://vibed.org/ использую. Куда лучше Node.js. На выходе exe файл включающий в себя http сервер. Никакой мороки с развертыванием.


    1. Fesor
      16.12.2015 21:28

      Никакой мороки с развертыванием.


      да, надо только потушить старый сервер, запустить новый, проблемы с миграциями те же что и для всех… Если взять Docker то деплоймент любых приложений будет происходить по такой же схеме, и не важно что внутри, ruby + ror, похапэ, java…

      Dlang хороший язык, но пока слегка сырой. Да и посмотрите на тот же go — все так же из коробки, но в отличии от D предоставляет вам горутины, на которых конкуренси организовывать проще чем в той же ноде (и эффективнее). И да, http сервер — часть стандартной библиотеки, со своими абстракциями т.д.

      Вариантов на чем писать и как писать миллион и еще чуть чуть, хоть на хаскеле.


      1. beduin01
        16.12.2015 22:29

        >Dlang хороший язык, но пока слегка сырой.
        Чем сырой?

        >Да и посмотрите на тот же go — все так же из коробки, но в отличии от D предоставляет вам горутины
        vibed и D умеет те же самые го-рутины, только синтаксис гораздо выразительнее чем на Go.


        1. vintage
          17.12.2015 09:14

          Я тут, кстати, пилю помаленьку wait-free channels, подключайтесь :-) https://github.com/nin-jin/go.d


  1. komandakycto
    17.12.2015 14:11
    +4

    От холиваров php vs * мутит уже. Мы приходим в магазин и перед нами 5-7 видов хлеба. Мы не спорим какой лучше, мы покупаем привычный нам и потребляем. Время делает своё дело над ассортиментом. Давайте просто потреблять их и делать лучше. Каждый по-своему. Эволюция разберется за нас кому жить, а кому умирать.