Erstens ist Node.js kein Multithreading. Das ist wichtig. Sie müssen ein sehr talentierter Programmierer sein, um Programme zu entwerfen, die in einer Thread-Umgebung perfekt funktionieren. Fäden sind einfach hart.
Sie müssen ein Gott sein , um ein Thread-Projekt aufrechtzuerhalten, bei dem es nicht richtig entworfen wurde. Es gibt einfach so viele Probleme, die bei sehr großen Projekten schwer zu vermeiden sind.
Zweitens wurde die gesamte Plattform so konzipiert, dass sie asynchron ausgeführt werden kann. Haben Sie ein ASP.NET-Projekt gesehen, bei dem jede einzelne E / A-Interaktion asynchron war? Einfach ausgedrückt, ASP.NET wurde nicht für ereignisgesteuerte Anwendungen entwickelt.
Dann gibt es den Speicherbedarf aufgrund der Tatsache, dass wir einen Thread pro offener Verbindung haben und das gesamte Skalierungsproblem. Korrigieren Sie mich, wenn ich falsch liege, aber ich weiß nicht, wie Sie vermeiden würden, für jede Verbindung in ASP.NET einen neuen Thread zu erstellen.
Ein weiteres Problem ist, dass eine Node.js-Anforderung inaktiv ist, wenn sie nicht verwendet wird oder auf E / A wartet. Auf der anderen Seite schläft ein C # -Thread. Jetzt gibt es eine Begrenzung für die Anzahl dieser Threads, die schlafen können. In Node.js können Sie problemlos 10.000 Clients gleichzeitig parallel auf einem Entwicklungscomputer verwalten. Sie versuchen, 10k-Threads parallel auf einer Entwicklungsmaschine zu verarbeiten.
JavaScript selbst als Sprache erleichtert die asynchrone Codierung. Wenn Sie sich noch in C # 2.0 befinden, ist die asynchrone Syntax ein echtes Problem. Viele Entwickler werden einfach verwirrt sein, wenn Sie überall definieren Action<>
und Function<>
Rückrufe verwenden. Ein in einem Ereignis geschriebenes ASP.NET-Projekt kann von einem durchschnittlichen ASP.NET-Entwickler einfach nicht gewartet werden.
Wie für Fäden und Kerne. Node.js ist Single-Threaded und skaliert durch Erstellen von Prozessen mit mehreren Knoten. Wenn Sie einen 16-Kern haben, führen Sie 16 Instanzen Ihres node.js-Servers aus und haben einen einzelnen Node.js-Load-Balancer vor sich. (Vielleicht ein Nginx Load Balancer, wenn Sie wollen).
Dies alles wurde von Anfang an auf sehr niedrigem Niveau in die Plattform geschrieben. Dies war keine Funktionalität, die später auf der ganzen Linie eingeführt wurde.
Weitere Vorteile
Node.js hat viel mehr zu bieten als oben. Oben ist nur angegeben, warum die Behandlung der Ereignisschleife durch Node.js besser ist als mit asynchronen Funktionen in ASP.NET.
- Performance. Es ist schnell. Wirklich schnell.
- Ein großer Vorteil von Node.js ist die Low-Level-API. Sie haben viel Kontrolle.
- Sie haben den gesamten HTTP-Server direkt in Ihren Code integriert und dann an IIS ausgelagert.
- Sie haben den gesamten Vergleich zwischen Nginx und Apache.
- Die gesamte C10K-Herausforderung wird vom Knoten gut verarbeitet, nicht jedoch vom IIS
- Die Kommunikation mit AJAX und JSON fühlt sich natürlich und einfach an.
- Echtzeitkommunikation ist eines der großartigen Dinge bei Node.js. Es wurde dafür gemacht.
- Spielt gut mit dokumentbasierten nosql-Datenbanken.
- Kann auch einen TCP-Server ausführen. Kann Dateischreibzugriff ausführen, kann jeden Unix-Konsolenbefehl auf dem Server ausführen.
- Sie fragen Ihre Datenbank in Javascript ab, indem Sie beispielsweise CouchDB und Map / Reduce verwenden. Sie schreiben Ihren Client in JavaScript. Während der Entwicklung auf Ihrem Webstack gibt es keine Kontextwechsel.
- Umfangreiche Community-gesteuerte Open-Source-Module. Alles in node.js ist Open Source.
- Geringer Platzbedarf und fast keine Abhängigkeiten. Sie können die Quelle node.js selbst erstellen.
Nachteile von Node.js.
Es ist schwer. Es ist jung. Als erfahrener JavaScript-Entwickler habe ich Schwierigkeiten, eine Website mit Node.js zu schreiben, nur weil sie auf niedriger Ebene ausgeführt wird und ich über ein hohes Maß an Kontrolle verfüge. Es fühlt sich genauso an wie C. Viel Flexibilität und Kraft, um entweder für mich verwendet zu werden oder um mich aufzuhängen.
Die API ist nicht eingefroren. Es ändert sich schnell. Ich kann mir vorstellen, dass ich eine große Website in 5 Jahren komplett neu schreiben muss, da Node.js bis dahin geändert wird. Es ist machbar, Sie müssen sich nur bewusst sein, dass die Wartung auf den Websites von node.j nicht billig ist.
weiterführende Literatur
http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/
http://blip.tv/file/2899135
http://nodeguide.com/