Das Web befindet sich in einer Ära der schnellen Entwicklung. Serverseitige Entwickler sind sehr verwirrt, wenn sie eine Sprache auswählen. Es gibt seit Langem dominierende Sprachen wie C, Java und Perl sowie Sprachen, die sich auf Webentwicklung konzentrieren, wie Ruby, Clojure und Go. Solange Ihr Projekt gut läuft, scheint Ihre Wahl nicht so wichtig zu sein.

PHP vs Node.js

Aber wie können diese neuen Webentwickler die richtige Wahl treffen?

Ich möchte keinen Krieg zwischen den PHP- und Node.js-Lagern beginnen. Ich werde den Entwicklungsstand dieser beiden Sprachen in ihren jeweiligen Bereichen vergleichen:

  • PHP
    Rasmus Lerdorf entwickelte PHP 1994. Es wird von Komponenten ausgeführt, die auf Webservern (Apache, Nginx) installiert sind. PHP-Code kann mit HTML gemischt werden. Anfänger können schnell wertvollen Code ohne viel Übung schreiben. Dies hat PHP zunehmend populär gemacht; heute läuft PHP auf 80% der Server weltweit. WordPress, ein Content-Management-System, das von einem Viertel der Websites weltweit verwendet wird, ist in PHP geschrieben.
  • Node.js
    Ryan Dahl entwickelte Node.js im Jahr 2009. Es basiert auf Googles V8-JavaScript-Engine (die clientseitigen JavaScript-Code im Chrome-Browser ausführt). Im Gegensatz zu anderen Sprachen verfügt Node.js über integrierte Bibliotheken zur Verarbeitung von Netzwerkanfragen und -antworten, sodass Sie keinen separaten Server (Apache, Nginx) oder andere Abhängigkeiten benötigen. Obwohl Node.js sehr neu ist, erlangte es schnell große Popularität. Es wird in vielen großen Unternehmen eingesetzt, wie Microsoft, Yahoo, LinkedIn und PayPal.

Was ist mit unseren geliebten C#, Java, Ruby, Python, Perl, Erlang, C++, Go, Dart, Scala, Haskell und so weiter?

Wenn der Artikel die verschiedenen Parameter all der oben genannten Sprachen vergleichen würde, wäre er sehr lang. Würden Sie ihn trotzdem lesen? Erwarten Sie, dass ein Programmierer alle Programmiersprachen kennt? Das ist offensichtlich unmöglich. Ich habe hauptsächlich PHP und Node.js verglichen, aus den folgenden Hauptgründen:

  1. Erstens sind sie es wert, verglichen zu werden. Beide sind Open Source, beide sind der Webentwicklung gewidmet und beide können für ähnliche Projekte verwendet werden.
  2. PHP gibt es schon seit Langem, aber Node.js kommt gerade erst auf und erhält immer mehr Aufmerksamkeit. Sollten PHP-Programmierer den Node.js-Hype glauben? Sollten sie einen Sprachwechsel in Betracht ziehen?
  3. Ich verstehe und liebe Programmiersprachen. Ich verwende PHP und JavaScript seit den 1990er-Jahren und habe außerdem mehrere Jahre Erfahrung mit Node.js. Daneben habe ich mich in andere Technologien hineingeschnuppert, kann sie hier aber noch nicht objektiv bewerten.

Außerdem spielt es keine Rolle, wie viele Sprachen verglichen werden, denn irgendwo wird sich immer jemand beschweren, dass ich seine Sprache nicht erwähnt habe.

Das Battle auf SitePoint

Programmierer verbringen viel Zeit damit, ihre Programmierfähigkeiten zu verbessern. Manche Menschen haben übertragbare Fähigkeiten zwischen Programmiersprachen, aber diejenigen, die ein höheres Niveau erreichen, treffen ihre eigenen Entscheidungen aufgrund vieler Faktoren. Auf subjektiver Ebene werden Sie Ihre technischen Entscheidungen fördern und verteidigen.

SitePoint Smackdowns verfolgt nicht den Ansatz „Wähle, was zu dir passt, Freund“. Ich werde Empfehlungen auf Grundlage persönlicher Erfahrung, Anforderungen und Vorlieben aussprechen. Du magst nicht mit allem übereinstimmen, was ich sage, und das spielt keine Rolle; wichtig ist, dass deine Meinungen anderen helfen, fundiertere Entscheidungen zu treffen.

Bewertungsmethode

Im Folgenden werden PHP und Node.js über zehn Runden hinweg verglichen. In jeder Runde werden gängige Entwicklungsherausforderungen betrachtet, die auf jede Webtechnologie angewendet werden können. Wir gehen nicht zu sehr ins Detail; kaum jemand interessiert sich für den Wert von Zufallszahlengeneratoren oder das Sortieren von Arrays.

Wer die meisten Runden gewinnt, ist der Sieger. Bereit? Lass die Schlacht beginnen ...

Runde eins: Erste Schritte

Wie schnell können Sie eine „Hello World“-Webseite erstellen? In PHP:

<?php
    echo 'Hello World!';
?>

Dieser Code kann in jede Datei eingefügt werden, die von der PHP-Engine geparst werden kann – üblicherweise eine Datei mit der Endung .php. Geben Sie einfach die URL in Ihrem Browser ein, um zu der Datei zu navigieren.

Zugegeben, das ist nicht alles. Dieser Code kann nur auf einem Webserver mit installiertem PHP ausgeführt werden (PHP hat einen eingebauten Server, aber es ist trotzdem besser, einen robusteren zu verwenden). Die meisten Betriebssysteme bieten Serversoftware, wie IIS unter Windows, Apache unter Mac und Linux, obwohl sie Start und Konfiguration erfordern. Vorgefertigte Installationsprogramme wie XAMPP oder VM-Images (wie Vagrant) werden oft verwendet. Ein einfacherer Weg: Laden Sie Ihre Dateien bei einem beliebigen Webhost hoch.

Im Gegensatz dazu ist die Installation von Node.js ein Kinderspiel. Sie könnenden Installer herunterladenodereinen Paketmanager verwenden. Als Nächstes erstellen wir eine Webseite in hello.js:

var http = require('http');
http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World!');
}).listen(3000, '127.0.0.1');

Bevor Sie http://127.0.0.1:3000/ in Ihrem Browser aufrufen, müssen Sie node hello.js im Terminal eingeben, um die Anwendung zu starten. Mit den fünf Codezeilen oben haben wir einen kleinen Webserver erstellt. Obwohl dies überraschend ist, ist es selbst für Personen mit großer clientseitiger JavaScript-Erfahrung schwer zu verstehen.

PHP gewinnt diese Runde, weil es konzeptionell einfacher ist. Jemand mit ein wenig Wissen über PHP-Anweisungen kann etwas Nützliches entwickeln. PHP hat mehr Softwareabhängigkeiten, aber die Konzepte von PHP sind für Anfänger weniger umständlich.

Wissen über JavaScript zu haben und Node.js-Anwendungen zu entwickeln, sind zwei verschiedene Dinge. Die Entwicklungsmethoden von Node.js unterscheiden sich von den meisten serverseitigen Technologien. Sie müssen zuerst einige ziemlich komplexe Konzepte verstehen, wie Closures und Callback-Funktionen.

Runde zwei: Hilfe und Unterstützung

Ohne die Hilfe offizieller Dokumentation und Ressourcen (Kurse, Foren, Stack Overflow) werden Sie unweigerlich kämpfen. PHP gewinnt diese Runde mühelos; es gibt eine Fülle von Anleitungen und zwanzig Jahre Q&A. Egal, was Sie tun möchten, jemand war schon vor Ihnen mit demselben Problem konfrontiert.

Node.js hat eine gute Dokumentation, ist aber jünger und bietet weniger Hilfe als PHP. JavaScript ist genauso lange auf dem Markt wie PHP, aber der Großteil der Hilfe betrifft die Browserentwicklung, was hier im Grunde nicht hilfreich ist.

Runde drei: Sprachsyntax

Sind die Deklarationen und die Struktur logisch und einfach zu verwenden?

Im Gegensatz zu einigen Sprachen und Frameworks schränkt PHP Sie nicht darauf ein, in einer bestimmten Weise zu schreiben; es liegt bei Ihnen. Sie können mit ein paar Zeilen Code beginnen, dann einige Methoden hinzufügen, dann einfache Objekte im PHP4-Stil schreiben und schließlich elegante objektorientierte PHP5+-Anwendungen nach dem MVC-Muster erstellen. Ihr Code mag anfangs chaotisch sein, aber er funktioniert, und er wird besser, je tiefer Sie ihn verstehen.

PHPs Syntax mag zwischen Versionen leicht angepasst werden, aber die Abwärtskompatibilität wird im Allgemeinen gut gehandhabt. Leider führt dies auch zu einem Problem: PHP ist unordentlich. Zum Beispiel, wie zählt man die Anzahl der Zeichen in einer Zeichenkette? Ist es count? str_len? Oder strlen? Oder mb_strlen? PHP hat Hunderte von Funktionen, und die Namenskonventionen sind nicht völlig einheitlich. Versuchen Sie, ein paar Zeilen Code zu schreiben, ohne in die Dokumentation zu schauen.

JavaScript ist relativ einfacher, mit nur ein paar Dutzend Kernanweisungen. Allerdings wird seine Syntax von Entwicklern oft kritisiert, weil sein prototypisches Objektmodell zugänglich wirkt, es aber tatsächlich nicht ist. Auch verschiedene Mathematikfehler (0.1 + 0.2 != 0.3) und unordentliche Typumwandlung ('4' + 2 == '42' und '4' - 2 == 2) haben viele Beschwerden hervorgerufen, aber diese Situationen verursachen selten Probleme; die meisten Sprachen haben solche Ausreden.

PHP hat seine Vorteile, aber in dieser Runde erkläre ich Node.js zum Sieger. Die Gründe sind wie folgt:

  1. JavaScript ist die am schwersten zu verstehende Sprache der Welt – aber wenn Sie eines Tages einen Geistesblitz haben und die Konzepte sich fügen, werden Sie feststellen, dass andere Sprachen zu schwerfällig sind.
  2. JavaScript-Code ist prägnanter als PHP. Zum Beispiel müssen Sie nicht mehr mit JSON hin und her konvertieren – und auch nicht mit UTF-8.
  3. Full-Stack-Entwickler können JavaScript sowohl auf der Clientseite als auch auf der Serverseite verwenden. Das Gehirn muss nicht hin und her wechseln.
  4. Ein tiefes Verständnis von JavaScript weckt den Wunsch, es mehr zu nutzen, aber bei PHP ist das nicht der Fall.

Vierte Runde: Entwicklungswerkzeuge

Beide Technologien verfügen über einige hervorragende Editoren, integrierte Entwicklungsumgebungen, Debugger, Validatoren und andere Tools. Ich denke, das ist ein Unentschieden, aber es gibt einige Tools, die Node.js einen leichten Vorteil verschaffen: NPM – Paketmanager. NPM ermöglicht es Ihnen, Abhängigkeiten zu installieren und zu verwalten, Konfigurationsvariablen festzulegen, Skripte zu definieren und mehr.

PHPs Composer-Projekt wurde von NPM inspiriert und ist in einigen Aspekten stärker. Allerdings stellt PHP es nicht standardmäßig bereit, seine aktive Bibliothek ist kleiner und sein Einfluss auf die Community ist geringer.

NPM verdient auch Anerkennung für das Wachstum von Build-Tools wie Grunt und Gulp, die die Entwicklungsmethoden revolutioniert haben. Manchmal möchten/müssen PHP-Entwickler Node.js installieren; das ist kein Rückschritt.

Runde fünf: Umgebung

Wo kann die Technologie eingesetzt und bereitgestellt werden? Welche Plattformen und Ökosysteme werden unterstützt? Webentwickler müssen oft Anwendungen entwickeln, die nicht vollständig webbasiert sind, wie Build-Tools, Migrationstools, Datenbankkonvertierungsskripte usw.

PHP bietet Möglichkeiten, Desktop-Anwendungen und Kommandozeilen-Tools zu entwickeln, aber man würde sie nicht verwenden. Im Wesentlichen ist PHP eine serverseitige Technologie; sie ist in diesem Bereich hervorragend, geht aber selten darüber hinaus.

Vor einigen Jahren galt JavaScript als sehr eingeschränkt, mit einigen peripheren Technologien, aber sein Hauptschlachtfeld war der Browser. Node.js hat diese Wahrnehmung verändert und eine Explosion von JavaScript-Projekten ausgelöst. Man kann JavaScript überall einsetzen: im Browser, auf dem Server, im Terminal, auf dem Desktop, sogar in eingebetteten Systemen, was JavaScript allgegenwärtig macht.

Runde sechs: Integration

Entwicklungstechnologien sind sehr begrenzt, wenn sie nicht mit Datenbanken und Treibern integriert werden können. PHP ist in diesem Bereich stark. PHP gibt es seit vielen Jahren, und seine Erweiterungen ermöglichen die direkte Kommunikation mit Servern, die gängige oder obskure APIs haben.

Node.js holt schnell auf, aber es kann mühsam sein, ausgereifte Integrationskomponenten für bestimmte alte, obskure Technologien zu finden.

Runde sieben: Hosting und Deployment

Wie einfach ist es, deine brandneue App auf einem Online-Webserver bereitzustellen? Das ist ein weiterer kompletter Sieg für PHP. Wende dich an ein beliebiges Webhosting-Unternehmen, und du wirst umfangreiche PHP-Unterstützung finden, vielleicht mit kostenlos enthaltenem MySQL. Für Sandboxes gilt PHP als einfacher, und riskante Erweiterungen können deaktiviert werden.

Node.js ist ein anderes Kaliber; serverseitige Anwendungen laufen endlos. Du brauchst eine physische/virtuelle/Cloud- oder angepasste Serverumgebung, vorzugsweise mit Root-Zugriff, der bei manchen Servern außer Reichweite ist, besonders bei Shared-Servern; du könntest den gesamten Server zum Absturz bringen.

Node.js-Hosting wird einfacher werden, aber ich glaube nicht, dass es jemals so bequem sein wird wie das Hochladen einiger PHP-Dateien per FTP.

Runde acht: Performance

PHP ist fleißig, und es gibt viele Projekte und Optionen, die es schneller machen können. Selbst PHP-Entwickler mit strengen Leistungsanforderungen machen sich selten Sorgen um die Geschwindigkeit, aber Node.js hat im Allgemeinen eine bessere Performance. Natürlich hängt die Performance weitgehend von der Erfahrung und dem Engagement des Entwicklungsteams ab, aber Node.js hat dennoch die folgenden Vorteile:

Weniger Abhängigkeiten

Alle Anfragen an PHP-Anwendungen müssen über einen Webserver geleitet werden, um den PHP-Interpreter zu starten und PHP-Code auszuführen. Node.js benötigt diese Abhängigkeiten nicht, und du wirst mit ziemlicher Sicherheit ein Framework mit einem Server verwenden, wie Express, das leichtgewichtig ist und als Teil deiner Anwendung gute Dienste leistet.

Kleinerer und schnellerer Interpreter

Der Interpreter von Node.js ist kleiner und flexibler als der von PHP. Er ist nicht durch Legacy-Kompatibilitätsprobleme älterer Sprachversionen belastet, und Google hat viel getan, um die Leistung der V8-Engine zu verbessern.

Anwendungen sind immer online

PHP folgt dem standardmäßigen Client-Server-Modell. Bei jeder Seitenanfrage wird die Anwendung initialisiert; du liest Konfigurationsparameter, stellst eine Verbindung zur Datenbank her, liest Informationen, renderst HTML. Node.js-Anwendungen laufen dauerhaft und müssen nur einmal gestartet werden. Zum Beispiel kannst du ein einzelnes Datenbankverbindungsobjekt erstellen und es für alle Anfragen wiederverwenden. Zugegeben, PHP hat auch Möglichkeiten, dies zu erreichen, etwa mit Memcached, aber das ist keine Standardfunktion der Sprache mehr.

Ereignisgesteuerte, nicht blockierende E/A

PHP verwendet, wie die meisten anderen serverseitigen Sprachen, ein blockierendes Ausführungsmodell. Wenn du einen Befehl ausführst, z. B. das Abrufen von Daten aus einer Datenbank, musst du warten, bis dieser Befehl abgeschlossen ist, bevor du den nächsten Inhalt ausführst. Node.js wartet normalerweise nicht. Stattdessen gibst du eine Callback-Funktion an, die einmal aufgerufen wird, wenn der Befehl abgeschlossen ist. Zum Beispiel:

// fetch records from a NoSQL database
DB.collection('test').find({}).toArray(process);
console.log('finished');

// process database information
function process(err, recs) {
    if (!err) {
        console.log(recs.length + ' records returned');
    }
}

In diesem Beispiel gibt die Konsole zuerst 'finished' aus, dann 'N records returned', weil die process-Funktion erst aufgerufen wird, wenn alle Daten zurückgegeben wurden. Mit anderen Worten: Der Interpreter kann andere Dinge tun, während er andere Prozesse verarbeitet.

Beachte, dass die Situation komplexer ist und es einige Einschränkungen gibt:

  • Node.js/JavaScript kann nur auf einem einzelnen Thread ausgeführt werden, aber die meisten Webserver sind multithreaded und verarbeiten Anfragen gleichzeitig.
  • Ein lang laufender JavaScript-Prozess eines Benutzers verhindert die Ausführung des Codes anderer Benutzer, es sei denn, du teilst die Aufgabe auf oder verwendest ...Web Workers。
  • Benchmarks sind subjektiv und fehlerhaft; du kannst einige Beispiele finden, bei denen Node.js besser ist, und einige gegensätzliche Beispiele, bei denen PHP besser ist. Programmierer versuchen nur, ihre Überzeugungen zu beweisen!
  • Das Schreiben von asynchronem, ereignisgesteuertem Code ist sehr komplex und herausfordernd.

Ich kann nur aus meiner Erfahrung sprechen: Meine Node.js-Anwendungen sind deutlich schneller als vergleichbare PHP-Anwendungen. Deine sind es vielleicht nicht, aber du wirst es nie erfahren, wenn du es nicht versuchst.

Runde Neun: Entwicklerleidenschaft

Das geht über das Ziel „allgemeiner Herausforderungen der Webentwicklung“ hinaus, aber es ist wichtig. Wenn du dich jeden Tag davor fürchtest, Code zu schreiben, dann spielt es keine Rolle, welche Sprache besser ist.

Es ist schwer, das zu vergleichen, aber einige PHP-Entwickler sind leidenschaftlich bei PHP. Wann hast du das letzte Mal einen PHP-Artikel oder eine Präsentation gelesen, die dich berührt hat? Vielleicht muss man nicht mehr sagen? Vielleicht ist es geringere Aufmerksamkeit? Oder ich habe nicht an den richtigen Stellen gesucht? PHP 7 hat einige neue Funktionen, aber die Technologie stagniert seit vielen Jahren. Trotzdem beschweren sich nur wenige Entwickler über PHP.

JavaScript spaltet die Community; einige lieben es, einige hassen es, und einige Programmierer sind unentschieden dazwischen. Trotzdem ist das Feedback zu Node.js überwiegend positiv. Es steht an vorderster Front, teils weil es neu ist, und das Lob wird vielleicht nicht von Dauer sein. Vorerst gewinnt Node.js diese Runde.

Zehnte Runde: Aussichten

Es spielt keine Rolle, welche serverseitige Sprache du auch immer einsetzt; selbst wenn sie nicht mehr aktualisiert wird, wird sie weiter funktionieren (juhu, ColdFusion!). Obwohl sich die Nutzung stabilisiert, verwenden viele Leute immer noch PHP. Ich garantiere, dass es noch weitere zwanzig Jahre durchhalten kann.

Node.js ist schnell aufgestiegen. Es bietet einen modernen Entwicklungsansatz, der dieselbe Syntax wie die clientseitige Entwicklung verwendet und gleichzeitig revolutionäre HTML5-Funktionen wie WebSockets und Server-Sent Events unterstützt. Trotz einiger Kontroversen über die geforkten Funktionen der Sprache wächst die Nutzung von Node.js weiterhin exponentiell.

Node.js wird zwangsläufig PHP Marktanteile wegnehmen, aber ich glaube nicht, dass es PHP vollständig ersetzen kann. Beide Technologien haben eine glänzende Zukunft. Ich erkläre diese Runde für unentschieden.

Endgültiger Sieger

Endstand: Node.js gewinnt 5 Runden, PHP gewinnt 4 Runden, ein Unentschieden. Ich dachte, es würde zu einer Seite tendieren, aber das Ergebnis ist gemäßigter als erwartet.

Node.js hat eine gewisse Lernkurve, ist nicht ideal für Anfänger, aber es hat diesen Vergleich gewonnen. Wenn du außerdem ein solider JavaScript-Programmierer bist, der die Sprache mag, wird Node.js dich nicht enttäuschen. Es ist moderner und bietet seine eigene Webentwicklungserfahrung; du wirst PHP nicht vermissen.

Aber setze PHP nicht herab; PHP ist immer noch lebendig. Du solltest nicht auf den Node.js-Zug aufspringen, nur weil Node.js schneller, neuer oder trendiger ist. PHP ist leicht zu lernen und unterstützt immer noch professionelle Programmiertechniken. Hilfe gibt es überall und die Entwicklung ist einfach. Selbst eingefleischte Node.js-Entwickler müssen in Betracht ziehen, PHP für einfache Websites und Anwendungen zu verwenden.

Mein Rat ist: Bewerte die Optionen, wähle eine Sprache basierend auf deinen Bedürfnissen, was viel zuverlässiger ist als "Vergleichs"-Artikel wie dieser.

Quelle: http://www.oschina.net/translate/php-vs-node-js