чем node js лучше php
php и nodejs, разница на пальцах
Являясь постоянным пользователем форума nodejs.ru, часто наблюдаю картину когда люди начиная изучать nodejs сравнивают ее с php, а иногда пытаются работать с ней так как с php. Я бы хотел объяснить “на пальцах” разницу между php и nodejs применительно к работе сайта. Статья предназначена для новичков. Я намеренно буду говорить очень упрощенно, не вдаваясь в глубокие подробности, что бы как можно проще показать различия в технологиях.
Что то объяснять всегда лучше на наглядном примере с картинками. Поэтому придумаем небольшой “сферический сайт в вакууме” и примем некоторые условия.
Пусть у нас имеется некий сайт, который понимает всего два запроса:
Запрос А выполняется за 1 секунду, он не требует обращение к БД.
Запрос Б выполняется за 5 секунд, причем 4 из них, он тратит на ожидание ответа БД.
Так же условимся что время между запросами не менее 1 секунды.
Давайте рассмотрим как это работает на php.
В самой упрощенной форме архитектура сервера выглядит так:
Важно тут следующие, веб сервер получив запрос от клиента передает его в php процесс. В свою очередь процесс php в один момент времени может обрабатывать один запрос, по завершению работы, результат возвращается веб серверу, а сам процесс перестает существовать. Веб сервер получая ответ отправляет результат клиенту и закрывает соединение.
При наличии всего одного php процесса, работа нашего сервера можно отобразить на такой схеме:
Из схемы видно, что пока к нам поступают только запросы А наш сервер бодро на них отвечает и в целом выполняет поставленным задачи, но как только к нам приходит запрос Б, сервер перестает отвечать на запросы, до момента пока не будет готов ответ на запрос Б. Так же на схеме видно что большую часть времени запроса Б “все” ждут результат работы базы данных.
Для решения этой проблемы приходиться увеличивать кол-во php процессов, давайте увеличим до 2х, в результате схема принимает такой вид:
Из этой схемы видно, что запрос Б “повисает” в обработке в первом php процессе, при этом сервер продолжает отвечать на остальные запросы. Все будет идти хорошо до момента, когда к нам не придут два запроса Б, тогда оба php процесса “повиснут” в ожидании ответа базы, и сервер в целом перестанет отвечать, до момента пока один из них не освободиться.
Ну мы то уже знаем что делать? Правильно, возьмем и увеличим кол-во php процессов, сразу до 20 или 30 и проблема вроде как ушла, хотя на самом деле проблема просто немного отдалилась и момент когда придет 30 запросов Б наступит. Вся беда в том что мы не можем создавать бесконечно много php процессов и путь наращивать их в запредельных количествах неверен.
Самое главное в что следует вынести из этих схем, это то, что операции работы с базой данных в php выполняются синхронно. В нашем случае процесс выполнивший запрос к базе неспособен обработать другие запросы и вынужден “висеть” (ничего не делая) ожидая ответ от базы данных.
nodejs
Что дает нам nodejs?
Сначала посмотрим как выглядит простой сервер:
Сразу бросается в глаза то, что сервер включает в себя обработчики непосредственно запросов А и Б, а так же сам Веб сервер. Всё это добро крутится в одном node процессе и постоянно висит в памяти.
Посмотрим на схему работы:
На схеме хорошо видно что запросы Б не приводят к “подвисанию” сервера в ожидании ответа базы. Сервер получив запрос Б, просто сформирует и отправит запрос в базу данных, и продолжит отвечать на остальные запросы, как только ответ от базы будет получен, сервер вернет результат клиенту. В случае nodejs неважно как и в каком количестве придут запросы Б, ни один из них не приведет к “подвисанию” в ожидании ответа базы.
Сравнение Node.js и PHP
Языки программирования PHP и JavaScript раньше были союзниками и каждый из них занимал свою сферу и оба были обязательными для нормальной работы сайтов. Сферы назначения языков были явно разделены, JavaScript работал на стороне пользователя в браузере, в то время как PHP выполнял все серверные задачи. По такому принципу сейчас работает множество сайтов и систем управления, таких как WordPress, Drupal и Facebook. Вы вряд ли можете пользоваться интернетом больше пяти минут без PHP.
Обе платформы продолжают расширяться, улучшатся и получать больше возможностей. Теперь существует множество фреймворков для Node.js, например, Express, Angular, Meteor, и другие. В свою очередь, PHP тоже продолжает развиваться. Компилятор Zippy обеспечивает более быструю работу, чем когда-либо, благодаря там же методам, что сделали революцию Node.js. PHP 7 и HHVM уже имеют большинство из тех оптимизаций, которые использовались в V8 для Chrome и Node.js. Кроме того, HHVM поддерживает язык Hack, который имеет поддержку сложных функций, таких как лямбда, генераторы и коллекции.
Конечно, результат этого противостояния еще неизвестен. Для одних программистов очень важна чистота Node.js и простота использования JavaScript. Другие уже привыкли к стабильности и отличной кодовой базой PHP. Сможет ли Node.js победить? Или PHP удержит свои позиции.
Смешивание кода с содержимым
Допустим, вы верстаете страницу для своего сайта, вы хотите разместить текст, а в нем различные данные из базы данных, памяти или других мест. Все это делается очень просто с помощью вставки тегов PHP. Вы можете использовать шаблонизатор, но это вовсе не обязательно. Здесь не нужно дополнительных файлов или сложных архитектур приложения.
Количество готовых решений
Существует очень много кода и платформ, написанных на PHP. Это такие популярные платформы, как WordPress, Drupal, Joomla. Кроме того, они имеют открытый исходный код, как и большинство плагинов для них. Вы можете их свободно загружать модифицировать и использовать по своему усмотрению.
Но несмотря на это, многие из тех же плагинов для WordPress давно не обновлялись и уже давно потеряли совместимость со свежими версиями платформы. С другой стороны, все плагины и фреймворки для Node.js еще новые. Они разработаны с учетом новейших технологий. Их меньше, но общая совместимость больше. Конечно, такая судьба может в будущем постичь и Node.js, когда будут придуманы более совершенные способы работы. Если выбирать Node.js или PHP под этим углом обзора, то я выбрал бы PHP, потому что кода и библиотек для работы с различными сервисами в разы больше.
Простота использования
По своей сути PHP очень прост. Здесь есть несколько переменных и основные функции для управления текстом, числами и файлами. Функции реализуют почти все, необходимые функции. Но, фактически, это слой, предназначенный для передачи данных, полученных от порта 80 в базу данных и обратно. Это основная задача. Часто сложные задачи по сортировке и выборке данных перекладываются на базу данных.
При выборе Node js или PHP JavaScript может показаться очень сложным, на первый взгляд. Он имеет несколько примечательных особенностей, которые могут показаться непонятными, но в основном, это современный язык с такими новыми возможностями, как, например, замыкания. Вы можете использовать такие библиотеки, как JQuery. Вы можете использовать возможности всех подобных объектов. И это очень полезно.
Новые возможности
Если вам нужно получить больше чем просто взаимодействие с базой данных и форматирование результатов, вы можете подключить HHVM и получить поддержку Hack, современного языка от Facebook, с поддержкой аннотации типа, лямбда-функциями и генераторами. Но тогда ваш код будет работать только с HHVM, хотя это не так плохо, потому что он будет работать в разы быстрее.
Но если вам нужны функции из Hack, то стоит задуматься о переходе на Node.js. Многие современные языки могут быть скомпилированы в Node.js и JavaScript. Среди них: Java, C#, Lisp и десятки других, таких как Scala, OCaml, Haskell. Также есть поддержка компиляции Basic и Pascal для любителей этих языков.
Способ передачи данных
Использование одного языка на сервере и в браузере это очень хорошо, но что, если вам нужно отправлять данные в чистом HTML? Браузер отлично обрабатывает HTML, нет никаких проблем с ошибками при попытке создать страницу в JavaScript с помощью вызова нескольких десятков служб. Чистый HTML работает лучше и PHP лучше ориентирован на это. Вы можете генерировать страницы на сервере и не заботится про поддержку в браузере.
Хранение данных
PHP оптимизирован и отлично работает с базой данных MySQL, здесь поддерживаются различные версии баз данных, как MariaDB, Postgresql, MySQL. Ваш код может работать со всеми базами независимо от используемых движков.
Если вам очень нужен доступ к SQL, то у Node.js есть библиотеки и для этого, но здесь также есть поддержка специального формата работы с данными. Это JSON. С помощью него вы можете взаимодействовать с новыми типами баз данных NoSQL. Это не значит, что вы не можете настроить поддержку JSON для вашего PHP проекта, но наиболее удобно его использовать вместе с JavaScript. Вы получаете один и тот же код для браузера и сервера.
Скорость работы и разработки
Для большинства программистов написание PHP кода очень просто и быстро. Здесь не нужно различных компиляторов или преобразователей. Вы просто пишете свой код в блокноте и уже можете выполнять. Если нужно сделать проект очень быстро, то PHP будет отличным инструментом.
Написание кода на JavaScript немного сложнее, вам придется рассчитывать фигурные скобки, и т д. Но когда вы все сделаете, ваш код будет летать. Механизм обратного вызова это еще одна интересная вещь, поскольку она избавляет вас от ожидания.
Развитие
PHP постоянно развивается. Кроме развития самого языка, команда которого недавно выпустила седьмую версию, развиваются проекты HHVM и Zend, которые дают максимальную скорость выполнения, новые возможности и ту же концепцию MVC. Принцип MVC применяется во многих новых проектах.
Node.js тоже активно развивается, но здесь есть одно отличие PHP vs Node.js. Node содержит все современные функции в одном основном дистрибутиве. Здесь нет такой фрагментации. Это большой плюс, потому что разработчикам не придется тратить время на переработку кода.
Выводы
В этой статье мы сделали сравнение Node js и PHP. Это отличные платформы для разработки сайтов и веб-приложений. На каждом из них можно создать отличный сайт, но у обоих есть свои плюсы и минусы. Хотя мы не приводили технических подробностей, надеюсь, вы смогли для себя определить, что вам больше подходит.
Хочешь стать веб-разработчиком? Учи Node.js, а не PHP
Один из самых частых вопросов, которые я слышу от своих учеников, звучит так: «Почему вы преподаете нам Node.js, а не PHP?» Ответ «Поверьте, я знаю, потому что работаю в этой индустрии» почему-то оказывается недостаточно убедительным. Потому я решил изложить здесь причины того, почему я преподаю именно Node.js и почему вы должны забыть о PHP, если хотите стать востребованным веб-разработчиком в будущем. Эти два языка я использую в качестве примера. В самой же статье я покажу вам способ выбрать наиболее перспективные языки программирования, фреймворки и библиотеки.
Учитывая ограниченность времени и ресурсов, вам, как разработчикам, придется принимать решения о том, во что инвестировать свое время, чтобы получить максимальную отдачу в будущем.
Теперь предлагаю вам задать себе такой вопрос: инвестиции в какие из технологий имеют наибольшую ценность для моей будущей карьеры разработчика с точки зрения знаний, зарплаты и удовлетворенности в целом?
Причем я не предлагаю выбирать самый легкий путь. Речь идет о том, как выбрать инструменты, которые будут актуальны в течение долгих лет и позволят мне сохранять свою конкурентноспособность на рынке и в дальнейшем позволят развить навыки до уровня руководителя — senior developer.
В конце статьи я перечислю все перспективные технологии, которые я рекомендую к изучению в 2018 году, то есть результаты моего исследования, о котором пойдет речь ниже. Так что все нетерпеливые могут сразу перейти к заключению. Остальным советую запастись чашечкой органического сделанного с любовью чая и давайте отправляться в это гиковское приключение!
В этой статье нам предстоит познакомиться с двумя типами исследований: анализ рынка труда и анализ технологий. Итак, поехали!
Node.js vs PHP — анализ рынка труда
Материалами исследования послужили статистика LinkedIn и данные масштабного опроса разработчиков, которые провел сайт Stackoverflow в 2017 году. Также следует отметить, что мы фокусировались только на технологиях, имеющих непосредственное отношение к веб-разработке.
Уже пятый год подряд JavaScript становится самым часто используемым языком программирования. А Python впервые за пять лет обогнал PHP по популярности. А какое же место отведено Node.js, спросите вы? Node.js — это среда выполнения javascript. Проще говоря, Node.js — это серверный Javascript. Так что будем считать, что говоря «Node.js» подразумеваем «Javascript».
Топ самых используемых языков программирования
Топ самых используемых фреймворков, библиотек и других технологий
Как видим на графиках, Javascript и Node.js лидируют в рейтинге наиболее часто используемых языков программирования и технологий, а PHP им существенно проигрывает.
В течение 5 лет сайт Stackoverflow собирал данные для опроса разработчиков, из которого следует, что такие языки, как Javascript и Node.js становятся все более популярными, а использование таких языков, как PHP, сокращается:
График изменения популярности технологий с 2013 по 2017
React был назван самым любимым языком разработчиков, однако сразу за ним на втором месте — Node.js, который, помимо этого, стал и той технологией, которую захотело освоить большинство разработчиков (категория wanted).
Топ фреймворков, библиотек и технологий, которые разработчики любят (Loved) / боятся (Dreaded) / хотят изучить (Wanted). Вкладка «Любимые» (Loved)
Топ фреймворков, библиотек и технологий, которые разработчики любят (Loved) / боятся (Dreaded) / хотят изучить (Wanted). Вкладка «Хотят изучить» (Wanted)
Зарплаты и возможности
На приведенном ниже графике отображается связь оплаты труда и опыта работы. Над синей линии этого графика указаны языки программирования, заработная плата разработки на которых напрямую зависит от опыта разработчика — это Go, Rust и Clojure. Однако разработчикам, использующим языки под синей линией, например PHP, платят меньше, даже учитывая многолетний опыт их работы. Размер кругов на этой диаграмме показывает, сколько разработчиков использует этот язык по сравнению с другими. При этом график показывает печальную тенденцию — число лет в профессии практически не влияет на уровень зарплаты PHP-разработчиков.
Связь оплаты труда и опыта разработки
На сайте LinkedIn в разделе Jobs вы можете увидеть, что во всем мире вакансий для разработчиков Node.js больше, чем вакансий для PHP-разработчиков, причем существенно — разница достигает 10 000 позиций. Это несмотря на то, что Node.js является гораздо более молодой технологией по сравнению с PHP и тем фактом, что именно на PHP написана CMS (система управления контентом) WordPress, на которой работает 30% всех веб-сайтов в Интернете.
Ну и наконец средняя оплата труда по разным регионам, в данном случае данные приводятся для Америки, потому что в статистику по миру PHP попасть не удалось:
Топ самых высокооплачиваемых технологий в Америке
Топ самых высокооплачиваемых технологий в Великобритании
Топ самых высокооплачиваемых технологий в Германии
Топ самых высокооплачиваемых технологий во Франции
Опять же, у нас нет цели мы здесь не избиваем PHP. Мы просто смотрим на цифры, чтобы выбрать язык для изучения. PHP явно котируется на рынке труда значительно хуже других технологий, таких как Javascript и Node.js.
ОБНОВЛЕНИЕ: с момента выхода публикации stackoverflow разместил данные опроса за опроса разработчиков за 2018 год. PHP продолжает терять свои позиции.
Вердикт
Популярность PHP падает, в то время как рынке растет спрос на Node.js и интерес к нему у разработчиков. В общем и целом, зарплаты PHP-разработчиков существенно ниже чем у других программистов, и эта тенденция только усиливается.
Node.js vs PHP — анализ технологий
Теперь давайте обсудим преимущества и недостатки каждой из технологий по отдельности.
Преимущества Node.js
Недостатки Node.js:
Вердикт для Node.js
Node.js отлично подходит приложениям, одновременно работающим с большим количеством параллельных подключений, каждый из которых нагружает процессор лишь незначительно. Таким образом, это идеальный вариант для многих современных сайтов, таких как лендинги и приложения, работающие в режиме реального времени.
Используя асинхронный характер обработки данных в JavaScript, можно создать высокомасштабируемый серверный код, который позволит по максимуму использовать мощность одного процессора и память, и в итоге получить возможность обрабатывать больше параллельных запросов, чем на обычном многопоточном сервере.
Node.js поставляется с очень небольшим количеством зависимостей, правил и рекомендаций, которые дают разработчику свободу и простор для творчества. Разработчики для своего проекта вольны сами выбрать лучшую архитектуру, шаблоны проектирования, модули и функции, при этом пользуясь всеми благами NPM.
Преимущества PHP:
Недостатки PHP:
Вердикт языку PHP:
PHP проще выучить в связи с обширностью сформировавшегся вокруг него сообщества. Это хороший выбор для стандартизованного решения, такого как блог или новостной сайт. Он обладает мощью WordPress, который является самой популярной CMS (Content Management System), и которая позволяет вам создавать настраиваемые блоги, используя минимальное число кода. Однако простота в этом случае достигается в ущерб качеству. Чем проще научиться технологии, тем легче для кого-то войти в отрасль и тем выше конкуренция, а значит, тем меньшую придется брать плату за свои услуги.
Заключение
PHP был одним из лучших языков в эпоху Web 1.0, когда был популярен WordPress. Node.js был запущен в 2009 году и технически является не языком, а средой выполнения для Javascript. Он является фаворитом более молодого поколения веб-разработчиков и лучше подходит для создания сложных I/O — приложений, основанных на событиях, оперирующих большими объемами данных, — то есть именно тех приложений, с которыми вы сталкиваетесь в век Web 2.0.
В частности, асинхронная и основанная на событиях архитектура Node.js отлично подходит для приложений, работающих в режиме реального времени, таких как мессенджеры и чаты, а также для приложений совместного использования, в которых одновременно выполняется много запросов и идет постоянный обмен данными между клиентом и сервером. Не может жить без WordPress? Ну, у Node.js есть своя собственная прекрасную CMS, которая называется Keystone.js.
Во всем надо приходить к компромиссу. Никогда не будет одной технологии, которая решит все проблемы и сделает вас неуязвимыми к устареванию знаний. Лучшее, что мы можем сделать, это проанализировать все имеющиеся варианты и выбрать тот, отдача от которого будет больше. По результатам анализа рынка труда и сравнения технологий мы можем назвать явного победителя.
Я выбираю Node.js.
Хотя все технологии великолепны, каждая в решении своей конкретной задачи, мы живем в мире, где информации настолько много, что мы должны ограничить количество тем для рассмотрения и глубоко погрузиться лишь в самые важные.
В своем курсе я преподаю материал, который актуален сегодня для профессиональной карьеры в этой области, а также инструменты, используемые некоторыми крупнейшими компаниями, такими как Facebook, Netflix, Google и Amazon. Если вы хотите стать fullstack-разработчиком в 2018 году, я рекомендую вам изучить:
PHP vs Node.js
Это перевод статьи Крэга Баклера (Craig Buckler) «SitePoint Smackdown: PHP vs Node.js» и судейских решений Бруно Шкворца и Джеймса Хиббарда (Bruno Škvorc, James Hibbard) статьи Крэга Баклера.
От переводчика
Существует много статей на эту тему, с качественными характеристическими анализами и прогнозами производительности. Однако, мне все же хотелось найти такую статью, где профессиональные программисты делятся своими мнениями и пытаются что-то подсказать, предостеречь новичка, который только изучает PHP или NodeJS (cерверный JavaScript). Многие не любят PHP и говорят, что PHP создан, чтобы умирать (да, там есть сборщик мусора, который убивает наши переменные после выполнения скрипта, а не потому что его забросил Расмус Лердорф), однако, что теперь не учить PHP совсем, в то время как на нем работает 80% сайтов в интернете. Поэтому, если мы хотим быть профессионалами и пытаться хоть как-то расширить свой кругозор, нам нужно четко разделять задачи PHP и задачи NodeJS, а не сливать все в кучу.
«10 раундов боксеров разных весовых категорий»
Введение
Web-программирование стремительно развивается, и перед back-end разработчиками встает вопрос выбора между устоявшимися тяжеловесами Java, C, Perl и современными веб-ориентированными языками, такими как, Ruby, Clojure, Go. Ваш выбор имеет огромное значение, накладывая свой отпечаток на работу приложения.
Но какой сделать выбор для веб-разработки?
Не хочеться затевать холивар, но все же мы будем сегодня говорить о PHP и NodeJS:
Почему не говорим о 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. Если вы написали этот код в файле index.php и запустили на локальном сервере через порт 8000 (на своем компьютере, а не на реальном хостинге), то его отображение будет доступно по адресу:
.
Однако, используя готовый интерпретатор PHP со встроенным сервером довольно ненадежное занятие. Лучше использовать готовые решения, сборки Apache — XAMPP или виртуальные OS (Vagrant). Кстати, свой файл вы сможете загрузить на любой хостинг интернета.
2) Установить платформу Node.js проще простого, если вы работаете на unix-подобных системах, вы сможете это сделать и при помощи менеджеров пакетов. Давайте создадим страницу index.js:
Мы повторили аналогичные действия, код на JavaScript, как правило, пишут в файлах, оканчивающихся на расширение .js. Если вы написали этот код в файле index.js и запустили на локальном сервере через порт 8000 (на своем компьютере, а не на реальном хостинге), то его отображение также будет доступно по адресу (при условии, что php теперь работает на другом порту):
Теперь давайте оценим код, даже если вы хорошо знаете клиентский JavaScript, вам придется думать и разбираться с тем, что же здесь написано. Вы должны понимать замыкания и callback-функции, промисы, программирование на стороне Node.js требует некоторой сноровки.
PHP концептуально проще и выигрывает этот раунд. Хотя PHP имеет несколько программных зависимостей, однако PHP менее сложный для изучения.
Оценка судей — PHP 1:0 Node.js
Второй раунд: помощь и поддержка
На самом деле вы никуда не уедете на своих знаниях без изучения каких-либо курсов, современных практик, чтобы развиваться, вам нужно задавать вопросы на форумах, таких как — StackOverflow. PHP выигрывает этот раунд легко, он имеет большое руководство на сайте php.net и двадцать лет частовстречаемых вопросов. Что бы вы ни делали, кто-то сталкивался с этой проблемой и пытался ее решить за вас.
У Node.js есть хорошая документация, но технология довольно молода, поэтому и ответов на форумах, будет значительно меньше.
Оценка судей — PHP 2:0 Node.js
Третий раунд: синтаксис языка
В отличие от некоторых языков и фреймворков, PHP не заставит вас работать определенным образом, и растет вместе с вами. Вы можете писать свои маленькие программы на простых функциях PHP4, и они будут отличаться своей красотой от MVC PHP 5+. Однако в таком случае, ваш код может быть хаотичным, вы начнете писать лучший код только с пониманием некоторых вещей.
Синтаксис PHP изменялся с выходом новых версий, из-за чего была проведена работа по обратной совместимости. Вы можете легко перенести код с PHP4 на PHP5. Однако, в следствии такого подхода, в PHP образовался беспорядок (каша).
Например, как вы подсчитать количество символов в строке?
— count()? str_len()? strlen()? mb_strlen()?
Вы найдете в документации для этого несколько функции, но на самом деле, все просто. Вообще, в PHP много функций, которые работают одинаково, попробуйте написать несколько строк кода, не посоветовавшись с наставником.
C JavaScript все иначе:
PHP имеет множество преимуществ, однако Node.js выигрывает по некоторым причинам:
1. JavaScript кажется самым непонятным языком в мире, но как только вы улавливаете его концепцию, остальные языки становятся громоздкими по сравнению с ним.
2. JavaScript выглядит минимальнее, чем PHP, вам не нужно бороться с тем же UTF-8.
3. Full-stack разработчики могут писать код на JavaScript как на стороне клиента, так и на стороне сервера. Вам больше не нужно переключаться между технологиями.
4. Изучая JavaScript, вам хочется больше и чаще писать на этом языке, про PHP такого нельзя сказать.
Оценка судей — PHP 2:1 Node.js
Четвертый раунд: инструменты разработчика
Обе технологии имеют хороший выбор редакторов, интегрированных сред разработки, отладчиков, валидаторов и других инструментов. Тут можно дать ничью, но все же Node.js имеет прекрасный инструмент, npm — менеджер пакетов, c его помощью можно управлять модулями и зависимостями.
У PHP есть свой менеджер пакетов, разработанный под влиянием npm — Composer. Однако, ежели npm встроен по умолчанию, тот composer придется встраивать самостоятельно. Благодяря npm широкое распространение получили Gulp, Grunt — системы сборки front-end проектов.
Оценка судей — PHP 2:2 Node.js
Пятый раунд: среда
Где могут быть использованы эти технологии. Как их развернуть? Какими платформами поддерживаются? Веб-разработчикам часто нужно создавать приложения, которые только относятся к web, например, разработка онлайн-сервиса, сценарии преобразования данных и т.д.
На PHP вы можете разрабывать десктопные приложения или консольные утилиты, но в основном PHP нужен на стороне сервера и редко выходит за пределы этой границы.
Несколько лет назад, JavaScript использовался исключительно для браузера. С приходом Node.js вы можете писать десктопные и мобильные приложения, а также можно программировать и микроконтроллеры. Node.js расширил границы JavaScript.
Оценка судей — PHP 2:3 Node.js
Шестой раунд: интеграция
Ваши технологии разработки будут ограничены, если только они не могут интегрироваться с базами данных и драйверами. PHP сильна в этой области. Развитие было в течение многих лет, и его расширения системы позволяют прямую работать с любым хостом при помощи API.
Node.js догоняет быстро, но вы можете изрядно попотеть, чтобы найти современные компоненты интеграции для старых вещей.
Оценка судей — PHP 3:4 Node.js
Седьмой раунд: хостинг и развертывание
Как легко разворачиваются новенький приложения на настоящем веб-сервере? Тут еще одна чистая победа PHP. Любой хостинг интернета поддерживает PHP. Вы можете получить MySQL базу данных по выгодной цене. Тут PHP значительно проще песочницы (локального сервера) и вы будете точно уведомлены, какие PHP расширения отключены, а какие нет.
Node.js совсем другой зверь, и он может работать на стороне сервера постоянно, без разрыва связи. Для этого, вам придется искать специализированные хостинги. Вам потребуется виртуальное облако (VDS/VPS, серверная среда, с полным доступом). К сожалению, такое могут себе позволить не все хостеры, поэтому и цены будут соответствующие.
Оценка судей — PHP 4:4 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 увлечены самим языком. Когда в последний раз вы читали статью по PHP или смотрели презентацию, которая пленила публику? Возможно, все, что было сказано? Может быть, есть менее увлекательным? Может быть, вы не смотрите в нужных местах? Есть некоторые интересные особенности, которые появились совсем недавно, например, появление — PHP7, но все же эта технология топталась в течение нескольких лет. Это сказалось на самом языке, многие разработчики стали ругать PHP.
JavaScript делит сообщество. Есть те, кто любит его и тех, кто ненавидит его, немногие разработчики сидят на заборе. Тем не менее, ответы по Node.js были в значительной степени положительные и технология находится на гребне волны. Это отчасти потому, что она новая, на данный момент, Node.js выигрывает этот раунд.
Оценка судей — PHP 4:6 Node.js
Деcятый раунд: будущее
Это не особо важно, какой язык вы используете на стороне сервера, он все равно будет продолжать работать, даже если проект заброшен. Многие продолжают использовать PHP. Это безопасная ставка и ее поддержка выглядит уверенной еще двадцать лет.
При этом мы знаем, что восхождение Node.js было быстрым. Современный подход к развитию очевиден тем, что использует тот же синтаксис, что и на клиентской стороне. JavaScript поддерживает HTML5, веб-сокеты. Node.js неизбежно отнимает долю на рынке, но PHP, я сомневаюсь, что будет обгонять. Обе технологии имеют большое будущее. Я заявляю, этот раунд заканчивается ничьей.
Оценка судей — PHP 5:7 Node.js
Абсолютный победитель
Окончательный счет 5:7 в пользу Node.js. Node.js имеет крутую кривую обучения и не является идеальным для начинающих разработчиков, но он все же выигрывает. Просто. Если вы грамотный JavaScript-программист, который любит свой язык, Node.js не разочарует вас. Вы почувствуете себя свежее и получите освободительный опыт веб-разработки. Но не стоит сбрасывать PHP со счетов. PHP жив, и есть мало оснований ставить подножку PHP, из-за того, что это выглядит модным. PHP проще изучить, вы сможете овладеть профессиональными приемы программирования, главное практика. PHP очень легко развернуть на сервере. Даже упертые Node.js-разработчики должны использовать PHP для простых сайтов и приложений.
Мой совет: оценить варианты и выбрать язык, основанный на ваших требованиях. Это гораздо более практично, чем полагаться на «за и против»!