Node.js ist kein perfektes Produkt, es hat Nachteile (mit JS?). Einige von ihnen haben sich aufgrund fehlerhafter Entscheidungen von Ryan Dahl, die in dem Artikel Wie hat der Schöpfer von kurz darauf hingewiesen, aus einem frühen Entwicklungsstadium herausgezogen? node.js werden darin frustriert . Wie so oft ist es in einigen Fällen schwierig oder unmöglich, eine Alternative zu diesem System zu finden, insbesondere im Unternehmenssektor. Wenn Sie jedoch keinen großen Legacy-Code unterstützen müssen, der Programmierern über viele Jahre hinweg Arbeit bietet, können Sie nach anderen Lösungen suchen. Sie können über den "Node.js Killer" in dem oben erwähnten Artikel lesen, einige andere werden in diesem Artikel besprochen.
ASP.NET
"Ein alter Freund ist besser als zwei neue". ASP.NET hat eine lange Geschichte. Die Active Server Pages-Technologie, die die Grundlage für ASP.NET-Dienste bildete, wurde Ende des letzten Jahrhunderts entwickelt. Natürlich ist die Entwicklungszeit nicht immer gut, aber die lange Lebensdauer des Produkts spricht Bände. Obwohl ASP.NET ein völlig anderes Funktionsprinzip hat, ist es nicht nur eine Umgebung zum Ausführen von Programmcode und zum Verbinden von Modulen, sondern eine Plattform zum Erstellen von Webdiensten. Es wird häufig verwendet, um Probleme zu lösen, die Node.js ähneln.
Wenn Node.js die Idee eines kleinen Teams ist und in seiner einfachsten Form eine Umgebung zum Starten von JS-Programmen außerhalb des Browsers mit Zugriff auf E / A ist, ist ASP.NET ein typisches Produkt eines großen Unternehmens. Es enthält zunächst eine große Anzahl von Standardbibliotheken, mit denen Sie sofort mit der Entwicklung beginnen können. Der Knoten entwickelt sich dank der Entwicklergemeinschaft, und daher muss das System zuerst mit allen erforderlichen Modulen ausgestattet werden, die einfach unglaublich sind. Die einfachste "Hallo Welt!" on Node zieht mehrere tausend Dateien in das System. Darüber hinaus wächst die Quantität nicht immer in Qualität, manchmal scheinen die Entwickler sogar bereit zu sein, "i ++" in ein separates Modul zu packen, das dann millionenfach heruntergeladen wird, und dieses Paket plötzlich zu aktualisieren oder zu entfernen wird ernsthafte Kompatibilitätsprobleme verursachen oder npm abstürzen.In ASP werden Sicherheit und Updates vom Microsoft-Ökosystem überwacht, von ihm geschriebene Bibliotheken und andere große Unternehmen werden sorgfältig auf Fehler und Kompatibilitätsprobleme überprüft ...
Trotz vieler Unterschiede ist einer der wichtigsten ein anderer Ansatz für die Verteilung von Berechnungen. In Node.js wurde alles in einem einzigen Thread ausgeführt, jedoch mit asynchroner E / A. ASP arbeitete ursprünglich in Multithreading und synchronen E / A. Die erste Option zeigt eine hervorragende Leistung, wenn die Dienste einen sehr intensiven Austausch erfordern, jedoch auf Kosten einer gewissen Komplikation des Codes. In den neuesten Produktversionen werden diese Unterschiede behoben. In Node.js und ASP.NET wird das Muster async \ await verwendet.
JS ist während seiner Entwicklung stark gewachsen, aber es bleibt eine Sprache ohne starke Typisierung und verliert gegen C #, das ursprünglich unter dem direkten Einfluss von C ++ entwickelt wurde, das von Anfang an eine starke Typisierung und OOP aufwies. Dies hat zur Folge, dass C # leistungsfähiger und konsistenter ist und keine Add-Ons wie TS erfordert. Andererseits ist JS aufgrund seiner Einfachheit bei der Programmierung von Microservices, für die keine komplexen C # -Funktionen erforderlich sind, stärker gefragt.
Zusätzlich zu den Unterschieden in den verwendeten Programmiersprachen haben diese Plattformen unterschiedliche Ideologien. In ASP.NET ist vieles vordefiniert, es bietet alles, was fertig ist, beginnend mit der Dateistruktur. Während Sie mit Node.js arbeiten, müssen Sie alles selbst auswählen, was viel Flexibilität bietet, aber die Entwicklung erschwert. ASP.NET verfügt jedoch über leistungsstarke Debugging-, Test- und Refactoring-Tools.
Das einzige, was ASP.NET Node.js ernsthaft unterlegen ist, ist die einfache Bereitstellung. Der Knoten benötigt nur eine Engine und einen Proxy oder Docker. Die Plattform kann entweder selbst konfiguriert werden oder Sie können ein fertiges VPS-Image erstellen, das von fast jedem Hosting-Anbieter erhältlich ist. Für ASP ist trotz der plattformübergreifenden Nutzung nicht alles so einfach, und vorgefertigte Images für Server stehen nur den größten Spielern der Azure-Ebene zur Verfügung.
Ist JavaScript wirklich notwendig?
Node.js wurde als Laufzeit für JS erstellt, da es sich um eine einfache und zugängliche Programmiersprache handelt, mit der problemlos mehrere Skripte gleichzeitig für die bidirektionale Webanwendungskommunikation zwischen einem Browser und einem Server implementiert werden können. ASP.NET wurde auch zum Schreiben von Webanwendungen nur mit anderen Methoden erstellt. Das gleiche Deno besteht aus mehreren Ebenen über der virtuellen Maschine, die direkt mit den Serverressourcen arbeiten. Es ist jedoch nicht erforderlich, komplexe Wrapper aus Programmiersprachen zu verwenden, die nicht direkt auf dem Server ausgeführt werden und virtuelle Maschinen erfordern.
Gehen
2007 entschieden die Ingenieure des Unternehmens, dass C ++ nicht den aktuellen Realitäten der Computertechnologie entspricht. Es waren effiziente Parallelisierungstools erforderlich, die die Funktionen von Multicore-Prozessoren und verteilten Systemen, einen automatischen Garbage Collector und einige Vereinfachungen nutzten, um die Lesbarkeit des Codes zu verbessern und die Arbeit mit Typen zu vereinfachen.
Das Ziel der Entwickler war es nicht, eine „bessere Version von C ++“ zu erstellen, sondern die neue Sprache aufgrund ihrer Programmiererfahrung verständlicher zu machen. Go wurde 2009 öffentlich angekündigt und stieg schnell zu fast den Top 10 der Programmiersprachen auf (13. Anfang 2012). Raymond Dahl selbst lobte es in Ausdrücken wie: "Warum Node.js, wenn es eine so schöne Sprache wie Go gibt?". Aber die Neuheit ging vorbei und die Sprache wurde fast vergessen, bis sich herausstellte, dass ihre Parallelisierungstools für die Entwicklung von Microservices in Webanwendungen gut geeignet waren. Dies brachte die Sprache zu ihrer früheren Popularität zurück.
Für Go wurden mehrere Web-Frameworks geschrieben, die jedoch nicht verwendet werden müssen, da sie standardmäßig über alle für die Programmierung von Webanwendungen erforderlichen Funktionen verfügen. Deno wurde ursprünglich in Go geschrieben.
Rubin
Im Vergleich zum gleichen Go ist dies nicht die neueste Sprache, sie wurde 1995 veröffentlicht. Im Gegensatz zu Go wurde es von einem einzigen Enthusiasten, Yukihiro Matsumoto, entwickelt, der darauf aus war, eine objektorientierte, interpretierte Sprache zu schaffen, die besser als Pyton war. Die Sprache gewann nicht sofort an Popularität, nicht zuletzt, weil ihre Dokumentation in den ersten Jahren nur auf Japanisch war. Bücher in englischer Sprache wurden erst in den frühen 2000er Jahren veröffentlicht, und die Anerkennung erfolgte mit der Veröffentlichung des Ruby on Rails- Webframeworks im Jahr 2005, das schnell populär wurde, insbesondere als Apple 2007 bekannt gab, dass es mit Mac OS X 10.5 ausgeliefert wird. .
Wie bei allen interpretierten Sprachen war Rubys Geschwindigkeit relativ langsam, was die Leistung von Webanwendungen, die in Ruby on Rails geschrieben wurden, stark beeinträchtigte. In Kenntnis dieses Problems begann der Autor, eine Version der Sprache zu entwickeln, die die Abwärtskompatibilität verlieren würde, aber viel schneller laufen würde, was er 2009 tat. Die Geschwindigkeit hat erheblich zugenommen und entspricht Webanwendungen, die unter .NET und JVM ausgeführt werden. Dank dessen ist die Popularität des Frameworks in die Höhe geschossen. Im Jahr 2018 veröffentlichte der Autor von Ruby die Version 2.6, die eine dynamische Kompilierung implementiert, die die Leistung von Anwendungen weiter beschleunigt.
Bisher ist die Ruby-Sprache eng mit dem Ruby on Rails-Framework verbunden.
Elixier
Erlang ist eine weitere Programmiersprache, die von einem großen Unternehmen entwickelt wurde. Diesmal haben die Schweden von Ericsson ihr Bestes gegeben. 1986 dachte niemand an die Entwicklung von Webanwendungen, das Internet war noch im Projekt und die Sprache wurde entwickelt, um Systeme in Echtzeit auszuführen. Lange Zeit war Erlang außerhalb des Unternehmens, das es für seine internen Bedürfnisse verwendete, praktisch unbekannt, bis das Management 1998 beschloss, die Unterstützung seiner eigenen Sprache einzustellen und die Verwendung zu verbieten, was die Entwickler dazu zwang, auf Java umzusteigen. Dies führte dazu, dass die Sprache unter einer offenen Lizenz veröffentlicht und außerhalb des Unternehmens vertrieben wurde, das sie entwickelt hat. Lange Zeit war es nur für einen kleinen Kreis von Wissenschaftlern von Interesse, bis sich herausstellte, dass sein Konzept für die Entwicklung einer Multiprozessor-Architektur gut geeignet ist.
Im Jahr 2012 kam Jose Walim, einer der Ruby on Rails-Entwickler, auf die Idee, eine Programmiersprache für Hochlastsysteme und große Websites zu erstellen. Als Ergebnis wurde Elixir entwickelt , eine funktionale Programmiersprache, die als Bytecode für die virtuelle Erlang-Maschine (BEAM) kompiliert wurde . Aufgrund der Tatsache, dass die Sprache auf Erlang basiert, das für die Programmierung von Kommunikationsgeräten entwickelt wurde, erhielt Elixir einzigartige Eigenschaften: Fehlertoleranz, Hot-Code-Austausch(Ändern oder Zurücksetzen des Codes eines laufenden Programms, ohne es neu zu starten) und die Fähigkeit, in Echtzeit zu arbeiten. Mit diesen Eigenschaften können Sie zuverlässige Hochlastsysteme erstellen, die sowohl horizontale als auch vertikale Skalierung unterstützen und 5- bis 10-mal schneller arbeiten als ähnliche Anwendungen, die in interpretierten Sprachen (PHP, Ruby, Python) geschrieben sind. Der Arbeitsort des Erstellers beeinflusste die Tatsache, dass die Sprache eine Ruby-ähnliche Syntax verwendet und für diejenigen, die Ruby on Rails verwenden, leicht zu erlernen ist.
Elixir wird derzeit von bekannten Unternehmen wie Discord, Square Enix, PepsiCo und Sketch verwendet.
Und wenn doch JavaScript?
Aber wenn es unpraktisch ist, eine neue Programmiersprache zu beherrschen, wie kann man den gesamten Knoten auf den Server ziehen? Sie können sich andere JS-Laufzeiten ansehen.
RingoJS ist eine Multithread-Plattform, die auf der JVM basiert und für die Ausführung auf Servern optimiert ist. Die Mozilla Rhino-Engine, die eine beeindruckende Geschichte hat, wird zur Interpretation von JS-Code verwendet. Die Entwicklung begann 1997, in den Tagen von Netscape. Später wurde das Projekt an die Mozilla Foundation übertragen und in Open Source veröffentlicht.
RingoJS-Anwendungen können auf jeder Linux-Plattform, bis zum Raspberry Pi oder auf Cloud-Plattformen wie Google App Engine bereitgestellt werden. RingoJS ist ein modulares System, das auf CommonJS basiert. Sie können sogar einige Module von Node.js verwenden. Mit der Ringo-Engine können Sie auch in Java geschriebene Bibliotheken integrieren.
PurpleJS ist ein weiteres einfaches JS-Framework, das auf der JVM ausgeführt wird. Nashorn (auch ein Nashorn), das von Oracle entwickelt wurde, wird als JS-Engine verwendet. Dies bedeutet nicht, dass dies ein vollwertiger Ersatz für Node ist, da das Framework keinen asynchronen Modus verwendet und Nashorn keine CommonJS-Unterstützung bietet, aber sehr leicht ist und keinen Neustart des Dienstes nach dem Ändern des Codes erfordert.
Vert.x.Ist kein Framework mehr, sondern eine mehrsprachige Reihe von Tools, mit denen Sie vollständig asynchrone reaktive Webanwendungen, Microservices und Netzwerkdienstprogramme erstellen können, die auf der JVM ausgeführt werden. Die unterstützten Sprachen sind nicht auf Java und JS beschränkt, außer dass Sie Anwendungen in Groovy, Ruby, Scala und Kotlin schreiben können. Ein modulares System mit einem zentralen Repository wird unterstützt. Vert.x ist leicht erweiterbar und skalierbar.
Es ist lustig, dass das Projekt zuerst Node.x hieß und dann umbenannt wurde, um rechtliche Probleme zu vermeiden, da die Ziele beim Erstellen dieselben waren wie bei Node.js, und Tim Fox (Ersteller von Vert.x) sagte, dass dies der Fall war inspiriert vom Erfolg von Dali und "Ich wollte Node.js in JVM machen".
Wenn die Alternativen nicht beeindruckend sind und node.js Ihre Liebe bleibt
node.js