Node.js versus PHP: een epische strijd om mindshare van ontwikkelaars

Het is een klassiek Hollywood-plot: de strijd tussen twee oude vrienden die uit elkaar gingen. Vaak begint de wrijving wanneer een vriend interesse wekt in wat altijd het onuitgesproken domein van de andere vriend was. In de programmeertaalversie van deze film is het de introductie van Node.js die de buddy-film in een wrok verandert: PHP en JavaScript, twee partners die ooit samen het internet beheersten, maar het nu uitvechten voor de geest van de ontwikkelaars.

Vroeger was het partnerschap eenvoudig. JavaScript behandelde kleine details in de browser, terwijl PHP alle servertaken tussen poort 80 en MySQL beheerde. Het was een gelukkige vakbond die vele cruciale onderdelen van internet blijft steunen. Tussen WordPress, Drupal en Facebook kunnen mensen nauwelijks een minuut op internet gaan zonder PHP tegen te komen.

Toen ontdekte een slimme jongen dat hij JavaScript op de server kon laten draaien. Plots was het niet meer nodig om PHP te gebruiken om de volgende generatie serverstacks te bouwen. Er was slechts één taal nodig om Node.js en de frameworks op de client te bouwen. "Overal JavaScript" werd voor sommigen de mantra.

Sinds die ontdekking is JavaScript geëxplodeerd. Node.js-ontwikkelaars kunnen nu kiezen tussen een steeds groter wordende verzameling uitstekende frameworks en steigers: React, Vue, Express, Angular, Meteor en meer. De lijst is lang en het grootste probleem is het kiezen tussen uitstekende opties.

Sommigen zien de hausse in Node.js als het bewijs dat JavaScript doorslaggevend is aan het winnen, en er zijn genoeg onbewerkte gegevens om die visie te versterken. GitHub meldt dat JavaScript de meest populaire taal is in zijn verzameling repositories, en JavaScript's kussende neef, TypeScript, groeit ook snel. Veel van de coolste projecten zijn geschreven in JavaScript en veel van de meest populaire hashtags verwijzen ernaar. PHP is ondertussen van de derde plaats naar de vierde plaats in deze ranglijst gezakt en het is waarschijnlijk nog meer gedaald in het aantal persberichten, productimplementaties en andere momenten waarop veel reclame wordt gemaakt.

Maar de hype verdwijnt en software kan tientallen jaren voortleven. Het grootste deel van de PHP-codebasis zal niet migreren en het blijft grote delen van de tekst die we elke dag lezen, weergeven. Volgens sommige schattingen begint 40 procent van de pagina's die we bekijken in een of andere vorm met PHP. Een deel hiervan is omdat PHP steeds opnieuw wordt geboren. In de afgelopen jaren is het lef van de systemen waarop PHP draait volledig herschreven. Het is niet dezelfde PHP-code die de website van uw grootouder beheerde.

PHP's snelle, just-in-time-compiler levert sneller dan ooit antwoorden dankzij dezelfde slimme technieken die de Node.js-revolutie mogelijk maakten. Nu bieden PHP 7.2 en de HHVM veel van dezelfde slimme on-the-fly optimalisaties die V8 naar Chrome en Node.js. Niet alleen dat, maar HHVM heeft Hack, een slim PHP-dialect dat volledige ondersteuning biedt voor geavanceerde programmeerfuncties zoals lambda's, generieke geneesmiddelen en verzamelingen. Dus als je deze functies nodig hebt, hoef je niet te zoeken naar een meer complete stapel.

Het einde is natuurlijk nog niet geschreven. Voor elke coder die kraait over de puurheid en jeugdigheid van Node.js en de eenvoud van JavaScript overal, is er een ander die blij is met de diepe codebasis en de lang begrepen stabiliteit van PHP. Zal de oude codger de server-side upstart terugslaan? Zal JavaScript zijn oude vriend omverwerpen om wereldheerschappij te bereiken? Doe nog een partij popcorn in de magnetron en leun achterover.

Waar PHP wint: code mengen met inhoud

Je typt mee, giet gedachten in tekst voor je website, en je wilt een vertakking aan het proces toevoegen, een kleine als-dan-instructie om het er mooi uit te laten zien, bijvoorbeeld afhankelijk van een parameter in de URL. Of misschien wilt u tekst of gegevens uit een database mengen. Met PHP open je de magische PHP-tags en begin je binnen enkele seconden code te schrijven. Geen sjablonen nodig - alles is een sjabloon! Geen extra bestanden of uitgebreide architecturen nodig, alleen programmeerbare logistieke kracht binnen handbereik.

Waar Node wint: zorgen scheiden

Het mixen van code met inhoud is een kruk die je kan verlammen. Natuurlijk is het leuk om de eerste twee of drie keer dat je het doet code met HTML te mixen. Maar al snel wordt je codebasis een wirwar van logica. Echte programmeurs voegen structuur toe en scheiden de cosmetische laag van de logische laag. Het is schoner voor nieuwe programmeurs om te begrijpen en gemakkelijker te onderhouden. De frameworks die op Node.js worden uitgevoerd, zijn gebouwd door programmeurs die weten dat het leven beter is als het model, de weergave en de controller gescheiden zijn.

Waar PHP wint: diepe codebasis

Het web is gevuld met PHP-code. De meest populaire platforms voor het bouwen van websites (WordPress, Drupal, Joomla) zijn geschreven in PHP. Niet alleen zijn de platforms open source, maar ook de meeste van hun plug-ins. Er is overal PHP-code en deze wacht op u om te downloaden, aan te passen en te gebruiken voor uw behoeften.

Waar Node wint: meer moderne functies

Natuurlijk zijn er duizenden geweldige open source PHP-bestanden, maar sommige zijn 12 jaar oude WordPress-plug-ins die hopen en bidden dat iemand ze zal downloaden. Voor elke moderne versie van Symfony is er een stoffige, lang vergeten bibliotheek die niemand bijwerkt.

Wie wil er uren, dagen of weken aan het slopen zijn met code die al jaren niet meer is bijgewerkt? Node.js-plug-ins zijn niet alleen nieuwer, ze zijn ook gebouwd met volledige kennis van de nieuwste architectonische benaderingen. Ze zijn gebouwd door programmeurs die begrijpen dat moderne web-apps de meeste intelligentie naar de klant moeten sturen.

En hoewel JavaScript veel kleine eigenaardigheden heeft die sommigen gek maken, is het voor het grootste deel een moderne taal met een moderne syntaxis en een paar handige functies, zoals sluitingen. U kunt het eenvoudig opnieuw configureren en uitbreiden, waardoor krachtige bibliotheken zoals jQuery mogelijk worden. U kunt functies als objecten doorgeven. Waarom zou je jezelf beperken?

Waar PHP wint: Eenvoud (soort van)

PHP heeft niet veel: een paar variabelen en basisfuncties voor het jongleren met tekenreeksen en getallen. Het is een dunne laag die niet veel doet, behalve de gegevens verplaatsen van poort 80 naar de database en terug. Dat is wat het moet doen. Een moderne database is een magisch hulpmiddel en het is logisch om het zware werk eraan over te laten. PHP is de juiste hoeveelheid complexiteit voor een taak die niet complex hoeft te zijn.

Maar nogmaals, als je een programmeur bent die meer wil doen dan alleen communiceren met een database en de resultaten formatteren, kun je nu meer doen met PHP zonder je neus dicht te knijpen. Facebook's HHVM voegt ondersteuning toe voor Hack, een complete taal gevuld met moderne functies zoals type annotaties, generieke en lambda-uitdrukkingen. Als u dit gebruikt, wordt uw code beperkt tot alleen het draaien op de HHVM, maar dat is niet het ergste ter wereld. Het is erg snel.

Waar Node wint: tientallen taalopties

Als PHP-gebruikers graag toegang krijgen tot Hack, zouden ze moeten overwegen om naar de wereld van Node.js te verhuizen, omdat veel belangrijke talen kunnen worden gecompileerd om in JavaScript te worden uitgevoerd. Er zijn bekende opties zoals Java, C # of Lisp en tientallen andere zoals Scala, OCaml en Haskell. Er zijn zelfs cadeautjes voor nostalgische liefhebbers van BASIC of Pascal. Deze lijst met talen die worden gecompileerd naar JavaScript van Jeremy Ashkenas, is redelijk uitgebreid. Bovendien bieden JavaScript-neven zoals TypeScript en CoffeeScript iets andere en verbeterde benaderingen van hetzelfde spel.

Waar PHP wint: geen client-app nodig

Al het gepraat over het gebruik van dezelfde taal in de browser en op de server is leuk, maar wat als je geen taal in de browser hoeft te gebruiken? Wat als u de gegevens in HTML-vorm verzendt? Wat als u een spartaanse, statische website bouwt die strikt levert wat nodig is zonder de interactieve bling? De browser laat het verschijnen en er zijn geen hoofdpijn of glitches veroorzaakt door mislukte JavaScript-threads die proberen een pagina in de browser te maken van twee dozijn webserviceaanroepen. Pure HTML werkt vaker dan wat dan ook, en PHP is geoptimaliseerd om dat te creëren. Waarom moeite doen met JavaScript in de browser? Bouw alles op de server op en voorkom overbelasting van die kleine browser op de kleine telefoon.

Waar Node wint: Serviceaanroepen zijn dunner dan HTML-dikke PHP-aanroepen

Hoewel AJAX-gekke HTML5-webapps te veel bewegende delen kunnen hebben, zijn ze cool - en zeer efficiënt. Zodra de JavaScript-code zich in de browsercache bevindt, zijn de nieuwe gegevens het enige dat langs de draden beweegt. Er zijn niet veel HTML-markeringen en er zijn geen herhaalde trips om de hele pagina te downloaden. Alleen de gegevens zijn veranderd. Als u bereid bent tijd te steken in het maken van een gelikte web-app aan de browserzijde, is dat een grote beloning. Node.js is geoptimaliseerd om de gegevens en alleen de gegevens via webservices te leveren. Als uw app complex en gegevensrijk is, vormt dit een goede basis voor een efficiënte levering.

Waar PHP wint: SQL

PHP is gebouwd om naast MySQL en zijn vele varianten, zoals MariaDB, te bestaan. Als MySQL niet helemaal klopt, zijn er andere geweldige SQL-databases van Oracle en Microsoft. Uw code kan schakelen met een paar wijzigingen in uw zoekopdrachten. De enorme SQL-wereld eindigt niet bij zijn grenzen. Enkele van de meest stabiele, goed ontwikkelde code zal communiceren met een SQL-database, wat betekent dat al die kracht ook gemakkelijk kan worden geïntegreerd in een PHP-project. Het is misschien niet een perfect, gelukkig gezin, maar het is een groot gezin. Niet alleen dat, maar de databasewereld wordt langzaamaan beter naarmate ontwikkelaars manieren vinden om meer intelligentie aan de database toe te voegen, zodat u niet zo hard hoeft te werken.

Waar Node.js wint: JSON

Als u toegang tot SQL moet hebben, heeft Node.js bibliotheken om dat te doen. Maar Node.js spreekt ook JSON, de lingua franca voor interactie met veel van de nieuwste NoSQL-databases. Dat wil niet zeggen dat je geen JSON-bibliotheken voor je PHP-stack kunt krijgen, maar er is iets vloeiend aan de eenvoud van het werken met JSON bij het gebruik van JavaScript. Het is één syntaxis van browser naar webserver naar database. De dubbele punten en de accolades werken overal op dezelfde manier. Dat alleen al bespaart u urenlange frustratie.

Waar PHP wint: coderingssnelheid

Voor de meeste ontwikkelaars voelt het schrijven van PHP voor webapps sneller aan: geen compilers, geen implementatie, geen JAR-bestanden of preprocessors - gewoon je favoriete editor en enkele PHP-bestanden in een directory. Uw aantal kilometers zal variëren, maar als het erom gaat een project snel samen te brengen, is PHP een goed hulpmiddel om te gebruiken.

Waar Node.js wint: applicatiesnelheid

Het schrijven van JavaScript-code is een beetje moeilijker als u accolades en haakjes telt, maar als het klaar is, kan uw Node.js-code vliegen. Het callback-mechanisme is briljant omdat het u voorkomt dat u met de discussies moet jongleren. De kern is goed gebouwd en ontworpen om dat allemaal voor je te doen. Is dat niet wat iedereen wil?

Waar PHP wint: concurrentie

De strijd om de harten en geesten van PHP-ontwikkelaars is nog steeds aan de gang. Het HHVM-team en het Zend-team werken er hard aan om snelle code voor iedereen te leveren. Onafhankelijke benchmarks verschijnen en iedereen pusht de codebases tot het uiterste. Dit betekent alleen maar betere prestaties.

Waar Node.js wint: Solidariteit

Wil je echt twee verschillende codebases? Zeker, concurrentie helpt, maar al snel volgt fragmentatie. Wat gebeurt er als uw code slechts op een van de twee draait? Concurrentie heeft geen zin als je weken of maanden moet besteden aan het herschrijven van je code. Terwijl Node.js een paar jaar geleden zijn eigen versplintering ervoer, met de lancering van io.js, is het Node.js-universum sindsdien herenigd, waardoor het het soort taalsolidariteit krijgt waar PHP-ontwikkelaars binnenkort naar kunnen verlangen.

Waar PHP wint: basis-apps

In de afgelopen jaren hebben enkele ontwikkelaars webapps gestart en waren ze gefrustreerd door het trage gedrag. Het JavaScript dat al die bewegende delen aandrijft, kan tienduizenden bytes zijn, soms honderdduizenden. Als alle pakketten aankomen, moeten ze worden geparseerd, gecompileerd en uiteindelijk worden uitgevoerd - allemaal om een ​​paar bytes zoals de temperatuur en de voorspelling te leveren.

Het verzet tegen deze rococco-waanzin is te vinden in de teams die statische sitegeneratoren bouwen (463 op dit moment) en uitgeklede webpagina's in het AMP-formaat. PHP is een natuurlijke keuze voor elk team dat de intelligentie op de server wil concentreren, zodat de klant niet overbelast raakt.

Waar Node.js wint: Richness

Ludwig Mies van der Rohe, de architect van gebouwen, zei ooit: "Less is more." Robert Venturi, een andere architect, kwam langs en antwoordde: "Minder is saai." De smartphones hebben meer kracht dan een kamer vol Cray-computers. De desktops hebben videokaarten met meerdere ventilatoren om ze tijdens de verwerking koel te houden. Waarom zouden we onze code ontdoen en leven als een slachtoffer uit het depressietijdperk in een Steinbeck-roman? Pluk de dag. Grote, gelikte websites vol met JavaScript-code zijn opvallend, dramatisch en vooral leuk. Het is natuurlijk nogal obsceen om zoveel bandbreedte te verspillen aan een paar stukjes data, maar bandbreedte is nooit goedkoper geweest. Leef een beetje!

Waar beiden winnen: Headless

Het woord "headless" verwijst naar de PHP-code die op de server draait. Onlangs hebben enkele van de beste PHP-applicaties zoals Drupal door het gangpad gekeken en waren verbaasd over de geavanceerde gebruikersinterfaces die zijn gebouwd door de JavaScript-frameworks zoals React, Angular of Vue. In plaats van te proberen met hen te concurreren, geven ze de controle over de client af en concentreren ze zich op het goed doen met de back-end op de server.

Als je behoorlijk wat hebt geïnvesteerd in PHP-code die op de server wordt uitgevoerd, kan dit een manier zijn om van beide methoden te genieten. De oude, gevestigde PHP-code fungeert als een voordeur naar de database, controleert de verzoeken dubbel, schoont de gegevens op en biedt over het algemeen alle bedrijfslogica. De clientkant is een progressieve web-app die is geschreven met het nieuwste JavaScript-framework. Als het informatie nodig heeft, stuurt het een AJAX-verzoek naar de PHP-code.

Dit is misschien niet logisch voor iemand die helemaal opnieuw begint, maar als je al jaren op PHP vertrouwt en je geleidelijk verder wilt gaan, kan dit een gelukkig compromis zijn.

Waar beide winnen: microservices en serverloos

De opkomende microservice of serverloze paradigma's bieden een manier voor JavaScript en PHP-code om samen te leven met de server en goed met elkaar overweg te kunnen. Beide oplossingen splitsen het werk op in tientallen kleinere diensten of functies en deze kunnen zelfstandig draaien en in hun baan blijven. Sommige delen, meestal de oudere en meest stabiele delen van de app, kunnen PHP draaien. De andere delen, vaak de nieuwere, worden in Node.js. geschreven. De taal van POSTof GETkan de lingua franca zijn die ze allemaal verenigt.