Node.js vs PHP: En episk kamp för utvecklarens mindshare

Det är en klassisk Hollywood-plot: striden mellan två gamla vänner som gick på olika sätt. Ofta börjar friktionen när en vän väcker intresse för vad som alltid varit den andra kamratens outtalade domän. I programmeringsspråkversionen av den här filmen är det introduktionen av Node.js som förvandlar kompisflickan till en motvillig match: PHP och JavaScript, två partners som en gång styrde internet tillsammans men nu utmanar det för utvecklarnas sinnesandel.

Förr i tiden var partnerskapet enkelt. JavaScript hanterade små detaljer i webbläsaren, medan PHP hanterade alla serverns uppgifter mellan port 80 och MySQL. Det var en lycklig union som fortsätter att stödja många viktiga delar av internet. Mellan WordPress, Drupal och Facebook kan människor knappast gå en minut på nätet utan att stöta på PHP.

Då upptäckte något smart barn att han kunde få JavaScript att köras på servern. Plötsligt var det inget behov av att använda PHP för att bygga nästa generation av serverstackar. Ett språk var allt som krävs för att bygga Node.js och ramarna som körs på klienten. ”JavaScript överallt” blev mantrat för vissa.

Sedan upptäckten har JavaScript exploderat. Node.js-utvecklare kan nu välja mellan en ständigt växande samling av utmärkta ramar och byggnadsställningar: React, Vue, Express, Angular, Meteor och mer. Listan är lång och det största problemet är att välja mellan utmärkta alternativ.

Vissa tittar på bommen i Node.js som ett bevis på att JavaScript vinner avgörande, och det finns gott om rådata för att stärka den uppfattningen. GitHub rapporterar att JavaScript är det mest populära språket i sin samling av förvar, och JavaScripts kyssande kusin, TypeScript, växer också snabbt. Många av de coolaste projekten är skrivna i JavaScript och många av de mest populära hashtagsna hänvisar till det. PHP har under tiden glidit från tredje plats till fjärde i denna ranking och det har troligen glidit ännu mer i antalet pressmeddelanden, produktutbyggnader och andra starkt marknadsförda ögonblick.

Men hype bleknar och programvara kan fortsätta i årtionden. Det mesta av PHP-kodbasen kommer inte att migrera och den fortsätter att servera stora delar av texten vi läser varje dag. Enligt vissa uppskattningar börjar 40 procent av sidorna vi ser, i någon form, med PHP. En del av detta beror på att PHP fortsätter att återfödas. Under de senaste åren har tarmarna i systemen som kör PHP skrivits om helt. Det är inte samma PHP-kod som körde din farförälders webbplats.

PHP: s zippy just-in-time kompilator levererar svar snabbare än någonsin tack vare samma smarta tekniker som drivit Node.js-revolutionen. Nu erbjuder PHP 7.2 och HHVM många av samma smarta on-the-fly optimeringar som V8 förde till Chrome och Node.js. Inte bara det, men HHVM har Hack, en smart PHP-dialekt som erbjuder fullt stöd för sofistikerade programmeringsfunktioner som lambdas, generics och samlingar. Så om du behöver dessa funktioner behöver du inte söka efter en mer fullfjädrad stack.

Naturligtvis är slutet inte skrivet än. För varje kodare som gnider om renhet och ungdomar i Node.js och enkelheten i JavaScript överallt, finns det en annan som är nöjd med den djupa kodbasen och den länge förstådda stabiliteten i PHP. Kommer den gamla kodaren att slå tillbaka serverns uppstart? Kommer JavaScript att störta sin gamla vän för att uppnå världsherravälde? Lägg en sats popcorn i mikrovågsugnen och luta dig tillbaka.

Där PHP vinner: Blandar kod med innehåll

Du skriver med, häller tankar i text för din webbplats, och du vill lägga till en gren i processen, ett litet if-then-uttalande för att få det att se snyggt ut, säg beroende på någon parameter i webbadressen. Eller kanske du vill blanda i text eller data från en databas. Med PHP öppnar du de magiska PHP-taggarna och börjar skriva kod inom några sekunder. Inget behov av mallar - allt är en mall! Inget behov av extra filer eller detaljerade arkitekturer, bara programmerbar logistisk kraft till hands.

Där Node vinner: Separerar oro

Att blanda kod med innehåll är en krycka som kan leda till att du förlamar dig. Visst, det är kul att blanda in kod med HTML de första två eller tre gånger du gör det. Men snart blir din kodbas en trasslig logik. Verkliga programmerare lägger till struktur och separerar det kosmetiska lagret från det logiska lagret. Det är renare för nya programmerare att förstå och lättare att underhålla. Ramarna som körs på Node.js är byggda av programmerare som vet att livet är bättre när modellen, vyn och styrenheten är separata.

Där PHP vinner: Djup kodbas

Webben är fylld med PHP-kod. De mest populära plattformarna för att bygga webbplatser (WordPress, Drupal, Joomla) är skrivna i PHP. Plattformarna är inte bara öppen källkod, men det är också de flesta av deras plugins. Det finns PHP-kod överallt, och det väntar på att du laddar ner, modifierar och använder för dina behov.

Där Node vinner: Mer moderna funktioner

Visst, det finns tusentals fantastiska open source PHP-filer, men vissa är 12-åriga WordPress-plugin-program som hoppas och ber att någon kommer att ladda ner dem. För varje modern version av Symfony finns det ett dammigt, länge bortglömt bibliotek som ingen uppdaterar.

Vem vill spendera timmar, dagar eller veckor på att apa med kod som inte har uppdaterats på flera år? Node.js-plugin-program är inte bara nyare, de byggdes med full kunskap om de senaste arkitektoniska metoderna. De byggdes av programmerare som förstår att moderna webbappar borde driva det mesta av intelligensen till klienten.

Och medan JavaScript har många små idiosynkrasier som gör några galna, är det för det mesta ett modernt språk som har en modern syntax och några användbara funktioner som stängningar. Du kan konfigurera om och förlänga det enkelt, vilket möjliggör kraftfulla bibliotek som jQuery. Du kan skicka funktioner runt som objekt. Varför begränsa dig själv?

Där PHP vinner: Enkelhet (typ av)

Det finns inte mycket med PHP: några variabler och grundläggande funktioner för att jonglera strängar och siffror. Det är ett tunt lager som inte gör så mycket förutom att flytta data från port 80 till databasen och tillbaka. Det är vad den ska göra. En modern databas är ett magiskt verktyg, och det är vettigt att lämna tunga lyft åt den. PHP är rätt komplexitet för ett jobb som inte ska vara komplext.

Om du är en programmerare som vill göra mer än att interagera med en databas och formatera resultaten kan du nu göra mer med PHP utan att hålla näsan. Facebooks HHVM lägger till stöd för Hack, ett komplett språk fyllt med moderna funktioner som typkommentarer, generika och lambdauttryck. Att använda detta begränsar din kod till att bara köras på HHVM, men det är inte det värsta i världen. Det är väldigt snabbt.

Där Node vinner: Dussintals språkalternativ

Om PHP-användare är glada över att få tillgång till Hack, bör de överväga att flytta till Node.js-världen eftersom många stora språk kan korssamlas för att köras i JavaScript. Det finns välkända alternativ som Java, C # eller Lisp och dussintals andra som Scala, OCaml och Haskell. Det finns till och med gåvor för nostalgiska älskare av BASIC eller Pascal. Den här listan över språk som sammanställs till JavaScript från Jeremy Ashkenas är ganska omfattande. Plus JavaScript-kusiner som TypeScript och CoffeeScript erbjuder lite olika och förbättrade tillvägagångssätt för samma spel.

Där PHP vinner: Ingen klientapp behövs

Allt prat om att använda samma språk i webbläsaren och på servern är trevligt, men tänk om du inte behöver använda något språk i webbläsaren? Vad händer om du skickar data i HTML-form? Vad händer om du bygger en spartansk statisk webbplats för att leverera det som behövs utan den interaktiva blingen? Webbläsaren dyker upp och det finns inga huvudvärk eller fel som orsakas av felaktiga JavaScript-trådar som försöker skapa en sida i webbläsaren från två dussin webbtjänstsamtal. Ren HTML fungerar oftare än någonting annat, och PHP är optimerad för att skapa det. Varför bry sig om JavaScript i webbläsaren? Bygg upp allt på servern och undvik att överbelasta den lilla webbläsaren på den lilla telefonen.

Där Node vinner: Serviceanrop är tunnare än HTML-fet PHP-samtal

Medan AJAX-galen HTML5-webbappar kan ha för många rörliga delar är de coola och mycket effektiva. När JavaScript-koden är i webbläsarens cache är det enda som rör sig längs ledningarna de nya uppgifterna. Det finns inte massor av HTML-markering, och det finns inga upprepade resor för att ladda ner hela sidan. Endast uppgifterna har ändrats. Om du är villig att lägga dig tid att skapa en smart webapp på webbläsarsidan finns det en stor vinst. Node.js är optimerad för att leverera data och endast data via webbtjänster. Om din app är komplex och datarik är den en bra grund för effektiv leverans.

Där PHP vinner: SQL

PHP byggdes för att samexistera med MySQL och dess många varianter, som MariaDB. Om MySQL inte är helt rätt finns det andra fantastiska SQL-databaser från Oracle och Microsoft. Din kod kan bytas med några ändringar i dina frågor. Den stora SQL-världen slutar inte vid sina gränser. Några av de mest stabila, välutvecklade koden kommer att gränssnitt med en SQL-databas, vilket betyder att all den kraften också enkelt kan integreras i ett PHP-projekt. Det kanske inte är en perfekt, lycklig familj, men det är en stor familj. Inte bara det, men databasvärlden blir sakta bättre när utvecklare hittar sätt att lägga till mer intelligens i databasen så att du inte behöver arbeta lika hårt.

Där Node.js vinner: JSON

Om du måste ha tillgång till SQL har Node.js bibliotek för att göra det. Men Node.js talar också JSON, lingua franca för att interagera med många av de senaste NoSQL-databaserna. Det är inte att säga att du inte kan få JSON-bibliotek för din PHP-stack, men det är något flytande med enkelheten att arbeta med JSON när du använder JavaScript. Det är en syntax från webbläsare till webbserver till databas. Kolonerna och de lockiga fästena fungerar på samma sätt överallt. Det ensamma kommer att rädda dig från timmar av frustration.

Var PHP vinner: Kodningshastighet

För de flesta utvecklare känns det snabbare att skriva PHP för webbappar: inga kompilatorer, ingen distribution, inga JAR-filer eller förprocessorer - helt enkelt din favoritredigerare och några PHP-filer i en katalog. Din körsträcka kommer att variera, men när det gäller att slå ett projekt ihop snabbt är PHP ett bra verktyg att använda.

Där Node.js vinner: Applikationshastighet

Att skriva JavaScript-kod är lite svårare när du räknar lockiga parenteser och parenteser, men när det är klart kan din Node.js-kod flyga. Återuppringningsmekanismen är lysande eftersom den sparar dig från att jonglera trådarna. Kärnan är välbyggd och utformad för att göra allt för dig. Är det inte vad alla vill ha?

Där PHP vinner: Tävling

Kampen om hjärtan och sinnen hos PHP-utvecklare pågår fortfarande. HHVM-teamet och Zend-teamet arbetar hårt för att leverera snabb kod för alla. Oberoende riktmärken visas och alla driver kodbaserna till det yttersta. Detta innebär bara bättre prestanda.

Där Node.js vinner: Solidaritet

Vill du verkligen ha två olika kodbaser? Visst, konkurrens hjälper, men fragmentering följer snart. Vad händer när din kod bara körs på en av de två? Tävling gör inget bra om du måste spendera veckor eller månader på att skriva om din kod. Medan Node.js upplevde sin egen splittring för några år tillbaka, med lanseringen av io.js, har Node.js-universum sedan dess återförenats, vilket ger den den typ av språksolidaritet som PHP-utvecklare snart kan längta efter.

Var PHP vinner: Grundläggande appar

Under de senaste åren har några utvecklare startat webbappar och befunnit sig frustrerade över det tröga beteendet. JavaScript som driver alla dessa rörliga bitar kan vara tiotusentals byte, ibland hundratusentals. När alla paket anländer måste de analyseras, sammanställas och slutligen köras - allt för att leverera några byte som temperatur och prognos.

Motreaktionen mot denna rococco-galenskap finns i de lag som bygger statiska webbplatsgeneratorer (463 vid skrivandet) och avskalade webbsidor i AMP-format. PHP är ett naturligt val för alla team som vill koncentrera intelligensen på servern så att klienten inte blir överbelastad.

Där Node.js vinner: Richness

Ludwig Mies van der Rohe, byggnadsarkitekten, sa en gång: "Mindre är mer." Robert Venturi, en annan arkitekt, kom och svarade: "Less is a bore." Smarttelefonerna har mer kraft än ett rum fullt av Cray-datorer. Skrivbordet har grafikkort med flera fläktar för att hålla dem svala under hela behandlingen. Varför ska vi ta bort vår kod och leva som ett offer från depressionen i en Steinbeck-roman? Lev upp det. Stora, snygga webbplatser fulla av JavaScript-kod är iögonfallande, dramatiska och framför allt roliga. Visst är det lite obscent att slösa så mycket bandbredd på några databitar, men bandbredd har aldrig varit billigare. Lev lite!

Där båda vinner: Headless

Ordet "headless" avser PHP-koden som körs på servern. Nyligen har några av de bästa PHP-applikationerna som Drupal tittat över gången och kommit häpna över de sofistikerade användargränssnitt som byggts av JavaScript-ramverk som React, Angular eller Vue. Istället för att försöka konkurrera med dem, avstår de kontrollen över klienten och koncentrerar sig på att göra ett bra jobb med back-end på servern.

Om du har en hel del investerat i PHP-kod som körs på servern kan det här vara ett sätt att njuta av det bästa av båda tillvägagångssätten. Den gamla, etablerade PHP-koden fungerar som en ytterdörr till databasen, dubbelkontrollerar förfrågningarna, rensar data och generellt tillhandahåller all affärslogik. Klientsidan är en progressiv webbapp skriven med det senaste JavaScript-ramverket. När den behöver information skickar den en AJAX-begäran till PHP-koden.

Det här kanske inte är vettigt för någon som börjar från grunden, men om du har litat på PHP i flera år och du vill gå framåt gradvis kan det vara en lycklig kompromiss.

Där båda vinner: Microservices och serverless

De stigande mikrotjänsterna eller serverlösa paradigmerna erbjuder ett sätt för JavaScript och PHP-kod att sambo servern och komma överens. Båda lösningarna delar upp arbetet i dussintals mindre tjänster eller funktioner och dessa kan köras självständigt och stanna kvar i sina banor. Vissa delar, vanligtvis de äldre och mest stabila delarna av appen, kan köra PHP. De andra delarna, ofta de nyare, kommer att skrivas i Node.js. Språket för POSTeller GETkan vara lingua franca som förenar dem alla.