Node.js срещу PHP: Епична битка за споделяне на ум от разработчици

Това е класически холивудски сюжет: битката между двама стари приятели, които са тръгнали по различен начин. Често триенето започва, когато единият приятел проявява интерес към това, което винаги е било неизказаната област на другия приятел. Във версията на този филм на езика за програмиране, въвеждането на Node.js превръща приятеля в недоволство: PHP и JavaScript, двама партньори, които някога са управлявали интернет, но сега го превръщат в актьора на разработчиците.

Навремето партньорството беше просто. JavaScript обработваше малки подробности в браузъра, докато PHP управляваше всички задачи от страна на сървъра между порт 80 и MySQL. Това беше щастлив съюз, който продължава да поддържа много важни части от интернет. Между WordPress, Drupal и Facebook хората трудно могат да изминат нито минута в мрежата, без да се сблъскат с PHP.

Тогава някакво умно дете откри, че може да пусне JavaScript на сървъра. Изведнъж не се наложи да се използва PHP за изграждане на следващото поколение сървърни стекове. За изграждането на Node.js и рамките, работещи на клиента, беше необходим само един език. „JavaScript навсякъде“ се превърна в мантрата за някои.

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

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

Но шумът избледнява и софтуерът може да живее десетилетия. По-голямата част от основата на PHP кода няма да мигрира и продължава да обслужва големи части от текста, който четем всеки ден. Според някои оценки 40% от страниците, които разглеждаме, започват под някаква форма с PHP. Част от това е, защото PHP продължава да се преражда. През последните няколко години вътрешностите на системите, работещи с PHP, бяха напълно пренаписани. Това не е същият PHP код, който управлява уебсайта на баба и дядо ви.

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

Разбира се, финалът все още не е написан. За всеки кодер, който припява за чистотата и младостта на Node.js и простотата на JavaScript навсякъде, има друг, който е доволен от дълбоката кодова база и отдавна разбраната стабилност на PHP. Дали старият коджър ще отблъсне изстрела на сървъра? Ще свали ли JavaScript стария си приятел, за да постигне световно господство? Поставете още една порция пуканки в микровълновата и седнете.

Къде PHP печели: Смесване на код със съдържание

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

Къде Node печели: Разделяне на опасенията

Смесването на код със съдържание е патерица, която в крайна сметка може да ви осакати. Разбира се, забавно е да смесвате кода с HTML първите два или три пъти, когато го направите. Но скоро вашата кодова база се превръща в объркана логика. Истинските програмисти добавят структура и отделят козметичния слой от логическия слой. По-чисто е за новите програмисти да разберат и е по-лесно да се поддържа. Рамките, работещи на Node.js, са изградени от програмисти, които знаят, че животът е по-добър, когато моделът, изгледът и контролерът са отделни.

Къде PHP печели: Дълбока кодова база

Мрежата е пълна с PHP код. Най-популярните платформи за изграждане на уебсайтове (WordPress, Drupal, Joomla) са написани на PHP. Не само платформите са с отворен код, но и повечето от техните приставки. Навсякъде има PHP код и той чака да изтеглите, промените и използвате за вашите нужди.

Където Node печели: По-модерни функции

Разбира се, има хиляди чудесни PHP файлове с отворен код, но някои от тях са 12-годишни приставки на WordPress с надежда и молитва някой да ги изтегли. За всяка модерна версия на Symfony има прашна, отдавна забравена библиотека, която никой не актуализира.

Кой иска да прекара часове, дни или седмици в маймуниране с код, който не е актуализиран от години? Приставките Node.js са не само по-нови, те са създадени с пълното познаване на най-новите архитектурни подходи. Те са изградени от програмисти, които разбират, че съвременните уеб приложения трябва да изтласкат по-голямата част от интелигентността към клиента.

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

Къде PHP печели: Простота (нещо като)

В PHP няма много: няколко променливи и основни функции за жонглиране на низове и числа. Това е тънък слой, който не прави много, освен да премества данните от порт 80 в базата данни и обратно. Това е, което трябва да направи. Съвременната база данни е магически инструмент и има смисъл да се остави тежката работа на нея. PHP е точното количество сложност за работа, която не би трябвало да е сложна.

След това отново, ако сте програмист, който иска да направи нещо повече от взаимодействие с база данни и форматиране на резултатите, вече можете да правите повече с PHP, без да държите носа си. HHVM на Facebook добавя поддръжка за Hack, пълен език, изпълнен със съвременни функции като анотации на типове, генерични продукти и ламбда изрази. Използването на това ограничава кода ви да работи само на HHVM, но това не е най-лошото нещо в света. Това е много бързо.

Къде Node печели: Десетки езикови опции

Ако потребителите на PHP са щастливи да получат достъп до Hack, те трябва да помислят да се преместят в света на Node.js, защото много основни езици могат да бъдат компилирани, за да работят в JavaScript. Има добре познати опции като Java, C # или Lisp и десетки други като Scala, OCaml и Haskell. Има дори подаръци за носталгични любители на BASIC или Pascal. Този списък с езици, които се компилират в JavaScript от Jeremy Ashkenas, е доста изчерпателен. Плюс JavaScript братовчеди като TypeScript и CoffeeScript предлагат малко по-различни и подобрени подходи към една и съща игра.

Къде PHP печели: Не е необходимо клиентско приложение

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

Където Node печели: Обажданията за услуги са по-тънки от PHP-разговорите с дебели HTML

Докато лудите за AJAX HTML5 уеб приложения могат да имат твърде много движещи се части, те са страхотни и много ефективни. След като JavaScript кодът е в кеша на браузъра, единственото нещо, което се движи по кабелите, са новите данни. Няма много HTML маркиране и няма многократни пътувания за изтегляне на цялата страница. Само данните са се променили. Ако сте готови да отделите време за създаване на елегантно уеб приложение от страна на браузъра, има голяма печалба. Node.js е оптимизиран да доставя данните и само данните чрез уеб услуги. Ако приложението ви е сложно и богато на данни, това е добра основа за ефективна доставка.

Къде PHP печели: SQL

PHP е създаден, за да съществува съвместно с MySQL и многобройните му варианти, като MariaDB. Ако MySQL не е точно прав, има други страхотни бази данни на SQL от Oracle и Microsoft. Вашият код може да превключи с няколко промени във вашите заявки. Огромният SQL свят не свършва по границите си. Някои от най-стабилните, добре разработени кодове ще взаимодействат със SQL база данни, което означава, че цялата тази мощност може лесно да бъде интегрирана в PHP проект. Може да не е едно перфектно, щастливо семейство, но е голямо. Не само това, но светът на базата данни бавно се подобрява, тъй като разработчиците намират начини да добавят повече интелигентност към базата данни, така че не е нужно да работите толкова усилено.

Където Node.js печели: JSON

Ако трябва да имате достъп до SQL, Node.js има библиотеки за това. Но Node.js говори и JSON, езиковата франка за взаимодействие с много от най-новите бази данни NoSQL. Това не означава, че не можете да получите JSON библиотеки за вашия PHP стек, но има нещо плавно в простотата на работа с JSON при използване на JavaScript. Това е един синтаксис от браузър до уеб сървър до база данни. Дебелото черво и къдравите скоби навсякъде работят по един и същи начин. Само това ще ви спести от часове на разочарование.

Къде PHP печели: Скорост на кодиране

За повечето разработчици писането на PHP за уеб приложения се чувства по-бързо: без компилатори, без разполагане, без JAR файлове или препроцесори - просто вашият любим редактор и някои PHP файлове в директория. Пробегът ви ще варира, но когато става въпрос за бързо разбиване на проект, PHP е добър инструмент за използване.

Където Node.js печели: Скорост на приложението

Писането на JavaScript код е малко по-трудно, когато броите къдрави скоби и скоби, но когато е готово, вашият Node.js код може да лети. Механизмът за обратно извикване е брилянтен, защото ви спестява от жонглиране с нишките. Ядрото е добре изградено и проектирано да направи всичко това за вас. Не е ли това, което всеки иска?

Къде PHP печели: Състезание

Битката за сърцата и умовете на разработчиците на PHP все още се развива. Екипът на HHVM и Zend работят усилено, за да доставят бърз код за всички. Появяват се независими бенчмаркове и всички натискат кодовите основи до краен предел. Това означава само по-добро представяне.

Където Node.js печели: Солидарност

Наистина ли искате две различни кодови бази? Разбира се, конкуренцията помага, но фрагментацията скоро следва. Какво се случва, когато вашият код работи само на един от двата? Състезанието не носи никаква полза, ако трябва да прекарате седмици или месеци в пренаписване на кода си. Докато Node.js преживя собственото си раздробяване преди няколко години, с пускането на io.js, Node.js вселената се събра отново, давайки му такава езикова солидарност, за която разработчиците на PHP скоро може да копнеят.

Къде PHP печели: Основни приложения

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

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

Където Node.js печели: Богатство

Лудвиг Мис ван дер Рое, архитектът на сградите, веднъж каза: „По-малкото е повече.“ Робърт Вентури, друг архитект, дойде и отвърна: „По-малко е скучно.“ Смартфоните имат повече мощност, отколкото стая, пълна с компютри Cray. На настолните компютри има видеокарти с множество вентилатори, за да се охладят по време на цялата обработка. Защо трябва да събличаме кода си и да живеем като жертва на ерата на депресията в романа на Щайнбек? Удрям го на живот. Големите, лъскави уебсайтове, пълни с JavaScript код, привличат вниманието, драматични и най-вече забавни. Разбира се, че е неприлично да се губи толкова много честотна лента за няколко бита данни, но честотната лента никога не е била по-евтина. Живей малко!

Където и двамата печелят: Без глава

Думата „без глава“ се отнася до PHP кода, работещ на сървъра. Напоследък някои от най-добрите PHP приложения като Drupal надникнаха през пътеката и излязоха изумени от усъвършенстваните потребителски интерфейси, изградени от JavaScript рамките като React, Angular или Vue. Вместо да се опитват да се конкурират с тях, те отстъпват контрола над клиента и се концентрират върху това да свършат добра работа с гръб на сървъра.

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

Това може да няма смисъл за някой, който започва от нулата, но ако години наред разчитате на PHP и искате да вървите постепенно напред, това може да бъде щастлив компромис.

Където и двете печелят: Микроуслуги и без сървъри

Нарастващите микросервизи или безсървърни парадигми предлагат начин за JavaScript и PHP код да съжителстват сървъра и да се разбират. И двете решения разделят работата на десетки по-малки услуги или функции и те могат да работят независимо и да останат в своите платна. Някои части, обикновено по-старите и най-стабилните раздели на приложението, могат да стартират PHP. Останалите части, често по-новите, ще бъдат написани в Node.js. Езикът на POSTили GETможе да бъде лингва франка, който ги обединява всички.