Programmering

Node.js vs. PHP: En episk kamp om udviklerens mindshare

Det er et klassisk Hollywood-plot: kampen mellem to gamle venner, der gik hver for sig. Ofte begynder friktionen, når den ene kammerat giver anledning til interesse for, hvad der altid havde været den anden kamerats uudtalte domæne. I programmeringssprogversionen af ​​denne film er det introduktionen af ​​Node.js, der gør kammeratens flip til et modstridskamp: PHP og JavaScript, to partnere, der engang styrede internettet sammen, men nu hertug det for udviklernes tankegang.

I gamle dage var partnerskabet enkelt. JavaScript håndterede små detaljer i browseren, mens PHP administrerede alle serversides opgaver mellem port 80 og MySQL. Det var en lykkelig union, der fortsat støtter mange vigtige dele af internettet. Mellem WordPress, Drupal og Facebook kan folk næppe gå et øjeblik på internettet uden at løbe ind i PHP.

Derefter opdagede et smart barn, at han kunne få JavaScript til at køre på serveren. Pludselig var der ingen grund til at bruge PHP til at opbygge den næste generation af serverstakke. Et sprog var alt, hvad der kræves for at opbygge Node.js og de rammer, der kører på klienten. “JavaScript overalt” blev mantraet for nogle.

Siden denne opdagelse er JavaScript eksploderet. Node.js-udviklere kan nu vælge mellem en stadig voksende samling af fremragende rammer og stilladser: React, Vue, Express, Angular, Meteor og meget mere. Listen er lang, og det største problem er at vælge mellem fremragende muligheder.

Nogle ser på bommen i Node.js som bevis for, at JavaScript vinder afgørende, og der er masser af rådata, der styrker den opfattelse. GitHub rapporterer, at JavaScript er det mest populære sprog i sin samling af arkiver, og JavaScript's kyssende fætter, TypeScript, vokser også hurtigt. Mange af de sejeste projekter er skrevet i JavaScript, og mange af de mest populære hashtags henviser til det. PHP er i mellemtiden faldet fra tredjepladsen til fjerde i denne rangordning, og det er sandsynligvis faldet endnu mere i antallet af pressemeddelelser, produktudrulning og andre stærkt markedsførte øjeblikke.

Men hype falmer, og software kan leve i årtier. Det meste af PHP-kodebasen vil ikke migrere, og den serverer fortsat store dele af teksten, vi læser hver dag. Efter nogle skøn begynder 40 procent af de sider, vi ser, i en eller anden form med PHP. En del af dette skyldes, at PHP fortsætter med at blive genfødt. I de sidste par år er tarmene til de systemer, der kører PHP, blevet omskrevet fuldstændigt. Det er ikke den samme PHP-kode, der kørte din bedsteforældres websted.

PHP's zippy, just-in-time compiler leverer svar hurtigere end nogensinde takket være de samme smarte teknikker, der drev Node.js-revolutionen. Nu tilbyder PHP 7.2 og HHVM mange af de samme smarte on-the-fly optimeringer, som V8 bragte til Chrome og Node.js. Ikke kun det, men HHVM har Hack, en klog PHP-dialekt, der tilbyder fuld understøttelse af sofistikerede programmeringsfunktioner såsom lambdas, generics og samlinger. Så hvis du har brug for disse funktioner, behøver du ikke søge efter en mere komplet stak.

Afslutningen er naturligvis ikke skrevet endnu. For hver koder, der kaster om renheden og ungdommen i Node.js og enkelheden i JavaScript overalt, er der en anden, der er tilfreds med den dybe kodebase og den længe forståede PHP-stabilitet. Vil den gamle codger slå serverens startstart tilbage? Vil JavaScript vælte sin gamle ven for at opnå verdensherredømme? Læg endnu et parti popcorn i mikrobølgeovnen, og læn dig tilbage.

Hvor PHP vinder: Blanding af kode med indhold

Du skriver sammen, hælder tanker i tekst til dit websted, og du vil tilføje en gren til processen, en lille if-then-erklæring for at få det til at se smukt ud, afhængigt af en eller anden parameter i URL-adressen. Eller måske vil du blande tekst eller data fra en database. Med PHP åbner du de magiske PHP-tags og begynder at skrive kode inden for få sekunder. Intet behov for skabeloner - alt er en skabelon! Intet behov for ekstra filer eller detaljerede arkitekturer, kun programmerbar logistisk strøm lige ved hånden.

Hvor Node vinder: Adskiller bekymringer

At blande kode med indhold er en krykke, der kan ende med at lamme dig. Sikker på, det er sjovt at blande kode ind med HTML de første to eller tre gange, du gør det. Men snart bliver din kodebase et sammenfiltret rod af logik. Ægte programmører tilføjer struktur og adskiller det kosmetiske lag fra det logiske lag. Det er renere for nye programmører at forstå og lettere at vedligeholde. Rammerne, der kører på Node.js, er bygget af programmører, der ved, at livet er bedre, når modellen, visningen og controlleren er adskilt.

Hvor PHP vinder: Dyb kodebase

Internettet er fyldt med PHP-kode. De mest populære platforme til opbygning af websteder (WordPress, Drupal, Joomla) er skrevet i PHP. Ikke kun er platformene open source, men det er også de fleste af deres plugins. Der er PHP-kode overalt, og den venter på, at du downloader, ændrer og bruger til dine behov.

Hvor Node vinder: Mere moderne funktioner

Sikker på, der er tusindvis af fantastiske open source PHP-filer, men nogle er 12-årige WordPress-plug-ins, der håber og beder om, at nogen vil downloade dem. For hver moderne version af Symfony er der et støvet, længe glemt bibliotek, som ingen opdaterer.

Hvem vil bruge timer, dage eller uger på at abe med kode, der ikke er blevet opdateret i år? Node.js-plug-ins er ikke kun nyere, de blev bygget med fuld viden om de nyeste arkitektoniske tilgange. De blev bygget af programmører, der forstår, at moderne webapps skal skubbe det meste af intelligensen til klienten.

Og mens JavaScript har mange små idiosynkrasier, der gør nogle gale, er det for det meste et moderne sprog, der har en moderne syntaks og et par nyttige funktioner som lukninger. Du kan nemt konfigurere og udvide det, hvilket gør det muligt med kraftige biblioteker som jQuery. Du kan videregive funktioner rundt som objekter. Hvorfor begrænse dig selv?

Hvor PHP vinder: Enkelhed (slags)

Der er ikke meget ved PHP: et par variabler og grundlæggende funktioner til jonglering af strenge og tal. Det er et tyndt lag, der ikke gør meget, undtagen at flytte dataene fra port 80 til databasen og tilbage. Det er hvad det skal gøre. En moderne database er et magisk værktøj, og det giver mening at overlade det tunge løft til det. PHP er den rigtige mængde kompleksitet til et job, der ikke formodes at være komplekst.

Så igen, hvis du er en programmør, der ønsker at gøre mere end at interagere med en database og formatere resultaterne, kan du nu gøre mere med PHP uden at holde din næse. Facebooks HHVM tilføjer support til Hack, et komplet sprog fyldt med moderne funktioner som typebemærkninger, generiske og lambda-udtryk. Brug af dette begrænser din kode til kun at køre på HHVM, men det er ikke det værste i verden. Det er meget hurtigt.

Hvor Node vinder: Snesevis af sprogindstillinger

Hvis PHP-brugere er glade for at få adgang til Hack, bør de overveje at flytte til Node.js-verdenen, fordi mange store sprog kan krydssamles for at køre i JavaScript. Der er kendte muligheder som Java, C # eller Lisp og snesevis af andre som Scala, OCaml og Haskell. Der er endda gaver til nostalgiske elskere af BASIC eller Pascal. Denne liste over sprog, der kompileres til JavaScript fra Jeremy Ashkenas, er ret omfattende. Plus JavaScript fætre som TypeScript og CoffeeScript tilbyder lidt forskellige og forbedrede tilgange til det samme spil.

Hvor PHP vinder: Ingen klientapp nødvendig

Alt snak om at bruge det samme sprog i browseren og på serveren er dejligt, men hvad hvis du ikke behøver at bruge noget sprog i browseren? Hvad hvis du sender dataene i HTML-form? Hvad hvis du bygger et spartansk, statisk websted til strengt at levere det, der er nødvendigt uden den interaktive bling? Browseren popper det op, og der er ingen hovedpine eller fejl, der skyldes misfiring af JavaScript-tråde, der forsøger at oprette en side i browseren fra to dusin webservicekald. Ren HTML fungerer oftere end noget andet, og PHP er optimeret til at skabe det. Hvorfor gider med JavaScript i browseren? Opbyg alt på serveren, og undgå at overbelaste den lille browser på den lille telefon.

Hvor Node vinder: Serviceopkald er tyndere end HTML-fede PHP-opkald

Mens AJAX-skøre HTML5-webapps kan have for mange bevægelige dele, er de seje - og meget effektive. Når JavaScript-koden er i browserens cache, er det eneste, der bevæger sig langs ledningerne, de nye data. Der er ikke masser af HTML-markering, og der er ingen gentagne ture for at downloade hele siden. Kun dataene er ændret. Hvis du er villig til at bruge tid til at oprette en glat webapp på browsersiden, er der en stor gevinst. Node.js er optimeret til at levere dataene og kun dataene via webservices. Hvis din app er kompleks og datarig, er det et godt fundament for effektiv levering.

Hvor PHP vinder: SQL

PHP blev bygget til at eksistere sammen med MySQL og dens mange varianter, som MariaDB. Hvis MySQL ikke er helt korrekt, er der andre fantastiske SQL-databaser fra Oracle og Microsoft. Din kode kan skifte med et par ændringer i dine forespørgsler. Den store SQL-verden slutter ikke ved dens grænser. Nogle af de mest stabile, veludviklede koder vil interface med en SQL-database, hvilket betyder, at al den magt også let kan integreres i et PHP-projekt. Det er måske ikke en perfekt, lykkelig familie, men det er en stor. Ikke kun det, men databaseverdenen bliver langsomt bedre, da udviklere finder måder at tilføje mere intelligens til databasen, så du ikke behøver at arbejde så hårdt.

Hvor Node.js vinder: JSON

Hvis du skal have adgang til SQL, har Node.js biblioteker til at gøre det. Men Node.js taler også JSON, lingua franca for at interagere med mange af de nyeste NoSQL-databaser. Det betyder ikke, at du ikke kan få JSON-biblioteker til din PHP-stak, men der er noget flydende ved enkelheden ved at arbejde med JSON, når du bruger JavaScript. Det er en syntaks fra browser til webserver til database. Kolonerne og de krøllede parenteser fungerer på samme måde overalt. Det alene vil redde dig fra timevis af frustration.

Hvor PHP vinder: Kodningshastighed

For de fleste udviklere føles det hurtigere at skrive PHP til webapps: ingen compilere, ingen implementering, ingen JAR-filer eller præprocessorer - simpelthen din yndlingseditor og nogle PHP-filer i et bibliotek. Din kilometertal vil variere, men når det kommer til at slå et projekt sammen hurtigt, er PHP et godt værktøj at bruge.

Hvor Node.js vinder: Applikationshastighed

At skrive JavaScript-kode er lidt sværere, når du tæller krøllede parenteser og parenteser, men når den er færdig, kan din Node.js-kode flyve. Tilbagekaldelsesmekanismen er strålende, fordi den sparer dig for at jonglere med trådene. Kernen er velbygget og designet til at gøre alt det for dig. Er det ikke det, som alle vil have?

Hvor PHP vinder: Konkurrence

Kampen om PHP-udvikleres hjerter og hjerner udfolder stadig. HHVM-teamet og Zend-teamet arbejder hårdt på at levere hurtig kode til alle. Uafhængige benchmarks vises, og alle skubber kodebaserne til det yderste. Dette betyder kun bedre ydeevne.

Hvor Node.js vinder: Solidaritet

Vil du virkelig have to forskellige kodebaser? Sikker på, konkurrence hjælper, men fragmentering følger snart. Hvad sker der, når din kode kun kører på en af ​​de to? Konkurrence gør ikke noget godt, hvis du skal bruge uger eller måneder på at omskrive din kode. Mens Node.js oplevede sin egen splintring for et par år tilbage, med lanceringen af ​​io.js, er Node.js-universet siden genforenet, hvilket giver det den slags sproglig solidaritet, som PHP-udviklere måske snart længes efter.

Hvor PHP vinder: Grundlæggende apps

I de sidste par år har nogle få udviklere startet webapps og fundet sig frustrerede over den trage adfærd. JavaScript, der driver alle disse bevægelige stykker, kan være titusinder af bytes, undertiden hundreder af tusinder. Når alle pakkerne ankommer, skal de parses, kompileres og endelig udføres - alt sammen for at levere et par bytes som temperaturen og prognosen.

Tilbageslagene mod denne rococco-sindssyge kan findes i holdene, der bygger statiske stedgeneratorer (463 ved denne skrivning) og strippede websider i AMP-format. PHP er et naturligt valg for ethvert hold, der ønsker at koncentrere intelligensen på serveren, så klienten ikke er overbelastet.

Hvor Node.js vinder: Richness

Ludwig Mies van der Rohe, bygherrens arkitekt, sagde engang: "Less is more." Robert Venturi, en anden arkitekt, kom og svarede: "Less is a bore." Smartphones har mere strøm end et rum fyldt med Cray-computere. Desktops har skærmkort med flere fans for at holde dem kølige under hele behandlingen. Hvorfor skal vi fjerne vores kode og leve som et offer fra en depression i en Steinbeck-roman? Lev det op. Store, smarte websteder fulde af JavaScript-kode er iøjnefaldende, dramatiske og mest af alt sjove. Sikker på, at det er lidt uanstændigt at spilde så meget båndbredde på et par bits data, men båndbredde har aldrig været billigere. Lev lidt!

Hvor begge vinder: Headless

Ordet "headless" henviser til PHP-koden, der kører på serveren. For nylig har nogle af de bedste PHP-applikationer som Drupal kigget over gangen og kommer forbavset over de sofistikerede brugergrænseflader, der er bygget af JavaScript-rammerne som React, Angular eller Vue. I stedet for at prøve at konkurrere med dem, afstår de kontrol over klienten og koncentrerer sig om at udføre et godt stykke arbejde med back-end på serveren.

Hvis du har en hel del investeret i PHP-kode, der kører på serveren, kan dette være en måde at nyde det bedste fra begge tilgange. Den gamle, etablerede PHP-kode fungerer som en hoveddør til databasen, dobbelttjekker anmodningerne, rydder op i dataene og leverer generelt hele forretningslogikken. Kundesiden er en progressiv webapp skrevet med den nyeste JavaScript-ramme. Når den har brug for information, sender den en AJAX-anmodning til PHP-koden.

Dette giver måske ikke mening for nogen, der starter fra bunden, men hvis du har stole på PHP i årevis, og du vil komme gradvist frem, kan dette være et godt kompromis.

Hvor begge vinder: Microservices og serverless

De stigende mikroservice- eller serverløse paradigmer tilbyder en måde, hvorpå JavaScript og PHP-kode kan samle serveren og komme sammen. Begge løsninger opdeler arbejdet i snesevis af mindre tjenester eller funktioner, og disse kan køre uafhængigt og forblive i deres baner. Nogle dele, normalt de ældre og mest stabile dele af appen, kan køre PHP. De andre dele, ofte de nyere, vil blive skrevet i Node.js. Sprog for STOLPE eller kan være lingua franca, der forener dem alle.

$config[zx-auto] not found$config[zx-overlay] not found