Node.js vs. PHP: Ein epischer Kampf um Entwickler-Mindshare

Es ist eine klassische Hollywood-Handlung: der Kampf zwischen zwei alten Freunden, die getrennte Wege gingen. Oft beginnt die Reibung, wenn ein Kumpel Interesse an der unausgesprochenen Domäne des anderen Kumpels weckt. In der Programmiersprachenversion dieses Films ist es die Einführung von Node.js, die den Buddy-Streifen in einen Groll verwandelt: PHP und JavaScript, zwei Partner, die einst gemeinsam das Internet beherrschten, es jetzt aber für den Gedankenanteil der Entwickler herausfordern.

Früher war die Partnerschaft einfach. JavaScript handhabte kleine Details im Browser, während PHP alle serverseitigen Aufgaben zwischen Port 80 und MySQL verwaltete. Es war eine glückliche Gewerkschaft, die weiterhin viele wichtige Teile des Internets unterstützt. Zwischen WordPress, Drupal und Facebook können die Leute kaum eine Minute im Web verbringen, ohne auf PHP zu stoßen.

Dann entdeckte ein kluges Kind, dass er JavaScript auf dem Server zum Laufen bringen konnte. Plötzlich war es nicht mehr nötig, PHP zu verwenden, um die nächste Generation von Server-Stacks zu erstellen. Zum Erstellen von Node.js und den auf dem Client ausgeführten Frameworks war nur eine Sprache erforderlich. "JavaScript überall" wurde für einige zum Mantra.

Seit dieser Entdeckung ist JavaScript explodiert. Die Entwickler von Node.js können jetzt zwischen einer ständig wachsenden Sammlung hervorragender Frameworks und Gerüste wählen: React, Vue, Express, Angular, Meteor und mehr. Die Liste ist lang und das größte Problem ist die Wahl zwischen hervorragenden Optionen.

Einige betrachten den Boom in Node.js als Beweis dafür, dass JavaScript entscheidend gewinnt, und es gibt viele Rohdaten, die diese Ansicht unterstützen. GitHub berichtet, dass JavaScript die beliebteste Sprache in seiner Sammlung von Repositories ist, und auch der küssende Cousin von JavaScript, TypeScript, wächst rasant. Viele der coolsten Projekte sind in JavaScript geschrieben und viele der beliebtesten Hashtags verweisen darauf. In der Zwischenzeit ist PHP in dieser Rangliste vom dritten auf den vierten Platz gerutscht, und es ist wahrscheinlich noch mehr in Bezug auf Pressemitteilungen, Produkteinführungen und andere stark vermarktete Momente zurückgegangen.

Aber Hype Fades und Software können Jahrzehnte weiterleben. Der größte Teil der PHP-Codebasis wird nicht migriert und liefert weiterhin große Teile des Textes, den wir jeden Tag lesen. Nach einigen Schätzungen beginnen 40 Prozent der Seiten, die wir anzeigen, in irgendeiner Form mit PHP. Ein Teil davon ist, dass PHP weiterhin wiedergeboren wird. In den letzten Jahren wurden die Eingeweide der Systeme, auf denen PHP ausgeführt wird, komplett neu geschrieben. Es ist nicht derselbe PHP-Code, der die Website Ihrer Großeltern ausgeführt hat.

Der flotte Just-in-Time-Compiler von PHP liefert dank der gleichen intelligenten Techniken, die die Node.js-Revolution vorangetrieben haben, Antworten schneller als je zuvor. Jetzt bieten PHP 7.2 und HHVM viele der cleveren On-the-Fly-Optimierungen, die V8 für Chrome und Node.js gebracht hat. Darüber hinaus verfügt HHVM über Hack, einen cleveren PHP-Dialekt, der umfassende Unterstützung für anspruchsvolle Programmierfunktionen wie Lambdas, Generika und Sammlungen bietet. Wenn Sie diese Funktionen benötigen, müssen Sie nicht nach einem Stapel mit allen Funktionen suchen.

Natürlich ist das Ende noch nicht geschrieben. Für jeden Programmierer, der sich über die Reinheit und Jugend von Node.js und die Einfachheit von JavaScript überall Gedanken macht, gibt es einen anderen, der mit der tiefen Codebasis und der seit langem verstandenen Stabilität von PHP zufrieden ist. Wird der alte Codger den serverseitigen Emporkömmling zurückschlagen? Wird JavaScript seinen alten Freund stürzen, um die Weltherrschaft zu erlangen? Stellen Sie eine weitere Charge Popcorn in die Mikrowelle und lehnen Sie sich zurück.

Wo PHP gewinnt: Code mit Inhalt mischen

Sie tippen mit, geben Gedanken in den Text für Ihre Website ein und möchten dem Prozess einen Zweig hinzufügen, eine kleine Wenn-Dann-Anweisung, damit er beispielsweise hübsch aussieht, abhängig von einigen Parametern in der URL. Oder Sie möchten Text oder Daten aus einer Datenbank einmischen. Mit PHP öffnen Sie die magischen PHP-Tags und beginnen innerhalb von Sekunden mit dem Schreiben von Code. Keine Notwendigkeit für Vorlagen - alles ist eine Vorlage! Keine zusätzlichen Dateien oder aufwändigen Architekturen erforderlich, nur programmierbare logistische Leistung zur Hand.

Wo Node gewinnt: Bedenken trennen

Das Mischen von Code mit Inhalten ist eine Krücke, die Sie verkrüppeln kann. Sicher, es macht Spaß, Code in den ersten zwei oder drei Malen mit HTML zu mischen. Aber bald wird Ihre Codebasis zu einem Wirrwarr von Logik. Echte Programmierer fügen Struktur hinzu und trennen die kosmetische Schicht von der logischen Schicht. Für neue Programmierer ist es sauberer zu verstehen und einfacher zu warten. Die auf Node.js ausgeführten Frameworks werden von Programmierern erstellt, die wissen, dass das Leben besser ist, wenn Modell, Ansicht und Controller getrennt sind.

Wo PHP gewinnt: Deep Code Base

Das Web ist mit PHP-Code gefüllt. Die beliebtesten Plattformen zum Erstellen von Websites (WordPress, Drupal, Joomla) sind in PHP geschrieben. Die Plattformen sind nicht nur Open Source, sondern auch die meisten ihrer Plugins. Es gibt überall PHP-Code und es wartet darauf, dass Sie ihn herunterladen, ändern und für Ihre Bedürfnisse verwenden.

Wo Node gewinnt: Modernere Funktionen

Sicher, es gibt Tausende großartiger Open-Source-PHP-Dateien, aber einige sind 12 Jahre alte WordPress-Plug-Ins, die hoffen und beten, dass jemand sie herunterlädt. Für jede moderne Version von Symfony gibt es eine staubige, längst vergessene Bibliothek, die niemand aktualisiert.

Wer möchte Stunden, Tage oder Wochen mit Code verbringen, der seit Jahren nicht mehr aktualisiert wurde? Die Plug-Ins von Node.j sind nicht nur neuer, sondern wurden mit umfassendem Wissen über die neuesten Architekturansätze erstellt. Sie wurden von Programmierern entwickelt, die verstehen, dass moderne Web-Apps den größten Teil der Intelligenz an den Client weitergeben sollten.

Und während JavaScript viele kleine Eigenheiten aufweist, die einige verrückt machen, ist es größtenteils eine moderne Sprache, die eine moderne Syntax und einige nützliche Funktionen wie Verschlüsse aufweist. Sie können es einfach neu konfigurieren und erweitern und so leistungsstarke Bibliotheken wie jQuery ermöglichen. Sie können Funktionen wie Objekte weitergeben. Warum beschränken Sie sich?

Wo PHP gewinnt: Einfachheit (Art)

PHP hat nicht viel zu bieten: einige Variablen und Grundfunktionen zum Jonglieren von Zeichenfolgen und Zahlen. Es ist eine dünne Schicht, die nur die Daten von Port 80 in die Datenbank und zurück verschiebt. Das soll es tun. Eine moderne Datenbank ist ein magisches Werkzeug, und es ist sinnvoll, das schwere Heben ihr zu überlassen. PHP ist die richtige Komplexität für einen Job, der nicht komplex sein soll.

Wenn Sie ein Programmierer sind, der mehr als nur mit einer Datenbank interagieren und die Ergebnisse formatieren möchte, können Sie jetzt mehr mit PHP tun, ohne die Nase zu halten. Facebooks HHVM bietet Unterstützung für Hack, eine vollständige Sprache mit modernen Funktionen wie Typanmerkungen, Generika und Lambda-Ausdrücken. Wenn Sie dies verwenden, wird Ihr Code nur auf der HHVM ausgeführt, aber das ist nicht das Schlimmste auf der Welt. Es ist sehr schnell.

Wo Node gewinnt: Dutzende von Sprachoptionen

Wenn PHP-Benutzer gerne Zugriff auf Hack erhalten, sollten sie in die Welt von Node.js wechseln, da viele wichtige Sprachen für die Ausführung in JavaScript übergreifend kompiliert werden können. Es gibt bekannte Optionen wie Java, C # oder Lisp und Dutzende andere wie Scala, OCaml und Haskell. Es gibt sogar Geschenke für nostalgische Liebhaber von BASIC oder Pascal. Diese Liste der Sprachen, die von Jeremy Ashkenas zu JavaScript kompiliert werden, ist ziemlich umfassend. Außerdem bieten JavaScript-Cousins ​​wie TypeScript und CoffeeScript leicht unterschiedliche und verbesserte Ansätze für dasselbe Spiel.

Wo PHP gewinnt: Keine Client-App erforderlich

Das ganze Gerede über die Verwendung derselben Sprache im Browser und auf dem Server ist nett, aber was ist, wenn Sie keine Sprache im Browser verwenden müssen? Was ist, wenn Sie die Daten in HTML-Form versenden? Was ist, wenn Sie eine spartanische, statische Website erstellen, die genau das liefert, was ohne den interaktiven Bling benötigt wird? Der Browser öffnet es und es gibt keine Kopfschmerzen oder Störungen, die durch fehlzündende JavaScript-Threads verursacht werden, die versuchen, aus zwei Dutzend Webdienstaufrufen eine Seite im Browser zu erstellen. Reines HTML funktioniert häufiger als alles andere, und PHP ist dafür optimiert. Warum sich mit JavaScript im Browser beschäftigen? Bauen Sie alles auf dem Server auf und vermeiden Sie eine Überlastung des kleinen Browsers auf dem kleinen Telefon.

Wo der Knoten gewinnt: Dienstaufrufe sind dünner als HTML-fette PHP-Aufrufe

AJAX-verrückte HTML5-Webanwendungen können zwar zu viele bewegliche Teile haben, sind aber cool - und sehr effizient. Sobald sich der JavaScript-Code im Browser-Cache befindet, bewegen sich nur die neuen Daten entlang der Drähte. Es gibt nicht viel HTML-Markup und es gibt keine wiederholten Versuche, die gesamte Seite herunterzuladen. Nur die Daten haben sich geändert. Wenn Sie bereit sind, Zeit für die Erstellung einer raffinierten browserbasierten Web-App zu investieren, zahlt sich dies aus. Node.js ist optimiert, um die Daten und nur die Daten über Webdienste bereitzustellen. Wenn Ihre App komplex und datenreich ist, ist sie eine gute Grundlage für eine effiziente Bereitstellung.

Wo PHP gewinnt: SQL

PHP wurde entwickelt, um mit MySQL und seinen vielen Varianten wie MariaDB koexistieren zu können. Wenn MySQL nicht genau richtig ist, gibt es andere großartige SQL-Datenbanken von Oracle und Microsoft. Ihr Code kann mit einigen Änderungen an Ihren Abfragen wechseln. Die riesige SQL-Welt endet nicht an ihren Grenzen. Einige der stabilsten und am besten entwickelten Codes lassen sich mit einer SQL-Datenbank verbinden, sodass die gesamte Leistung auch problemlos in ein PHP-Projekt integriert werden kann. Es ist vielleicht keine perfekte, glückliche Familie, aber es ist eine große. Darüber hinaus wird die Datenbankwelt langsam besser, da Entwickler Möglichkeiten finden, der Datenbank mehr Intelligenz hinzuzufügen, sodass Sie nicht so hart arbeiten müssen.

Wo Node.js gewinnt: JSON

Wenn Sie Zugriff auf SQL haben müssen, verfügt Node.js über Bibliotheken, um dies zu tun. Node.js spricht aber auch JSON, die Verkehrssprache für die Interaktion mit vielen der neuesten NoSQL-Datenbanken. Das heißt nicht, dass Sie keine JSON-Bibliotheken für Ihren PHP-Stack erhalten können, aber die Einfachheit der Arbeit mit JSON bei der Verwendung von JavaScript hat etwas Fließendes. Es ist eine Syntax vom Browser über den Webserver bis zur Datenbank. Die Doppelpunkte und die geschweiften Klammern funktionieren überall gleich. Das allein erspart Ihnen Stunden der Frustration.

Wo PHP gewinnt: Codierungsgeschwindigkeit

Für die meisten Entwickler fühlt sich das Schreiben von PHP für Webanwendungen schneller an: keine Compiler, keine Bereitstellung, keine JAR-Dateien oder Präprozessoren - einfach Ihr Lieblingseditor und einige PHP-Dateien in einem Verzeichnis. Ihre Laufleistung variiert, aber wenn es darum geht, ein Projekt schnell zusammenzubringen, ist PHP ein gutes Werkzeug.

Wo Node.js gewinnt: Anwendungsgeschwindigkeit

Das Schreiben von JavaScript-Code ist etwas schwieriger, wenn Sie geschweifte Klammern und Klammern zählen. Wenn dies erledigt ist, kann Ihr Node.js-Code fliegen. Der Rückrufmechanismus ist brillant, da er Sie vor dem Jonglieren der Threads bewahrt. Der Kern ist gut gebaut und so konzipiert, dass er all das für Sie erledigt. Wollen das nicht alle?

Wo PHP gewinnt: Wettbewerb

Der Kampf um die Herzen und Gedanken der PHP-Entwickler ist noch nicht abgeschlossen. Das HHVM-Team und das Zend-Team arbeiten hart daran, schnellen Code für alle bereitzustellen. Unabhängige Benchmarks werden angezeigt, und alle setzen die Codebasen an ihre Grenzen. Dies bedeutet nur eine bessere Leistung.

Wo Node.js gewinnt: Solidarität

Möchten Sie wirklich zwei verschiedene Codebasen? Sicher, Wettbewerb hilft, aber bald folgt eine Fragmentierung. Was passiert, wenn Ihr Code nur auf einem der beiden ausgeführt wird? Wettbewerb nützt nichts, wenn Sie Wochen oder Monate damit verbringen müssen, Ihren Code neu zu schreiben. Während Node.js vor einigen Jahren mit dem Start von io.js einen eigenen Splitter erlebte, hat sich das Node.js-Universum seitdem wieder vereint und gibt ihm die Art von Sprachsolidarität, nach der sich PHP-Entwickler bald sehnen könnten.

Wo PHP gewinnt: Grundlegende Apps

In den letzten Jahren haben einige Entwickler Web-Apps gestartet und waren von dem schleppenden Verhalten frustriert. Das JavaScript, das all diese beweglichen Teile antreibt, kann Zehntausende von Bytes, manchmal Hunderttausende sein. Wenn alle Pakete ankommen, müssen sie analysiert, kompiliert und schließlich ausgeführt werden - alles, um einige Bytes wie die Temperatur und die Vorhersage zu liefern.

Die Gegenreaktion gegen diesen Rokokowahnsinn findet sich in den Teams, die statische Site-Generatoren (463 in diesem Artikel) und abgespeckte Webseiten im AMP-Format erstellen. PHP ist eine natürliche Wahl für jedes Team, das die Intelligenz auf den Server konzentrieren möchte, damit der Client nicht überlastet wird.

Wo Node.js gewinnt: Reichtum

Ludwig Mies van der Rohe, der Architekt von Gebäuden, sagte einmal: "Weniger ist mehr." Robert Venturi, ein anderer Architekt, kam und erwiderte: "Weniger ist langweilig." Die Smartphones haben mehr Strom als ein Raum voller Cray-Computer. Die Desktops verfügen über Grafikkarten mit mehreren Lüftern, um sie während der gesamten Verarbeitung kühl zu halten. Warum sollten wir unseren Code streifen und wie ein Opfer der Depression in einem Steinbeck-Roman leben? Ausleben. Große, raffinierte Websites voller JavaScript-Code sind auffällig, dramatisch und machen vor allem Spaß. Sicher, es ist etwas obszön, so viel Bandbreite für ein paar Datenbits zu verschwenden, aber die Bandbreite war noch nie billiger. Lebe ein bisschen!

Wo beide gewinnen: Headless

Das Wort "kopflos" bezieht sich auf den PHP-Code, der auf dem Server ausgeführt wird. In letzter Zeit haben einige der besten PHP-Anwendungen wie Drupal einen Blick über den Gang geworfen und sind erstaunt über die ausgeklügelten Benutzeroberflächen, die von JavaScript-Frameworks wie React, Angular oder Vue erstellt wurden. Anstatt zu versuchen, mit ihnen zu konkurrieren, geben sie die Kontrolle über den Client ab und konzentrieren sich darauf, mit dem Back-End auf dem Server gute Arbeit zu leisten.

Wenn Sie viel in PHP-Code investiert haben, der auf dem Server ausgeführt wird, können Sie auf diese Weise das Beste aus beiden Ansätzen herausholen. Der alte, etablierte PHP-Code fungiert als Eingangstür zur Datenbank, überprüft die Anforderungen, bereinigt die Daten und stellt im Allgemeinen die gesamte Geschäftslogik bereit. Die Client-Seite ist eine progressive Web-App, die mit dem neuesten JavaScript-Framework geschrieben wurde. Wenn es Informationen benötigt, sendet es eine AJAX-Anfrage an den PHP-Code.

Dies mag für jemanden, der von vorne anfängt, keinen Sinn machen, aber wenn Sie sich jahrelang auf PHP verlassen haben und schrittweise vorankommen möchten, kann dies ein glücklicher Kompromiss sein.

Wo beide gewinnen: Microservices und Serverless

Die zunehmenden Paradigmen für Microservice oder Serverless bieten JavaScript- und PHP-Code die Möglichkeit, auf dem Server zusammenzuleben und miteinander auszukommen. Beide Lösungen teilen die Arbeit in Dutzende kleinerer Dienste oder Funktionen auf. Diese können unabhängig voneinander ausgeführt werden und auf ihren Spuren bleiben. Auf einigen Teilen, normalerweise den älteren und stabilsten Abschnitten der App, kann PHP ausgeführt werden. Die anderen Teile, oft die neueren, werden in Node.js geschrieben. Die Sprache von POSToder GETkann die Verkehrssprache sein, die sie alle verbindet.