Die leistungsstarke ereignisgesteuerte Architektur von Node ist einer seiner größten Vorteile.
Die zentralen Thesen
- Ereignisgesteuerte Programmierung ist eine gute Wahl für interaktive Apps, insbesondere GUI-Apps, da sie es dem Code ermöglicht, in beliebiger Reihenfolge auf Benutzeraktionen zu reagieren.
- Ereignisgesteuerte Programmierung wird häufig in Web-Apps verwendet, bei denen Ereignis-Listener ausgelöst werden, wenn Benutzer mit dem DOM interagieren.
- Mit der EventEmitter-Klasse ist die Implementierung ereignisgesteuerter Programmierung in Node.js ganz einfach. Sie ermöglicht es Ihnen, benutzerdefinierte Ereignisse zu erstellen und Ereignis-Listener zur Verarbeitung dieser Ereignisse anzuhängen.
Beim Erstellen einer Softwareanwendung besteht eine entscheidende Entscheidung darin, das geeignete Paradigma für Ihren Code auszuwählen.
Ereignisgesteuerte Programmierung ist eine gute Wahl für interaktive Apps, die auf Benutzeraktionen reagieren, die in beliebiger Reihenfolge auftreten können. Es ist ein beliebteres Paradigma bei GUI-Apps als bei Befehlszeilenprogrammen oder eingebettetem Systemcode.
Was sind Ereignisse?
Sie können sich ein Ereignis als eine Aktion oder ein Ereignis vorstellen, das Ihr Code erkennen und auf das er reagieren kann. Das System oder ein Benutzer können ein Ereignis auslösen und Ihr Code registriert normalerweise eine Funktion, um damit umzugehen.
Ein Beispiel für ein grundlegendes Ereignis ist das Klicken auf eine Schaltfläche, um eine bestimmte Aktion auszuführen. Durch das Klicken auf die Schaltfläche wird ein Ereignis ausgelöst, und die Funktion, die beim Klicken ausgeführt wird, wird aufgerufen Ereignis-Listener (oder Handler).
Was ist ereignisgesteuerte Programmierung?
Ereignisgesteuerte Programmierung ist eine Programmierparadigma Dabei hängt der Ausführungsablauf einer Anwendung von eintretenden Ereignissen ab und ist nicht streng sequentiell.
Dieses Paradigma wird hauptsächlich beim Erstellen von Benutzeroberflächen und Echtzeitanwendungen verwendet, bei denen ein Ereignis, beispielsweise eine Benutzeraktion, eine Aktion im System auslösen soll.
Das Paradigma ist beim Erstellen von Web-Apps sehr beliebt, bei denen Ereignis-Listener ausgelöst werden, wenn Benutzer mit ihnen interagieren das Document Object Model (DOM).
Das folgende Bild veranschaulicht, wie der Ablauf bei der ereignisgesteuerten Programmierung funktioniert. Wenn ein Ereignis auftritt, empfängt es der Ereigniskanal und gibt es an den entsprechenden Listener weiter, der Folgendes verarbeitet:
Ereignisgesteuerte Programmierung in Node.js
Der JavaScript-Ereignisschleife ist eines der grundlegenden Konzepte hinter der asynchronen Natur der Node.js-Laufzeit. Eine ereignisgesteuerte Architektur nutzt ihre integrierten Funktionen EventEmitter Modul zur Erleichterung eines reibungslosen Ausführungsablaufs.
Mit ereignisgesteuerter Programmierung können Sie mit Node.js serverseitige Anwendungen erstellen, die Benutzerinteraktionen, E/A-Vorgänge und Echtzeit-Datenverarbeitung verarbeiten können. Dies geschieht auf nicht blockierende Weise, was zu einer verbesserten Leistung und einem reibungsloseren Erlebnis für den Benutzer führt.
Die Implementierung ereignisgesteuerter Programmierung in Node.js ist einfach, wenn Sie die Grundlagen des Definierens, Auslösens und Behandelns von Ereignissen verstehen.
Die EventEmitter-Klasse
Mit dem EventEmitter Mit der Klasse in Node.js können Sie benutzerdefinierte Ereignisse erstellen und Ereignis-Listener anhängen, um diese zu verarbeiten. Um die Klasse in Ihrem Code zu verwenden, importieren Sie sie aus Veranstaltungen Modul wie folgt:
// CommonJS
const { EventEmitter } = require("events")
// ES6
import { EventEmitter } from"events"
Die Klasse und ihre Mitgliedsfunktionen stehen Ihnen dann zur Verwendung in Ihrer Anwendung zur Verfügung. Um mit der Ausgabe und Verarbeitung von Ereignissen zu beginnen, initialisieren Sie eine neue Instanz von EventEmitter Klasse.
Zum Beispiel:
const FoodEvents = new EventEmitter()
Dadurch wird ein neues Emitterobjekt mit dem Namen erstellt FoodEvents das Ereignisse aussenden und Listener registrieren kann. Die EventEmmitter-Klasse bietet drei Methoden zum Abhören eines Ereignisses: An, addListener, Und einmal.
Der An Die Methode ist die grundlegendste Funktion zum Hinzufügen von Ereignis-Listenern addListener funktioniert genauso. Beide akzeptieren den Ereignisnamen und eine Rückruffunktion als Argumente. Der Callback ist die eigentliche Handlerfunktion. Sie können verwenden An Und addListener austauschbar.
Hier erfahren Sie, wie Sie mit einem Ereignis umgehen An Methode:
FoodEvents.on("cookie_ready", (data) => {
console.log("Cookie ready for packaging, data received: ", data);
})
Benutzen addListener als direkte Alternative für An:
FoodEvents.addListener("cookie_ready", (data) => {
console.log(
"Cookie will now be packaged and sent out, data received: ",
data
);
})
In beiden Beispielen wird der Rückruf zum Array der Ereignis-Listener für hinzugefügt cookie_ready Ereignis. Wenn Sie beide verwenden, werden ihre Rückrufe der Reihe nach ausgelöst.
Der einmal Die Methode registriert einen einmaligen Ereignis-Listener, der beim nächsten Auslösen des Ereignisses ausgeführt wird. Danach entfernt das System es aus dem Listener-Array.
Hier erfahren Sie, wie Sie es verwenden einmal So behandeln Sie ein einmaliges Ereignis:
FoodEvents.once("cookie_sent", (data) => {
console.log("Cookie is sent out, data received: ", data);
})
In diesem Fall wartet der Emitter nur auf die cookie_gesendet Ereignis einmal und entfernen Sie den Handler, nachdem er ausgeführt wurde.
Alle drei Methoden geben den Emitter zurück, sodass Sie Aufrufe an jede dieser Methoden verketten können.
Vergessen Sie nicht, dass die Anwendung dieses Ereignis irgendwann ausgeben muss, damit ein Listener ein Ereignis verarbeiten kann. Hier ist ein Beispielcode zum Ausgeben des cookie_ready Ereignis mit der emittieren Methode:
functionbakeCookie() {
console.log("Cookie is baking, almost ready...")setTimeout(() => {
FoodEvents.emit("cookie_ready", { flavor: "vanilla cookie" })
}, 3000)
}
bakeCookie()
Wenn Sie diesen Code ausführen, wird in der Konsole eine Meldung ausgegeben, dass das Cookie gebacken wird, 3 Sekunden gewartet und dann ausgegeben cookie_ready -Ereignis erhalten Sie eine Ausgabe wie im Bild unten:
Dies zeigt, wie die Ereignis-Listener in der Reihenfolge ausgeführt werden, in der Sie sie registrieren.
Der EventEmitter Die Klasse bietet weitere Methoden, darunter:
- RemoveListener: Entfernt eine Instanz eines Listeners aus dem Array der Ereignis-Listener. Der aus Auch hierfür steht eine Methode zur Verfügung.
- prependListener: Diese Methode registriert auch einen Listener, fügt ihn jedoch nicht am Ende des Listeners-Arrays, sondern am Anfang hinzu. Es wird dann vor allen anderen Listenern ausgeführt, die Sie möglicherweise bereits registriert haben.
- prependOnceListener: Dies funktioniert genauso wie prependListener, aber der Listener wird nur einmal ausgeführt, wie im Fall von einmal.
- RemoveAllListeners: Diese Funktion entfernt alle registrierten Listener für ein bestimmtes benanntes Ereignis oder alle Listener, wenn Sie ihr kein Argument übergeben.
- Zuhörer: Gibt ein Array von Listenern des Ereignisnamens zurück, den Sie ihm als Argument übergeben.
- Ereignisnamen: Mit dieser Funktion können Sie alle Ereignisnamen abrufen, für die Sie bereits einen Listener registriert haben.
- setMaxListeners: Node.js löst standardmäßig eine Warnung aus, wenn Sie mehr als 10 Listener für ein Ereignis registrieren, um Speicherverluste zu verhindern. Sie können diesen Standardwert mit setMaxListeners anpassen. Sie können diesen Wert auch mit überprüfen getMaxListeners.
Der Veranstaltungen Das Paket bietet umfassende Funktionalität für die ereignisgesteuerte Programmierung in Node.js.
Was sind einige Best Practices für die ereignisgesteuerte Programmierung?
Jeder Programmieransatz hat seine Nachteile und das Ignorieren von Best Practices kann negative Auswirkungen auf Ihre Anwendung haben. Im Folgenden finden Sie einige Best Practices, die Sie beim Erstellen ereignisgesteuerter Anwendungen berücksichtigen sollten:
- Verwenden Sie prägnante und beschreibende Namen für Ereignisse, um eine saubere und wartbare Codebasis zu ermöglichen.
- Übernehmen Sie gute Fehlerbehandlungs- und Protokollierungspraktiken, um ein einfaches Debuggen von Fehlern zu ermöglichen.
- Vermeiden Sie die Rückrufhölle (Verschachtelung mehrerer Rückrufe), wenn Sie Ereignis-Listener schreiben. Verwenden Sie stattdessen JavaScript-Versprechen.
- Erstellen Sie nicht zu viele Zuhörer für ein Ereignis. Erwägen Sie, die Ereignisse aufzuteilen und stattdessen zu verketten.
Erstellen Sie Anwendungen mit der richtigen Architektur
Eine allgemeine Regel, die beim Erstellen von Software gilt, besteht darin, geeignete Architektur- und Designentscheidungen zu treffen. Wenn Sie beim Erstellen einer Anwendung den falschen Ansatz verfolgen, müssen Sie irgendwann mit den Konsequenzen rechnen.
Ereignisgesteuerte Programmierung ist ein Paradigma, das erhebliche Auswirkungen auf die Architektur und Leistung einer Anwendung haben kann. Wann immer Ihre Anwendung oder ein Teil davon von Ereignissen abhängt, um zu funktionieren, sollten Sie eine ereignisgesteuerte Programmierung in Betracht ziehen.