Potężna architektura oparta na zdarzeniach Node jest jedną z jego największych zalet.
Kluczowe dania na wynos
- Programowanie sterowane zdarzeniami jest dobrym wyborem w przypadku aplikacji interaktywnych, zwłaszcza aplikacji z graficznym interfejsem użytkownika, ponieważ pozwala kodowi reagować na działania użytkownika w dowolnej kolejności.
- Programowanie sterowane zdarzeniami jest powszechnie stosowane w aplikacjach internetowych, w których detektory zdarzeń uruchamiają się, gdy użytkownik wchodzi w interakcję z DOM.
- Implementowanie programowania sterowanego zdarzeniami w Node.js jest łatwe dzięki klasie EventEmitter, która umożliwia tworzenie niestandardowych zdarzeń i dołączanie detektorów zdarzeń do ich obsługi.
Podczas tworzenia dowolnej aplikacji jedną z kluczowych decyzji jest wybór odpowiedniego paradygmatu dla kodu.
Programowanie sterowane zdarzeniami to dobry wybór w przypadku aplikacji interaktywnych, które reagują na działania użytkownika, które mogą wystąpić w dowolnej kolejności. Jest to bardziej popularny paradygmat w przypadku aplikacji GUI niż w przypadku programów wiersza poleceń lub kodu systemów wbudowanych.
Czym są wydarzenia?
Możesz myśleć o zdarzeniu jako o akcji lub zdarzeniu, które Twój kod może rozpoznać i na które może zareagować. System lub użytkownik może wywołać zdarzenie, a Twój kod zwykle zarejestruje funkcję do jego obsługi.
Przykładem podstawowego zdarzenia jest kliknięcie przycisku w celu wykonania określonej akcji. Kliknięcie przycisku wywołuje zdarzenie, a funkcja uruchamiana po kliknięciu nazywa się słuchacz zdarzeń (lub opiekun).
Co to jest programowanie sterowane zdarzeniami?
Programowanie sterowane zdarzeniami to: paradygmat programowania w którym przebieg wykonywania aplikacji zależy od występujących zdarzeń, a nie od ich ścisłej sekwencji.
Paradygmat ten jest najczęściej stosowany przy budowaniu interfejsów użytkownika i aplikacji czasu rzeczywistego, gdzie zdarzenie takie jak akcja użytkownika powinno wywołać akcję w systemie.
Paradygmat ten jest bardzo popularny podczas tworzenia aplikacji internetowych, w których detektory zdarzeń uruchamiają się, gdy użytkownicy wchodzą w interakcję obiektowy model dokumentu (DOM).
Poniższy obraz ilustruje działanie przepływu w programowaniu sterowanym zdarzeniami. Gdy wystąpi zdarzenie, kanał zdarzeń odbiera je i przekazuje odpowiedniemu słuchaczowi w celu obsługi:
Programowanie sterowane zdarzeniami w Node.js
The Pętla zdarzeń JavaScript to jedna z podstawowych koncepcji leżących u podstaw asynchronicznego charakteru środowiska wykonawczego Node.js. Architektura sterowana zdarzeniami wykorzystuje wbudowane rozwiązania Emiter zdarzeń moduł ułatwiający płynny przepływ realizacji.
Dzięki programowaniu sterowanemu zdarzeniami Node.js umożliwia tworzenie aplikacji po stronie serwera, które mogą obsługiwać interakcję z użytkownikiem, operacje we/wy i przetwarzanie danych w czasie rzeczywistym. Dzieje się to w sposób nieblokujący, co skutkuje zwiększoną wydajnością i płynniejszą obsługą użytkownika.
Implementowanie programowania sterowanego zdarzeniami w Node.js jest łatwe, jeśli rozumiesz podstawy definiowania, wyzwalania i obsługi zdarzeń.
Klasa EventEmitter
Z Emiter zdarzeń class w Node.js, możesz tworzyć niestandardowe zdarzenia i dołączać detektory zdarzeń, aby je obsługiwać. Aby użyć klasy w kodzie, zaimportuj ją z pliku wydarzenia moduł taki:
// CommonJS
const { EventEmitter } = require("events")
// ES6
import { EventEmitter } from"events"
Klasa i jej funkcje członkowskie będą wówczas dostępne do użycia w aplikacji. Aby rozpocząć emitowanie i obsługę zdarzeń, zainicjuj nową instancję Emiter zdarzeń klasa.
Na przykład:
const FoodEvents = new EventEmitter()
Spowoduje to utworzenie nowego obiektu emitera o nazwie Wydarzenia kulinarne które mogą emitować zdarzenia i rejestrować słuchacze. Klasa EventEmmitter udostępnia trzy metody nasłuchiwania zdarzeń: NA, dodaj słuchacza, I raz.
The NA metoda jest najbardziej podstawową funkcją dodawania detektorów zdarzeń, oraz dodaj słuchacza działa dokładnie w ten sam sposób. Obydwa akceptują jako argumenty nazwę zdarzenia i funkcję wywołania zwrotnego. Wywołanie zwrotne jest rzeczywistą funkcją obsługi. Możesz użyć NA I dodaj słuchacza zamiennie.
Oto jak obsłużyć wydarzenie za pomocą NA metoda:
FoodEvents.on("cookie_ready", (data) => {
console.log("Cookie ready for packaging, data received: ", data);
})
Za pomocą dodaj słuchacza jako bezpośrednią alternatywę dla NA:
FoodEvents.addListener("cookie_ready", (data) => {
console.log(
"Cookie will now be packaged and sent out, data received: ",
data
);
})
Oba te przykłady dodadzą wywołanie zwrotne do tablicy detektorów zdarzeń dla plik cookie_gotowy wydarzenie. Jeśli użyjesz obu, ich wywołania zwrotne będą uruchamiane w kolejności.
The raz Metoda rejestruje jednorazowy detektor zdarzeń, który jest uruchamiany przy następnym uruchomieniu zdarzenia. Następnie system usunie go z tablicy słuchaczy.
Oto jak używać raz obsłużyć jednorazowe wydarzenie:
FoodEvents.once("cookie_sent", (data) => {
console.log("Cookie is sent out, data received: ", data);
})
W tym przypadku emiter będzie nasłuchiwał tylko plik cookie_wysłany zdarzenie raz i usuń procedurę obsługi po jego uruchomieniu.
Wszystkie trzy metody zwracają emiter, dzięki czemu można łączyć wywołania z dowolnym z nich.
Nie zapominaj, że aby detektor mógł obsłużyć zdarzenie, aplikacja musi w pewnym momencie wyemitować to zdarzenie. Oto przykładowy kod do emisji plik cookie_gotowy wydarzenie za pomocą emitować metoda:
functionbakeCookie() {
console.log("Cookie is baking, almost ready...")setTimeout(() => {
FoodEvents.emit("cookie_ready", { flavor: "vanilla cookie" })
}, 3000)
}
bakeCookie()
Po uruchomieniu tego kodu, który wypisuje w konsoli powiadomienie o pieczeniu pliku cookie, czeka 3 sekundy i emituje komunikat plik cookie_gotowy zdarzenie, otrzymasz wynik jak na obrazku poniżej:
Pokazuje to, w jaki sposób detektory zdarzeń działają w kolejności, w jakiej je rejestrujesz.
The Emiter zdarzeń klasa udostępnia więcej metod, w tym:
- usuń słuchacza: Usuwa instancję detektora z tablicy detektorów zdarzeń. The wyłączony W tym celu dostępna jest również metoda.
- prependListener: Ta metoda również rejestruje detektor, ale zamiast dodawać go na końcu tablicy słuchaczy, dodaje go na początku. Następnie zostanie uruchomiony przed innymi słuchaczami, których mogłeś już zarejestrować.
- prependOnceListener: Działa to podobnie jak prependListener, ale słuchacz uruchamia się tylko raz, jak w przypadku raz.
- usuń wszystkich słuchaczy: Ta funkcja usuwa wszystkich zarejestrowanych detektorów dla określonego nazwanego zdarzenia lub wszystkich detektorów, jeśli nie przekażesz do nich żadnego argumentu.
- słuchacze: Zwraca tablicę detektorów nazwy zdarzenia, którą przekazujesz mu jako argument.
- nazwy wydarzeń: Możesz użyć tej funkcji, aby uzyskać nazwy wszystkich wydarzeń, dla których zarejestrowałeś już słuchacza.
- setMaxListeners: Node.js domyślnie generuje ostrzeżenie, gdy zarejestrujesz więcej niż 10 słuchaczy dla zdarzenia, aby zapobiec wyciekom pamięci. Możesz dostosować tę wartość domyślną za pomocą setMaxListeners. Możesz także sprawdzić tę wartość za pomocą zdobądźMaxListeners.
The wydarzenia pakiet zapewnia wszechstronną funkcjonalność programowania sterowanego zdarzeniami w Node.js.
Jakie są najlepsze praktyki programowania sterowanego zdarzeniami?
Każde podejście do programowania ma swoje kompromisy, a ignorowanie najlepszych praktyk może mieć niekorzystny wpływ na aplikację. Poniżej przedstawiono kilka najlepszych praktyk, które należy wziąć pod uwagę podczas tworzenia aplikacji sterowanych zdarzeniami:
- Używaj zwięzłych i opisowych nazw zdarzeń, aby zapewnić przejrzystą i łatwą w utrzymaniu bazę kodu.
- Zastosuj dobre praktyki obsługi błędów i rejestrowania, aby umożliwić łatwe debugowanie błędów.
- Unikaj piekła wywołań zwrotnych (zagnieżdżania wielu wywołań zwrotnych) podczas pisania detektorów zdarzeń. Zamiast tego użyj obietnic JavaScript.
- Nie twórz zbyt wielu słuchaczy dla jednego wydarzenia. Zamiast tego rozważ podzielenie wydarzeń i połączenie ich w łańcuch.
Twórz aplikacje z odpowiednią architekturą
Ogólną zasadą obowiązującą przy tworzeniu oprogramowania jest podejmowanie odpowiednich decyzji dotyczących architektury i projektu. Jeśli zastosujesz niewłaściwe podejście do tworzenia aplikacji, w końcu poniesiesz konsekwencje.
Programowanie sterowane zdarzeniami to paradygmat, który może mieć znaczący wpływ na architekturę i wydajność aplikacji. Zawsze, gdy działanie Twojej aplikacji lub jej części zależy od zdarzeń, powinieneś rozważyć programowanie sterowane zdarzeniami.