Node.js vs. PHP: Epska bitka za razvijanje uma programera

To je klasična holivudska radnja: bitka između dvojice starih prijatelja koji su pošli različitim putevima. Često trenje započinje kad jedan prijatelj pozove interes za ono što je uvijek bilo neizgovoreno područje drugog prijatelja. U inačici ovog filma na programskom jeziku, predstavljanje Node.js pretvara prijateljski potez u nezadovoljstvo: PHP i JavaScript, dva partnera koji su nekoć zajedno vladali Internetom, a sada ga namještaju zbog uma programera.

U stara vremena partnerstvo je bilo jednostavno. JavaScript je obrađivao male detalje u pregledniku, dok je PHP upravljao svim zadacima na poslužitelju između porta 80 i MySQL. Bila je to sretna unija koja i dalje podržava mnoge ključne dijelove interneta. Između WordPressa, Drupala i Facebooka, ljudi teško mogu potrajati minutu na webu, a da ne nalete na PHP.

Tada je neko pametno dijete otkrio da na poslužitelju može pokrenuti JavaScript. Odjednom, nije bilo potrebe za korištenjem PHP-a za izgradnju sljedeće generacije poslužiteljskih stogova. Za izradu Node.js-a i okvira koji se izvode na klijentu bio je potreban samo jedan jezik. "JavaScript svugdje" za neke je postao mantra.

Od tog otkrića JavaScript je eksplodirao. Programeri Node.js sada mogu birati između sve veće kolekcije izvrsnih okvira i skela: React, Vue, Express, Angular, Meteor i još mnogo toga. Popis je dugačak, a najveći je problem odabrati između izvrsnih opcija.

Neki na procvat Node.js-a gledaju kao na dokaz da JavaScript presudno pobjeđuje, a postoji i puno neobrađenih podataka koji pojačavaju taj pogled. GitHub izvještava da je JavaScript najpopularniji jezik u svojoj kolekciji spremišta, a I JavaScriptov ljubljeni rođak, TypeScript, brzo raste. Mnogi najzgodniji projekti napisani su na JavaScript-u, a na njih se pozivaju mnogi najpopularniji hashtagovi. PHP je u međuvremenu skliznuo s trećeg na četvrto mjesto na ovoj ljestvici, a vjerojatno je još više skliznuo u broju priopćenja za javnost, predstavljanju proizvoda i drugim trenucima na tržištu.

Ali hype blijedi i softver može živjeti desetljećima. Većina baze PHP koda neće se migrirati i nastavlja služiti velike dijelove teksta koji čitamo svaki dan. Prema nekim procjenama, 40 posto stranica koje gledamo započinju, u nekom obliku, s PHP-om. Dio je toga zato što se PHP nastavlja ponovno rađati. U posljednjih nekoliko godina, crti sustava s PHP-om potpuno su prepravljeni. To nije isti PHP kôd koji je vodio web stranicu vašeg djeda i bake.

PHP-ov zippy, pravovremeni kompajler daje odgovore brže nego ikad zahvaljujući istim pametnim tehnikama koje su pokretale Node.js revoluciju. Sada PHP 7.2 i HHVM nude mnoge iste pametne optimizacije u letu koje je V8 donio u Chrome i Node.js. I ne samo to, već HHVM ima Hack, pametni PHP dijalekt koji nudi potpunu podršku za sofisticirane programske značajke kao što su lambda, generički proizvodi i zbirke. Dakle, ako su vam potrebne ove značajke, ne trebate tražiti cjelovitiji stog.

Naravno, kraj još nije napisan. Za svakog kodera koji kuka o čistoći i mladosti Node.js-a i jednostavnosti JavaScript-a posvuda, postoji još jedan koji je zadovoljan dubokom bazom koda i dugo razumljivom stabilnošću PHP-a. Hoće li stari codger uzvratiti udarac na poslužitelju? Hoće li JavaScript zbaciti svog starog prijatelja da postigne svjetsku dominaciju? Stavite još jednu količinu kokica u mikrovalnu i sjednite.

Gdje PHP pobjeđuje: miješanje koda sa sadržajem

Tipkate dalje, ulijevajući misli u tekst za svoje web mjesto i želite dodati granu u postupak, malu izjavu if-then kako bi izgledala lijepo, recimo, ovisno o nekom parametru u URL-u. Ili možda želite miješati tekst ili podatke iz baze podataka. S PHP-om otvarate čarobne PHP oznake i započinjete s pisanjem koda u roku od nekoliko sekundi. Nema potrebe za predlošcima - sve je predložak! Nema potrebe za dodatnim datotekama ili složenim arhitekturama, samo programibilna logistička snaga nadohvat ruke.

Gdje Node pobjeđuje: razdvajanje briga

Miješanje koda sa sadržajem štaka je koja vas na kraju može osakatiti. Svakako, zabavno je miješati kod s HTML-om prva dva ili tri puta kad to napravite. Ali uskoro vaša baza koda postaje zamršena logika. Pravi programeri dodaju strukturu i odvajaju kozmetički sloj od logičkog. Novim programerima je čišće za razumijevanje i lakše za održavanje. Okvire koji se izvode na Node.js grade programeri koji znaju da je život bolji kada su model, pogled i kontroler odvojeni.

Gdje PHP pobjeđuje: Dubinska baza koda

Web je ispunjen PHP kodom. Najpopularnije platforme za izradu web stranica (WordPress, Drupal, Joomla) napisane su na PHP-u. Ne samo da su platforme otvorenog koda, već i većina njihovih dodataka. Posvuda ima PHP koda i čeka vas da ga preuzmete, izmijenite i koristite za svoje potrebe.

Gdje Node pobjeđuje: Modernije značajke

Svakako, postoje tisuće izvrsnih PHP datoteka s otvorenim kodom, ali neki su 12-godišnji WordPress dodaci koji se nadaju i mole se da će ih netko preuzeti. Za svaku modernu verziju Symfonyja postoji prašnjava, davno zaboravljena biblioteka koju nitko ne ažurira.

Tko želi provesti sate, dane ili tjedne majmunirajući s kodom koji nije ažuriran godinama? Dodaci Node.js nisu samo noviji, već su izgrađeni uz puno znanje o najnovijim arhitektonskim pristupima. Izgradili su ih programeri koji razumiju da bi moderne web aplikacije trebale gurnuti većinu inteligencije na klijenta.

I dok JavaScript ima mnogo malih idiosinkrazija koje pomalo izluđuju, to je uglavnom moderni jezik koji sadrži modernu sintaksu i nekoliko korisnih značajki poput zatvaranja. Možete ga jednostavno konfigurirati i proširiti, čineći tako moćnim knjižnice poput jQueryja. Možete prenositi funkcije poput predmeta. Zašto se ograničiti?

Gdje PHP pobjeđuje: Jednostavnost (vrsta)

PHP nema puno: nekoliko varijabli i osnovnih funkcija za žongliranje nizovima i brojevima. To je tanki sloj koji ne čini puno, osim što podatke premješta s porta 80 u bazu podataka i natrag. To bi trebao učiniti. Moderna baza podataka čaroban je alat i ima smisla tome prepustiti težak posao. PHP je prava količina složenosti za posao koji ne bi trebao biti složen.

Pa opet, ako ste programer koji želi učiniti više od interakcije s bazom podataka i formatiranja rezultata, sada možete učiniti više s PHP-om bez držanja nosa. Facebook HHVM dodaje podršku za Hack, cjelovit jezik ispunjen modernim značajkama poput napomena o tipovima, generičkih podataka i lambda izraza. Korištenje ovog ograničava vaš kod na rad samo na HHVM-u, ali to nije najgora stvar na svijetu. Vrlo je brzo.

Gdje Node pobjeđuje: Deseci jezičnih opcija

Ako su korisnici PHP-a sretni što imaju pristup Hacku, trebali bi razmisliti o preseljenju u svijet Node.js-a jer se mnogi glavni jezici mogu međusobno kompilirati da bi se pokrenuli u JavaScript-u. Postoje dobro poznate opcije kao što su Java, C # ili Lisp i deseci drugih poput Scale, OCamla i Haskella. Postoje čak i pokloni za nostalgične ljubitelje BASIC-a ili Pascala. Ovaj popis jezika koji se prevode u JavaScript od Jeremyja Ashkenasa prilično je opsežan. Plus JavaScript rođaci poput TypeScript i CoffeeScript nude malo drugačije i poboljšane pristupe istoj igri.

Gdje PHP pobjeđuje: Nije potrebna klijentska aplikacija

Svi razgovori o korištenju istog jezika u pregledniku i na poslužitelju su lijepi, ali što ako ne trebate koristiti bilo koji jezik u pregledniku? Što ako podatke pošaljete u HTML obliku? Što ako gradite spartansku, statičnu web stranicu kako biste strogo isporučili ono što je potrebno bez interaktivnog blinga? Preglednik ga iskače i nema glavobolja ili grešaka uzrokovanih pogrešnim paljenjem JavaScript niti koje pokušavaju stvoriti stranicu u pregledniku od dva tuceta poziva web usluga. Čisti HTML radi češće nego bilo što drugo, a PHP je optimiziran da to stvori. Zašto se zamarati JavaScriptom u pregledniku? Izgradite sve na poslužitelju i izbjegavajte preopterećenje tog malog preglednika na malom telefonu.

Gdje Node pobjeđuje: Pozivi na usluge tanji su od HTML-debelih PHP poziva

Iako AJAX-lude HTML5 web aplikacije mogu imati previše pokretnih dijelova, one su cool - i vrlo učinkovite. Jednom kada je JavaScript kôd u predmemoriji preglednika, jedina stvar koja se kreće duž žica su novi podaci. Nema tona HTML oznaka i nema ponovljenih putovanja za preuzimanje cijele stranice. Promijenili su se samo podaci. Ako ste voljni uložiti vrijeme za stvaranje glatke web-aplikacije na strani preglednika, velika je isplata. Node.js je optimiziran za isporuku podataka i samo podataka putem web usluga. Ako je vaša aplikacija složena i bogata podacima, to je dobar temelj za učinkovitu isporuku.

Gdje PHP pobjeđuje: SQL

PHP je stvoren da koegzistira s MySQL-om i njegovim brojnim varijantama, poput MariaDB. Ako MySQL nije točno u redu, postoje druge izvrsne SQL baze podataka Oracle i Microsoft. Vaš se kod može prebaciti s nekoliko izmjena na vaše upite. Prostrani SQL svijet ne završava na svojim granicama. Neki od najstabilnijih, dobro razvijenih kodova sučelit će se s SQL bazom podataka, što znači da se sva ta snaga također može lako integrirati u PHP projekt. Možda nije jedna savršena, sretna obitelj, ali je velika. I ne samo to, već se i svijet baza podataka polako poboljšava jer programeri pronalaze načine kako dodati više inteligencije u bazu podataka, tako da ne trebate toliko raditi.

Gdje Node.js pobjeđuje: JSON

Ako morate imati pristup SQL-u, Node.js ima knjižnice za to. Ali Node.js govori i JSON, lingua francu za interakciju s mnogim najnovijim NoSQL bazama podataka. To ne znači da ne možete dobiti JSON knjižnice za svoj PHP stog, ali ima nešto fluidno u jednostavnosti rada s JSON-om kada se koristi JavaScript. To je jedna sintaksa od preglednika do web poslužitelja do baze podataka. Dvotočke i kovrčave zagrade svugdje djeluju na isti način. Samo to će vas spasiti sati frustracije.

Gdje PHP pobjeđuje: Brzina kodiranja

Za većinu programera pisanje PHP-a za web aplikacije čini se bržim: nema kompajlera, nema implementacije, nema JAR datoteka ili pretprocesora - jednostavno vaš omiljeni uređivač i neke PHP datoteke u direktoriju. Vaša će se kilometraža razlikovati, ali kada je riječ o brzom udruživanju projekata, PHP je dobar alat za korištenje.

Gdje Node.js pobjeđuje: Brzina aplikacije

Pisanje JavaScript koda malo je teže kada računate kovrčave zagrade i zagrade, ali kada je gotovo, vaš Node.js kôd može letjeti. Mehanizam povratnog poziva je sjajan jer vas spašava od žongliranja nitima. Jezgra je dobro građena i dizajnirana da učini sve to za vas. Nije li to ono što svi žele?

Gdje PHP pobjeđuje: Natjecanje

Bitka za srca i umove PHP programera još se uvijek odvija. HHVM tim i Zend tim naporno rade na isporuci brzog koda za sve. Pojavljuju se nezavisna mjerila i svi potiskuju baze koda do krajnjih granica. To znači samo bolje performanse.

Gdje Node.js pobjeđuje: Solidarnost

Želite li doista dvije različite baze koda? Svakako, konkurencija pomaže, ali ubrzo slijedi fragmentacija. Što se događa kada se vaš kôd izvodi samo na jednom od ta dva? Natjecanje ne donosi ništa dobro ako morate potrošiti tjedne ili mjesece na prepisivanje koda. Iako je Node.js doživio vlastito raspadanje unazad nekoliko godina, lansiranjem io.js-a, svemir Node.js se od tada ponovo okupio, dajući mu onu jezičnu solidarnost za kojom PHP programeri uskoro mogu čeznuti.

Gdje PHP pobjeđuje: Osnovne aplikacije

U posljednjih nekoliko godina nekoliko je programera pokrenulo web aplikacije i frustriralo se tromim ponašanjem. JavaScript koji pokreće sve te pokretne dijelove može biti desetke tisuća bajtova, ponekad stotine tisuća. Kad stignu svi paketi, moraju se raščlaniti, sastaviti i konačno izvršiti - a sve kako bi se isporučilo nekoliko bajtova poput temperature i prognoze.

Reakciju protiv ove ludosti iz rokokoa možemo pronaći u timovima koji grade statičke generatore web stranica (463 u ovom tekstu) i uklonjene web stranice u AMP formatu. PHP je prirodan izbor za bilo koji tim koji želi koncentrirati inteligenciju na poslužitelj kako klijent ne bi bio preopterećen.

Gdje Node.js pobjeđuje: bogatstvo

Ludwig Mies van der Rohe, arhitekt zgrada, jednom je rekao, "Manje je više." Robert Venturi, drugi arhitekt, pojavio se i uzvratio: "Manje je dosadno." Pametni telefoni imaju više snage od prostorije pune Cray računala. Stolna računala imaju grafičke kartice s više ventilatora kako bi se hladile tijekom cijele obrade. Zašto bismo trebali skinuti svoj kod i živjeti poput žrtve ere depresije u Steinbeckovom romanu? Živni. Velike, glatke web stranice prepune JavaScript koda privlače pažnju, dramatične su i nadasve zabavne. Sigurno je nekako bezobrazno trošiti toliko propusnosti na nekoliko bitova podataka, ali propusnost nikada nije bila jeftinija. Živi malo!

Gdje oboje pobjeđuju: Bez glave

Riječ "bez glave" odnosi se na PHP kôd pokrenut na poslužitelju. Nedavno su neke od najboljih PHP aplikacija poput Drupala provirile kroz prolaz i došle zadivljene sofisticiranim korisničkim sučeljima izgrađenim od JavaScript okvira poput React, Angular ili Vue. Umjesto da se pokušavaju natjecati s njima, oni prepuštaju kontrolu nad klijentom i koncentriraju se na to da rade dobar posao s pozadinom na poslužitelju.

Ako ste poprilično uložili u PHP kôd koji se izvodi na poslužitelju, ovo može biti način da uživate u najboljem iz oba pristupa. Stari, uspostavljeni PHP kod djeluje kao ulazna vrata u bazu podataka, dvostruko provjerava zahtjeve, čisti podatke i općenito pruža svu poslovnu logiku. Klijentska strana je progresivna web aplikacija napisana s najnovijim JavaScript okvirom. Kada trebaju informacije, šalje AJAX zahtjev na PHP kôd.

To možda nema smisla za nekoga tko kreće ispočetka, ali ako se godinama oslanjate na PHP i želite postupno ići naprijed, ovo može biti sretan kompromis.

Gdje pobjeđuju obje: mikroservisi i bez poslužitelja

Paradigme mikroservisa ili bez poslužitelja nude način za JavaScript i PHP kôd da zajedno posluže i poslužuju poslužitelj. Oba rješenja podijelila su rad na desetke manjih usluga ili funkcija, a one mogu raditi samostalno i ostati u svojim trakovima. Neki dijelovi, obično stariji i najstabilniji dijelovi aplikacije, mogu pokretati PHP. Ostali dijelovi, često oni noviji, bit će napisani u Node.js. Jezik POSTili GETmože biti lingua franca koji ih sve ujedinjuje.