Node.js ist eine aufstrebende Backend-Sprache, die Programmierern dabei helfen soll, schnell skalierbare Anwendungen zu erstellen. Node.js verfügt über viele attraktive Funktionen und es gibt unzählige Berichte darüber. In diesem Artikel werden Funktionen wie EventEmitter, Streams, Coding Style, Linting und Coding Style analysiert und erläutert, um Benutzern ein tieferes Verständnis von Node.js zu vermitteln.
Da es sich um eine Plattform handelt, die auf der Chrome-JavaScript-Laufzeit basiert, scheinen unsere JavaScript-Kenntnisse auf Knotenanwendungen anwendbar zu sein, ohne dass zusätzliche Spracherweiterungen oder -modifikationen erforderlich sind. Wir können unsere Front-End-Programmiererfahrung auf die Backend-Programmierung anwenden.
EventEmitter (Ereignissemitter)
Zunächst sollten Sie das EventEmitter-Modell verstehen. Es kann ein Ereignis senden und es Verbrauchern ermöglichen, interessante Ereignisse zu abonnieren. Wir können es uns als eine Erweiterung des Callback-Übermittlungsmusters auf eine asynchrone Funktion vorstellen. EventEmitter ist insbesondere dann vorteilhafter, wenn mehrere Rückrufe erforderlich sind.
Zum Beispiel sendet ein Anrufer eine „Dateien auflisten“-Anfrage an einen Remote-Server. Möglicherweise möchten Sie die zurückgegebenen Ergebnisse gruppieren und für jede Gruppe einen Rückruf durchführen. Mit dem EventEmitter-Modell können Sie an jede Gruppe einen „Datei“-Rückruf senden und die Verarbeitung „beenden“, wenn alle Vorgänge abgeschlossen sind.
Bei Verwendung von EventEmitter müssen Sie nur die relevanten Ereignisse und Parameter festlegen.
Fehler
verror ist eine Erweiterung der Basisklasse Error, die es uns ermöglicht, Ausgabenachrichten im printf-Zeichenformat zu definieren.
Streams
Wenn eine sehr große Datei verarbeitet werden muss, sollte die ideale Methode darin bestehen, einen Teil davon zu lesen und einen Teil davon zu schreiben. Egal wie groß die Datei ist, solange es die Zeit erlaubt, wird die Verarbeitung immer durchgeführt Hier muss das Konzept des Streams verwendet werden. Streams sind ein weiteres weit verbreitetes Modell in Node, der Implementierung von EventEmitter. Bietet lesbare, beschreibbare oder Vollduplex-Schnittstellen. Es handelt sich um eine abstrakte Schnittstelle, die regelmäßige Betriebsereignisse bereitstellt, darunter: lesbar, beschreibbar, Entleeren, Daten, Ende und Schließen. Wenn wir Pipelines verwenden können, um diese Ereignisse effektiv zu integrieren, werden leistungsfähigere interaktive Operationen erreicht.
Durch die Verwendung von .pipe() kann Note mit dem Gegendruck über die Pipeline kommunizieren. Gegendruck bedeutet: nur lesen, was geschrieben werden kann, oder nur schreiben, was lesen kann.
Zum Beispiel senden wir jetzt Daten von stdin an eine lokale Datei und einen Remote-Server:
Code kopieren
});
Und wenn wir Daten an eine lokale Datei senden und den Stream mit gunzip komprimieren möchten, können wir Folgendes tun:
process.stdin.pipe(zlib.createGunzip()).pipe(fs.createWriteStream('localFile.tar'));
Wenn Sie mehr über Stream erfahren möchten, klicken Sie bitte hier.
Kontrollfluss
Da JS über erstklassige Objekte, Abschlüsse und andere Funktionskonzepte verfügt, können Rückrufberechtigungen einfach definiert werden. Dies ist beim Prototyping sehr praktisch und kann bei Bedarf logische Berechtigungen integrieren. Es erleichtert aber auch die Verwendung umständlicher integrierter Funktionen.
Zum Beispiel möchten wir eine Reihe von Dateien der Reihe nach lesen und dann eine bestimmte Aufgabe ausführen:
Das Problem bei diesem Modell ist:
1. Die Logik dieser Codes ist sehr verstreut und ungeordnet, und die damit verbundenen Betriebsprozesse sind schwer zu verstehen.
2. Keine Fehler- oder Ausnahmebehandlung.
3. Schließungsspeicherlecks in JS sind sehr häufig und schwer zu diagnostizieren und zu erkennen.
Wenn wir eine Reihe asynchroner Operationen an einem Eingabesatz ausführen möchten, ist die Verwendung einer Flusskontrollbibliothek eine klügere Wahl. Hier kommt Vasync zum Einsatz.
vasync ist eine Prozesssteuerungsbibliothek, deren Idee aus asynchronen Vorgängen stammt. Die Besonderheit besteht darin, dass Verbraucher die Bearbeitung einer bestimmten Aufgabe einsehen und beobachten können. Diese Informationen sind sehr nützlich, um den Entstehungsprozess eines Fehlers zu untersuchen.
Codierungsstil
Der Programmierstil gilt als das umstrittenste Thema, da er oft beiläufig ist. Karotten und Kohl, jeder hat seine eigenen Vorlieben. Wichtig ist, einen Stil zu finden, der sowohl für den Einzelnen als auch für das Team funktioniert. Einige traditionelle Vererbungen können die Node-Entwicklungsreise verbessern.
1. Benennen Sie die Funktion
2. Versuchen Sie, alle Funktionen zu benennen.
3. Vermeiden Sie Schließungen
4. Definieren Sie keine anderen Funktionen innerhalb einer Funktion. Dies kann viele unerwartete Speicherverlustunfälle beim Schließen reduzieren.
5. Mehr und kleinere Funktionen
Obwohl V8 JIT eine leistungsstarke Engine ist, lassen sich kleinere und optimierte Funktionen besser in V8 integrieren. Wenn unsere Funktionen außerdem klein und exquisit sind (ungefähr 100 Zeilen), werden wir es uns selbst danken, wenn wir sie lesen und pflegen.
Stil programmgesteuert prüfen: Behalten Sie die Stilkonsistenz bei und erzwingen Sie sie mit einem Inspektionstool. Wir verwenden jsstyle.
Linting (Code-Inspektion)
Das Lint-Tool kann eine statische Analyse des Codes durchführen, ohne ihn auszuführen, und auf potenzielle Fehler und Risiken prüfen, wie z. B. fehlende Break-Anweisungen bei Case-Switches. Lint ist nicht einfach gleichbedeutend mit einer Stilprüfung, sondern zielt eher auf eine objektive Risikoanalyse als auf eine subjektive Stilauswahl ab. Wir verwenden Javascriptlint, das umfangreiche Prüfelemente enthält.
Protokollierung
Wenn wir programmieren und programmieren, müssen wir eine langfristige Perspektive haben. Überlegen Sie insbesondere, welche Tools Sie zum Debuggen verwenden sollten. Ein ausgezeichneter erster Schritt ist eine effektive Protokollierung. Wir müssen die Informationen identifizieren, um zu sehen, worauf es beim Debuggen besonders zu achten lohnt und was zur Analyse und Forschung während der Laufzeit verwendet wird. Es wird empfohlen, Bunyan zu verwenden, eine direkte Node.jsProtokollierungsbibliothek. Das Datenausgabeformat ist JSON. Für weitere Informationen klicken Sie bitte hier.
Client-Server
Wenn eine Anwendung über verteilte Verarbeitungsfunktionen verfügt, wird sie auf dem Markt attraktiver. Ähnliche Schnittstellen können mit der HTTP-RESTFul-API oder rohem TCP-JSON beschrieben werden. Dadurch können Entwickler ihre Node-Erfahrung mit asynchronen Netzwerkumgebungen und der Verwendung von Streams mit verteilten und skalierbaren Systemen kombinieren.
Häufig verwendete Werkzeuge:
1. restify
Einfach ausgedrückt ist dies ein Tool zum Erstellen von REST-Diensten. Es bietet gute Anzeige- und Debugging-Verarbeitungsunterstützung und unterstützt Bunyan und DTrace.
2. schnell
fast ist ein leichtes Tool, das TCP zur Verarbeitung von JSON-Nachrichten verwendet. Bietet DTrace-Unterstützung, sodass wir Leistungsmerkmale des Server-Clients schnell identifizieren können.
3. Arbeitsablauf
Workflow basiert auf Restify und kann Geschäftsprozesse für eine Reihe von Remote-Diensten und APIs definieren. Zum Beispiel: Fehlerstatus, Zeitüberschreitung, Wiederverbindung, Überlastungsbehandlung usw.