Arhitectura puternică bazată pe evenimente a Node este unul dintre cele mai puternice avantaje ale sale.

Recomandări cheie

  • Programarea bazată pe evenimente este o alegere bună pentru aplicațiile interactive, în special pentru aplicațiile GUI, deoarece permite codului să răspundă la acțiunile utilizatorului în orice ordine.
  • Programarea bazată pe evenimente este folosită în mod obișnuit în aplicațiile web, unde ascultătorii de evenimente se declanșează atunci când utilizatorii interacționează cu DOM.
  • Implementarea programării bazate pe evenimente în Node.js este ușoară cu clasa EventEmitter, care vă permite să creați evenimente personalizate și să atașați ascultători de evenimente pentru a le gestiona.

Când construiți orice aplicație software, o decizie crucială implică selectarea paradigmei potrivite pentru codul dvs.

Programarea bazată pe evenimente este o alegere bună pentru aplicațiile interactive care răspund la acțiunile utilizatorului care pot apărea în orice ordine. Este o paradigmă mai populară cu aplicațiile GUI decât cu programele de linie de comandă sau codul de sisteme încorporat.

instagram viewer

Ce sunt evenimentele?

Vă puteți gândi la un eveniment ca la o acțiune sau o apariție pe care codul dvs. o poate recunoaște și la care poate răspunde. Sistemul sau un utilizator poate declanșa un eveniment și codul dvs. va înregistra, de obicei, o funcție pentru a-l gestiona.

Un exemplu de eveniment de bază este să faceți clic pe un buton pentru a efectua o anumită acțiune. Acțiunea de a face clic pe butonul declanșează un eveniment, iar funcția care rulează atunci când are loc clicul se numește ascultător de evenimente (sau handler).

Ce este programarea bazată pe evenimente?

Programarea bazată pe evenimente este a paradigma de programare în care fluxul de execuție al unei aplicații depinde de evenimentele care apar mai degrabă decât să fie strict secvenţial.

Această paradigmă este folosită mai ales la construirea de interfețe cu utilizatorul și aplicații în timp real, unde un eveniment, cum ar fi acțiunea unui utilizator, ar trebui să declanșeze o acțiune în sistem.

Paradigma este foarte populară atunci când construiesc aplicații web, unde ascultătorii de evenimente se declanșează atunci când utilizatorii interacționează cu modelul obiectului document (DOM).

Următoarea imagine vizualizează modul în care funcționează fluxul în programarea bazată pe evenimente. Când are loc un eveniment, canalul de eveniment îl primește și îl transmite ascultătorului corespunzător pentru a se gestiona:

Programare bazată pe evenimente în Node.js

The Bucla de evenimente JavaScript este unul dintre conceptele fundamentale din spatele naturii asincrone a rulării Node.js. O arhitectură bazată pe evenimente își folosește încorporarea EventEmitter modul pentru a facilita fluxul de execuție fără întreruperi.

Cu programarea bazată pe evenimente, Node.js vă permite să creați aplicații pe partea de server care pot gestiona interacțiunea utilizatorului, operațiunile I/O și procesarea datelor în timp real. Acest lucru are loc într-un mod neblocant, rezultând performanțe îmbunătățite și o experiență mai fluidă pentru utilizator.

Implementarea programării bazate pe evenimente în Node.js este ușoară atunci când înțelegeți elementele de bază ale definirii, declanșării și gestionării evenimentelor.

Clasa EventEmitter

Cu EventEmitter clasa în Node.js, puteți crea evenimente personalizate și puteți atașa ascultători de evenimente pentru a le gestiona. Pentru a utiliza clasa în codul dvs., importați-o din evenimente modul astfel:

// CommonJS
const { EventEmitter } = require("events")

// ES6
import { EventEmitter } from"events"

Clasa și funcțiile sale membre sunt apoi disponibile pentru a le utiliza în aplicația dvs. Pentru a începe să emiteți și să gestionați evenimente, inițializați o nouă instanță a fișierului EventEmitter clasă.

De exemplu:

const FoodEvents = new EventEmitter()

Aceasta creează un nou obiect emițător numit Evenimente alimentare care poate emite evenimente și poate înregistra ascultători. Clasa EventEmmitter oferă trei metode pentru a asculta un eveniment: pe, addListener, și o singura data.

The pe metoda este cea mai de bază funcție pentru adăugarea de ascultători de evenimente și addListener functioneaza exact in acelasi mod. Ambii acceptă numele evenimentului și o funcție de apel invers ca argumente. Callback-ul este funcția de gestionare reală. Poți să folosești pe și addListener interschimbabil.

Iată cum gestionați un eveniment folosind pe metodă:

FoodEvents.on("cookie_ready", (data) => {
console.log("Cookie ready for packaging, data received: ", data);
})

Folosind addListener ca alternativă directă pentru pe:

FoodEvents.addListener("cookie_ready", (data) => {
console.log(
"Cookie will now be packaged and sent out, data received: ",
data
);
})

Ambele exemple vor adăuga apelul înapoi la matricea de ascultători de evenimente pentru cookie_gata eveniment. Dacă le folosiți pe ambele, apelurile lor se vor declanșa în ordine.

The o singura data metoda înregistrează un ascultător de eveniment unic care rulează data viitoare când evenimentul se declanșează. După aceea, sistemul îl va elimina din matricea de ascultători.

Iată cum se utilizează o singura data pentru a gestiona un eveniment unic:

FoodEvents.once("cookie_sent", (data) => {
console.log("Cookie is sent out, data received: ", data);
})

În acest caz, emițătorul va asculta doar pentru cookie_sent eveniment o dată și eliminați handlerul după ce a rulat.

Toate cele trei metode returnează emițătorul, astfel încât să puteți înlănțui apelurile către oricare dintre ele.

Nu uitați că, pentru ca un ascultător să gestioneze un eveniment, aplicația trebuie să emită acel eveniment la un moment dat. Iată un exemplu de cod pentru a emite cookie_gata eveniment folosind emite metodă:

functionbakeCookie() {
console.log("Cookie is baking, almost ready...")

setTimeout(() => {
FoodEvents.emit("cookie_ready", { flavor: "vanilla cookie" })
}, 3000)
}

bakeCookie()

Când rulați acest cod, care imprimă o notificare în consolă că cookie-ul se coace, așteaptă timp de 3 secunde și emite cookie_gata eveniment, veți obține o ieșire ca imaginea de mai jos:

Acest lucru demonstrează modul în care ascultătorii evenimentului rulează în ordinea în care îi înregistrați.

The EventEmitter clasa oferă mai multe metode, inclusiv:

  • removeListener: elimină o instanță a unui ascultător din matricea de ascultători de evenimente. The oprit metoda este de asemenea disponibilă în acest scop.
  • prependListener: Această metodă înregistrează și un ascultător, dar, în loc să îl adauge la sfârșitul matricei listeners, îl adaugă la început. Apoi va rula înaintea oricăror alți ascultători pe care este posibil să i-ați înregistrat deja.
  • prependOnceListener: Funcționează la fel ca prependListener, dar ascultătorul rulează o singură dată, ca în cazul lui o singura data.
  • removeAllListeners: Această funcție elimină toți ascultătorii înregistrați pentru un anumit eveniment numit sau toți ascultătorii dacă nu îi transmiteți niciun argument.
  • ascultători: Returnează o serie de ascultători ai numelui evenimentului pe care îl transmiteți ca argument.
  • eventNames: Puteți utiliza această funcție pentru a obține toate numele evenimentelor pentru care ați înregistrat deja un ascultător.
  • setMaxListeners: Node.js lansează un avertisment în mod implicit atunci când înregistrați mai mult de 10 ascultători pentru un eveniment, pentru a preveni scurgerile de memorie. Puteți ajusta această valoare implicită folosind setMaxListeners. De asemenea, puteți verifica această valoare folosind getMaxListeners.

The evenimente pachetul oferă funcționalități cuprinzătoare pentru programarea bazată pe evenimente în Node.js.

Care sunt cele mai bune practici de programare bazată pe evenimente?

Fiecare abordare de programare are compromisurile sale, iar ignorarea celor mai bune practici poate avea efecte negative asupra aplicației dumneavoastră. Următoarele sunt câteva dintre cele mai bune practici de luat în considerare atunci când construiți aplicații bazate pe evenimente:

  • Utilizați nume concise și descriptive pentru evenimente pentru a activa o bază de cod curată și care poate fi întreținută.
  • Adoptă bune practici de gestionare a erorilor și de înregistrare în jurnal, pentru a permite depanarea ușoară a erorilor.
  • Evitați iadul de apel invers (imbricarea mai multor apeluri inversate) atunci când scrieți ascultători de evenimente. Folosiți promisiunile JavaScript în schimb.
  • Nu creați prea mulți ascultători pentru un eveniment. Luați în considerare împărțirea evenimentelor și înlănțuirea lor.

Creați aplicații cu arhitectura potrivită

O regulă generală care se aplică pentru crearea de software este să luați decizii adecvate privind arhitectura și proiectarea. Când urmați o abordare greșită pentru construirea unei aplicații, vă veți confrunta în cele din urmă cu consecințele.

Programarea bazată pe evenimente este o paradigmă care poate avea un impact semnificativ asupra arhitecturii și performanței unei aplicații. Ori de câte ori aplicația dvs., sau o parte a acesteia, depinde de evenimente pentru a funcționa, ar trebui să luați în considerare programarea bazată pe evenimente.