Heim  >  Artikel  >  Web-Frontend  >  Ein einfacher Vergleich zwischen Node.js und Java-Backend-Servern

Ein einfacher Vergleich zwischen Node.js und Java-Backend-Servern

青灯夜游
青灯夜游nach vorne
2020-12-21 18:00:093192Durchsuche

Ein einfacher Vergleich zwischen Node.js und Java-Backend-Servern

Kürzlich bin ich zu einem neuen Unternehmen gegangen und habe das Backend übernommen, das ich schon lange zurückgelassen hatte. Aufgrund der Anforderungen des Unternehmens verwendet das Backend jedoch Nodejs, und ich habe es gelernt Node.js Mit einem tieferen Verständnis habe ich herausgefunden, dass es einen Grund gibt, warum Node.js immer beliebter werden kann. Manche Leute sagen vielleicht: „Java“ war als Back-End-Sprache schon immer vage führend. Warum müssen wir „Node.js“ noch lernen? Was genau ist Node.js? Ist es eine neue Sprache oder ein neues Framework, ein neues Tool oder nur eine einfache JavaScript-Datei? Verwandte Empfehlungen: „nodejs Tutorial

Laufzeitumgebung

Wir alle wissen, dass Java eine Laufzeitumgebung namens JRE
hat, damit Java-Programme reibungslos laufen können. JRE hat eine virtuelle Maschine namens JVM. JVM verfügt über viele Komponenten wie Garbage Collector (GC), Just-in-Time-Compiler (JIT), Interpreter, Klassenlader, Thread-Manager und Ausnahmehandler zum Ausführen verschiedener Aufgaben zu unterschiedlichen Zeiten. JRE verfügt außerdem über eine Reihe von Bibliotheken, die die Laufzeit von Java-Programmen unterstützen. Warum beziehen wir plötzlich die JRE-Laufzeitumgebung ein? Im Vergleich zu Node handelt es sich nicht um eine Sprache, sondern um ein Tool. Node.js verfügt über eine virtuelle Maschine namens JavaScript Virtual Machine. Es generiert Maschinencode für JavaScript-basierte Anwendungen, um ihn auf verschiedenen Plattformen zu ermöglichen. Diese virtuelle Maschine ist die V8-Engine von Google und verfügt außerdem über Hauptkomponenten wie JIT und GC, die jeweils für die Aufgabenausführung, Laufzeitkompilierung und Speicherverwaltung verwendet werden.

Entwicklungspotenzial

Die Beurteilung des Entwicklungspotenzials von Java und

Node

basiert möglicherweise auf der dahinter stehenden ökologischen Gemeinschaft und den unterstützenden Bibliotheken. Das traditionelle System mit Java als Kern ist jedoch natürlich Unterlegen gegenüber neuen Kräften wie Node, kurz gesagt: Java ist ausgereift und riesig, Node ist schnell und aktiv. JavaÜber seine Funktionalität und Praktikabilität muss nicht viel gesagt werden, aber

Java

enthält eine große Menge Beispielcode, was die Absichten von Programmierern stört und nicht so gut ist wie Javaeines der drei Hauptframeworks Spring: Wenn Programmierer Spring, Servlet, Datenpersistenz und die zugrunde liegenden Dinge, aus denen das System besteht, verwenden, wurde das Spring-Framework gekapselt und hilft Ihnen, alles zu bewältigen. Wir müssen uns nur darauf konzentrieren Es reicht aus, Business-Layer-Code zu schreiben. Aber im Frühling wird es Sie von einem Subsystem nach dem anderen mit Ausnahmen bestrafen, die Sie selbst dann zum Absturz bringen, wenn Sie den kleinsten Fehler machen. Unmittelbar danach wird möglicherweise eine große Ausnahmemeldung angezeigt. Es enthält gekapselte Methoden, von denen Sie noch nicht einmal wissen.

Spring

hat viel Arbeit geleistet, um die Funktionen des Codes zu implementieren. Diese Abstraktionsebene erfordert offensichtlich viel Logik. Lange Ausnahmemeldungen sind nicht unbedingt eine schlechte Sache, sie weisen auf ein Symptom hin: Wie viel zusätzlicher Speicher- und Leistungsaufwand ist dafür erforderlich? Wie funktioniert Frühling? Das Framework muss Methodennamen analysieren, die Absicht des Programmierers erraten, so etwas wie einen abstrakten Syntaxbaum erstellen,

SQL

generieren und vieles mehr. Wie viel Aufpreis werden diese Dinge kosten? Daher wird die Verwendung von Java zur Verschleierung der Komplexität das System nicht vereinfachen, sondern nur komplexer machen.

Java

Eine strenge Typprüfung ermöglicht es Java, viele Arten von Bugs zu vermeiden, da fehlerhafter Code nicht kompiliert werden kann. Der Nachteil der starken Typisierung von Java ist zu viel Boilerplate-Code. Programmierer müssen ständig Typkonvertierungen durchführen. Programmierer müssen mehr Zeit damit verbringen, präzisen Code zu schreiben und mehr Boilerplate-Code zu verwenden, um Fehler frühzeitig zu finden und zu korrigieren.

Und Node.js ist genau das Gegenteil. Threads führen zu komplexeren Systemen. Daher verwendet

Node.js

ein leichtes Single-Thread-System und verwendet die anonyme Funktion von js für asynchrone Rückrufe. Sie müssen lediglich die anonyme Funktion verwenden, bei der es sich um einen Abschluss handelt. Es ist nicht erforderlich, nach der richtigen abstrakten Schnittstelle zu suchen. Schreiben Sie einfach den Geschäftscode ohne Redundanz auf. Dies ist der größte Vorteil der Verwendung von Node.js, aber asynchrone Rückrufe stellen natürlich ein dringendes Problem dar, das gelöst werden muss: Rückruffalle.

Wenn wir in Node.js weiterhin Callback-Funktionen verschachteln, tappen wir leicht in die Falle von Callback-Funktionen. Jede Verschachtelungsebene macht den Code komplexer, was die Fehlerbehandlung und Ergebnisverarbeitung erschwert. Ein damit verbundenes Problem besteht darin, dass die JavaScript-Sprache Programmierern nicht dabei hilft, die asynchrone Ausführung angemessen auszudrücken. Tatsächlich verwenden einige Bibliotheken Promise, um asynchrone Vorgänge zu vereinfachen, aber es scheint, dass wir das Problem vereinfacht haben, aber tatsächlich ist die Codeebene komplizierter. Promise verwendet viel Boilerplate-Code und verbirgt die wahre Absicht des Programmierer.

Später unterstützt Node.js ES5 und ES6, und die Rückruffunktion kann mit der Funktion async/await neu geschrieben werden. Es ist immer noch dieselbe asynchrone Struktur, aber mit einer normalen Schleifenstruktur geschrieben. Auch die Fehler- und Ergebnisbehandlung wird an einem natürlichen Ort platziert, der Code ist leichter zu verstehen, einfacher zu schreiben und die Absicht des Programmierers ist leicht zu verstehen. Rückruffallen werden nicht durch Maskierung der Komplexität gelöst.

Stattdessen lösen Sprach- und Paradigmenänderungen das Problem von Callback-Traps und lösen gleichzeitig das Problem von zu viel Boilerplate-Code. Mit der async-Funktion wird der Code schöner. Eine einfache Lösung, die die Mängel von Node.js in Vorteile umwandelt. Aber JavaScript ist sehr locker geschrieben. Und beim Schreiben von Code werden keine Fehler gemeldet, viele Typen müssen nicht definiert werden und normalerweise ist keine Typkonvertierung erforderlich.

So ist der Code klarer und leichter zu lesen, aber es besteht die Gefahr, dass Codierungsfehler übersehen werden. Nur beim Kompilieren wird Ihre Grammatik und Logik auf Probleme überprüft, also in Node.js, für ein besseres Debugging BUG. Node unterstützt die Aufteilung des Programms in verschiedene Module. Aufgrund der Existenz von Modulen wird der Umfang des Auftretens von Fehlern auf einen bestimmten Bereich reduziert, wodurch das Modul Node.js einfacher zu testen ist.

Paketverwaltung

JavaEines der wichtigsten Probleme ist, dass es kein einheitliches Paketverwaltungssystem gibt, Maven. Aber egal, ob es um die Verwendung, die Benutzerfreundlichkeit oder die Funktionalität geht Es ist ein himmelweiter Unterschied zum Paketverwaltungssystem von Node.js.

npm ist das offiziell von Node.js bereitgestellte Paketverwaltungstool. Es ist zur Standard-Release-Plattform für Node.js-Pakete geworden und wird für die Veröffentlichung, Verbreitung und Abhängigkeitskontrolle von Node.js verwendet Pakete. npm bietet Befehlszeilentools, mit denen Sie Pakete einfach herunterladen, installieren, aktualisieren und löschen können. Außerdem können Sie als Entwickler Pakete veröffentlichen und verwalten.

Das Beste daran ist, dass die

npm-Codebasis nicht nur von Node.js, sondern auch von Front-End-Ingenieuren verwendet wird. Alle Front-End-JavaScript-Bibliotheken liegen als npm-Pakete vor. Viele Front-End-Tools wie Webpack sind in Node.js geschrieben. Leistung

Java verwendet

HotSpot

, diese supervirtuelle Maschine, die eine Multibyte-Kompilierungsstrategie anwendet. Es erkennt Code, der häufig ausgeführt wird, und je öfter ein Code ausgeführt wird, desto mehr Optimierungen werden angewendet. Daher ist die Leistung von HotSpot relativ schneller. NodeDie zugrunde liegende Wahl besteht darin,

c++

- und v8-Engines zu verwenden, um den ereignisgesteuerten Mechanismus von Node.js zu implementieren, was bedeutet, dass Node .js ist ereignisgesteuert, der Leistungsteil ist kein Grund zur Sorge und ist ausgezeichnet. Und dank Verbesserungen an der V8-Engine bringt jede Veröffentlichung von Node.js enorme Leistungsverbesserungen mit sich. Obwohl Node eine extrem hohe Leistung für Anwendungen mit hoher Parallelität aufweist, weist Node.js auch seine eigenen Mängel auf:

Node

ist nicht für

CPU-intensive Anwendungen geeignet, da
    CPU-intensive Anwendungen lange Zeit haben Berechnungen sind nicht so gut wie große Schleifen, was dazu führt, dass die
  • CPU

    -Zeitscheibe nicht freigegeben werden kann und alle nachfolgenden IO-Vorgänge angehalten werden. Und Node unterstützt nur Single-Core-CPU und kann die

    CPU-Ressourcen nicht vollständig nutzen.
  • Die Zuverlässigkeit ist gering. Sobald ein bestimmter Link des Codes abstürzt, stürzt das gesamte System ab. Der Grund dafür ist, dass Node einen einstufigen

    -Prozess verwendet. Die Open-Source-Komponentenbibliotheken von
  • Node sind von unterschiedlicher Qualität, schnell aktualisierbar und nicht abwärtskompatibel.

Weitere Kenntnisse zum Thema Programmierung finden Sie unter:

Einführung in die Programmierung

! !

    Das obige ist der detaillierte Inhalt vonEin einfacher Vergleich zwischen Node.js und Java-Backend-Servern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen