Programmering

Node.js vs. PHP: En episk kamp for mindshare for utviklere

Det er et klassisk Hollywood-plot: kampen mellom to gamle venner som gikk hver sin vei. Ofte begynner friksjonen når den ene vennen vekker interesse for det som alltid hadde vært den andre vennens uuttalte domene. I programmeringsspråkversjonen av denne filmen er det introduksjonen av Node.js som gjør kompisflippen til en uvilsomhetskamp: PHP og JavaScript, to partnere som en gang styrte internett sammen, men som nå utpeker det for utviklernes sinnsandel.

I gamle dager var partnerskapet enkelt. JavaScript håndterte små detaljer i nettleseren, mens PHP klarte alle serveroppgavene mellom port 80 og MySQL. Det var en lykkelig union som fortsetter å støtte mange viktige deler av internett. Mellom WordPress, Drupal og Facebook kan folk knapt gå et øyeblikk på nettet uten å støte på PHP.

Da oppdaget et smart barn at han kunne få JavaScript til å kjøre på serveren. Plutselig var det ikke behov for å bruke PHP til å bygge neste generasjon serverstabler. Ett språk var alt som trengs for å bygge Node.js og rammene som kjører på klienten. “JavaScript overalt” ble mantraet for noen.

Siden oppdagelsen har JavaScript eksplodert. Node.js-utviklere kan nå velge mellom en stadig voksende samling av utmerkede rammer og stillas: React, Vue, Express, Angular, Meteor og mer. Listen er lang, og det største problemet er å velge mellom gode alternativer.

Noen ser på bommen i Node.js som et bevis på at JavaScript vinner avgjørende, og det er mange rådata som styrker den visningen. GitHub rapporterer at JavaScript er det mest populære språket i samlingen av arkiver, og JavaScript's kyssende fetter, TypeScript, vokser også raskt. Mange av de kuleste prosjektene er skrevet i JavaScript, og mange av de mest populære hashtags refererer til det. I mellomtiden har PHP gått fra tredje plass til fjerde i denne rangeringen, og det har sannsynligvis gått enda mer i antall pressemeldinger, produktutbygginger og andre sterkt markedsførte øyeblikk.

Men hype blekner og programvare kan leve i flere tiår. Det meste av PHP-kodebasen vil ikke migrere, og den fortsetter å tjene store deler av teksten vi leser hver dag. Etter noen estimater begynner 40 prosent av sidene vi ser, i en eller annen form, med PHP. En del av dette er fordi PHP fortsetter å bli gjenfødt. De siste årene har tarmene til systemene som kjører PHP blitt fullstendig omskrevet. Det er ikke den samme PHP-koden som kjørte besteforeldres nettsted.

PHP's zippy, just-in-time kompilator leverer svar raskere enn noen gang takket være de samme smarte teknikkene som drev Node.js-revolusjonen. Nå tilbyr PHP 7.2 og HHVM mange av de samme smarte on-the-fly optimaliseringene som V8 brakte til Chrome og Node.js. Ikke bare det, men HHVM har Hack, en smart PHP-dialekt som tilbyr full støtte for sofistikerte programmeringsfunksjoner som lambdas, generikk og samlinger. Så hvis du trenger disse funksjonene, trenger du ikke søke etter en mer fullverdig stabel.

Avslutningen er selvfølgelig ikke skrevet ennå. For hver koder som kaster om renheten og ungdommen til Node.js og enkelheten til JavaScript overalt, er det en annen som er fornøyd med den dype kodebasen og den lenge forståte stabiliteten til PHP. Vil den gamle koderen slå tilbake oppstartssiden på serveren? Vil JavaScript velte sin gamle venn for å oppnå verdensherredømme? Legg en ny mengde popcorn i mikrobølgeovnen og len deg tilbake.

Hvor PHP vinner: Blanding av kode med innhold

Du skriver sammen, skjenker tanker i tekst for nettstedet ditt, og du vil legge til en gren i prosessen, en liten if-then-uttalelse for å få den til å se pen ut, si, avhengig av noen parameter i URL-en. Eller kanskje du vil blande inn tekst eller data fra en database. Med PHP åpner du de magiske PHP-kodene og begynner å skrive kode på få sekunder. Ingen behov for maler - alt er en mal! Du trenger ikke ekstra filer eller forseggjorte arkitekturer, bare programmerbar logistikkraft innen fingertuppene.

Hvor Node vinner: Separerer bekymringer

Å blande kode med innhold er en krykke som kan ende opp med å lamme deg. Visst, det er gøy å blande kode med HTML de to første eller to gangene du gjør det. Men snart blir kodebasen din et forvirret rot av logikk. Ekte programmerere legger til struktur og skiller det kosmetiske laget fra det logiske laget. Det er renere for nye programmerere å forstå og lettere å vedlikeholde. Rammene som kjører på Node.js er bygd av programmerere som vet at livet er bedre når modellen, visningen og kontrolleren er separate.

Hvor PHP vinner: Dyp kodebase

Internett er fylt med PHP-kode. De mest populære plattformene for å bygge nettsteder (WordPress, Drupal, Joomla) er skrevet i PHP. Ikke bare er plattformene åpen kildekode, men det er også de fleste av deres plugins. Det er PHP-kode overalt, og det venter på at du skal laste ned, endre og bruke for dine behov.

Hvor Node vinner: Mer moderne funksjoner

Visst, det er tusenvis av flotte open source PHP-filer, men noen er 12 år gamle WordPress-plugin-moduler som håper og ber om at noen vil laste dem ned. For hver moderne versjon av Symfony er det et støvete, lenge glemt bibliotek som ingen oppdaterer.

Hvem vil bruke timer, dager eller uker på å ape med kode som ikke har blitt oppdatert på mange år? Plugins til Node.js er ikke bare nyere, de ble bygget med full kunnskap om de nyeste arkitektoniske tilnærmingene. De ble bygget av programmerere som forstår at moderne webapps skal skyve mest mulig intelligens til klienten.

Og mens JavaScript har mange små idiosynkrasier som gjør noen gal, er det for det meste et moderne språk som har en moderne syntaks og noen nyttige funksjoner som nedleggelser. Du kan omkonfigurere og utvide den enkelt, noe som muliggjør kraftige biblioteker som jQuery. Du kan sende funksjoner rundt som objekter. Hvorfor begrense deg selv?

Hvor PHP vinner: Enkelhet (slags)

Det er ikke mye å PHP: noen variabler og grunnleggende funksjoner for å sjonglere med strenger og tall. Det er et tynt lag som ikke gjør så mye bortsett fra å flytte dataene fra port 80 til databasen og tilbake. Det er hva den skal gjøre. En moderne database er et magisk verktøy, og det er fornuftig å overlate det tunge løftet. PHP er riktig mengde kompleksitet for en jobb som ikke skal være kompleks.

Så igjen, hvis du er en programmerer som vil gjøre mer enn å samhandle med en database og formatere resultatene, kan du nå gjøre mer med PHP uten å holde nesen. Facebooks HHVM legger til støtte for Hack, et komplett språk fylt med moderne funksjoner som typekommentarer, generiske og lambda-uttrykk. Ved å bruke dette begrenses koden din til å kjøre bare på HHVM, men det er ikke det verste i verden. Det er veldig raskt.

Hvor Node vinner: Dusinvis av språkalternativer

Hvis PHP-brukere er glade for å få tilgang til Hack, bør de vurdere å flytte til Node.js-verdenen fordi mange store språk kan kryss-kompileres for å kjøre i JavaScript. Det er kjente alternativer som Java, C # eller Lisp og dusinvis av andre som Scala, OCaml og Haskell. Det er til og med gaver til nostalgiske elskere av BASIC eller Pascal. Denne listen over språk som er samlet til JavaScript fra Jeremy Ashkenas er ganske omfattende. Pluss JavaScript-fettere som TypeScript og CoffeeScript tilbyr litt forskjellige og forbedrede tilnærminger til det samme spillet.

Hvor PHP vinner: Ingen klientapp nødvendig

Alt snakk om å bruke det samme språket i nettleseren og på serveren er hyggelig, men hva om du ikke trenger å bruke noe språk i nettleseren? Hva om du sender dataene i HTML-form? Hva om du bygger et spartansk, statisk nettsted for å levere det som trengs uten den interaktive blingen? Nettleseren spretter den opp, og det er ingen hodepine eller feil forårsaket av feil feiring av JavaScript-tråder som prøver å lage en side i nettleseren fra to dusin webtjenesteanrop. Ren HTML fungerer oftere enn noe annet, og PHP er optimalisert for å skape det. Hvorfor bry seg med JavaScript i nettleseren? Bygg opp alt på serveren og unngå å overbelaste den lille nettleseren på den lille telefonen.

Hvor Node vinner: Serviceanrop er tynnere enn HTML-fett PHP-samtaler

Mens AJAX-gale HTML5-nettapper kan ha for mange bevegelige deler, er de kule - og veldig effektive. Når JavaScript-koden er i nettleserens cache, er det eneste som beveger seg langs ledningene de nye dataene. Det er ikke massevis av HTML-markering, og det er ingen gjentatte turer for å laste ned hele siden. Bare dataene har endret seg. Hvis du er villig til å bruke tiden til å lage en smart nettapp på nettleseren, er det en stor gevinst. Node.js er optimalisert for å levere dataene og bare dataene via webtjenester. Hvis appen din er kompleks og datarik, er den et godt grunnlag for effektiv levering.

Hvor PHP vinner: SQL

PHP ble bygget for å eksistere samtidig med MySQL og dens mange varianter, som MariaDB. Hvis MySQL ikke er helt riktig, finnes det andre flotte SQL-databaser fra Oracle og Microsoft. Koden din kan byttes med noen få endringer i spørsmålene dine. Den store SQL-verdenen ender ikke ved grensene. Noen av de mest stabile, godt utviklede kodene vil grensesnittet med en SQL-database, noe som betyr at all den kraften også enkelt kan integreres i et PHP-prosjekt. Det er kanskje ikke en perfekt, lykkelig familie, men det er en stor familie. Ikke bare det, men databaseverdenen blir sakte bedre etter hvert som utviklere finner måter å legge til mer intelligens i databasen, slik at du ikke trenger å jobbe så hardt.

Hvor Node.js vinner: JSON

Hvis du må ha tilgang til SQL, har Node.js biblioteker for å gjøre det. Men Node.js snakker også JSON, lingua franca for å samhandle med mange av de nyeste NoSQL-databasene. Det er ikke å si at du ikke kan få JSON-biblioteker for PHP-stakken din, men det er noe flytende med enkelheten i å jobbe med JSON når du bruker JavaScript. Det er en syntaks fra nettleser til webserver til database. Kolonene og de krøllete parentesene fungerer på samme måte overalt. Det alene vil redde deg fra timer med frustrasjon.

Hvor PHP vinner: Kodningshastighet

For de fleste utviklere føles det raskere å skrive PHP for webapper: ingen kompilatorer, ingen distribusjon, ingen JAR-filer eller forprosessorer - bare favorittredigereren din og noen PHP-filer i en katalog. Kjørelengden din vil variere, men når det gjelder å slå et prosjekt raskt sammen, er PHP et godt verktøy å bruke.

Hvor Node.js vinner: Søknadshastighet

Å skrive JavaScript-kode er litt vanskeligere når du teller krøllete parenteser og parenteser, men når den er ferdig, kan Node.js-koden din fly. Tilbakemeldingsmekanismen er strålende fordi den sparer deg for å sjonglere med trådene. Kjernen er godt bygget og designet for å gjøre alt det for deg. Er det ikke det alle vil ha?

Hvor PHP vinner: Konkurranse

Kampen om hjerter og sinn fra PHP-utviklere utspiller seg fortsatt. HHVM-teamet og Zend-teamet jobber hardt for å levere rask kode til alle. Uavhengige referanser vises, og alle presser kodebasene til det ytterste. Dette betyr bare bedre ytelse.

Hvor Node.js vinner: Solidaritet

Vil du virkelig ha to forskjellige kodebaser? Klart, konkurranse hjelper, men fragmentering følger snart. Hva skjer når koden din bare kjører på en av de to? Konkurranse gjør ikke noe bra hvis du må bruke uker eller måneder på å skrive om koden. Mens Node.js opplevde sin egen splintring for noen år tilbake, med lanseringen av io.js, har Node.js-universet siden blitt gjenforent, noe som gir det den slags språksolidaritet som PHP-utviklere snart kan lengte etter.

Hvor PHP vinner: Grunnleggende apper

I løpet av de siste årene har noen få utviklere startet opp webapps og funnet frustrasjon over den svake oppførselen. JavaScriptet som driver alle disse bevegelige bitene, kan være titusenvis av byte, noen ganger hundretusener. Når alle pakkene ankommer, må de analyseres, kompileres og til slutt utføres - alt for å levere noen få byte som temperaturen og prognosen.

Tilbakeslaget mot denne rococco-galskapen finner du i teamene som bygger statiske nettstedsgeneratorer (463 ved denne skrivingen) og strippede nettsider i AMP-format. PHP er et naturlig valg for ethvert team som ønsker å konsentrere intelligensen på serveren, slik at klienten ikke blir overbelastet.

Hvor Node.js vinner: Richness

Ludwig Mies van der Rohe, bygningsarkitekten, sa en gang: "Less is more." Robert Venturi, en annen arkitekt, kom og svarte: "Less is a bore." Smarttelefonene har mer strøm enn et rom fullt av Cray-datamaskiner. Skrivebordene har skjermkort med flere fans for å holde dem kule under hele behandlingen. Hvorfor skal vi strippe koden vår og leve som et offer fra depresjonstiden i en Steinbeck-roman? Lev det opp. Store, glatte nettsteder fulle av JavaScript-kode er iøynefallende, dramatiske og mest av alt morsomme. Klart det er litt uanstendig å kaste bort så mye båndbredde på noen få databiter, men båndbredde har aldri vært billigere. Leve litt!

Hvor begge vinner: Hodeløs

Ordet "hodeløs" refererer til PHP-koden som kjører på serveren. Nylig har noen av de beste PHP-applikasjonene som Drupal kikket over midtgangen og kommer forbauset over de sofistikerte brukergrensesnittene som er bygd av JavaScript-rammene som React, Angular eller Vue. I stedet for å prøve å konkurrere med dem, avgir de kontrollen over klienten og konsentrerer seg om å gjøre en god jobb med back-end på serveren.

Hvis du har investert ganske mye i PHP-kode som kjører på serveren, kan dette være en måte å nyte det beste fra begge tilnærminger. Den gamle, etablerte PHP-koden fungerer som inngangsdør til databasen, dobbeltsjekker forespørslene, rydder opp i dataene og gir generelt all forretningslogikken. Klientsiden er en progressiv webapp skrevet med det nyeste JavaScript-rammeverket. Når den trenger informasjon, sender den en AJAX-forespørsel til PHP-koden.

Dette er kanskje ikke fornuftig for noen som begynner fra bunnen av, men hvis du har stolt på PHP i årevis og du vil gå gradvis fremover, kan dette være et godt kompromiss.

Hvor begge vinner: Microservices og serverless

De økende mikrotjenestene eller serverløse paradigmer gir en måte for JavaScript og PHP-kode å samle serveren og komme sammen. Begge løsningene delte arbeidet i dusinvis av mindre tjenester eller funksjoner, og disse kan kjøre uavhengig og forbli i sine baner. Noen deler, vanligvis de eldre og mest stabile delene av appen, kan kjøre PHP. De andre delene, ofte de nyere, vil bli skrevet i Node.js. Språket til POST eller kan være lingua franca som forener dem alle.

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