Zmogljiva, na dogodke vodena arhitektura Node je ena njegovih največjih prednosti.

Ključni zaključki

  • Programiranje, ki temelji na dogodkih, je dobra izbira za interaktivne aplikacije, zlasti aplikacije GUI, saj omogoča, da se koda odziva na dejanja uporabnika v poljubnem vrstnem redu.
  • Programiranje na podlagi dogodkov se običajno uporablja v spletnih aplikacijah, kjer se poslušalci dogodkov sprožijo, ko uporabniki komunicirajo z DOM.
  • Implementacija programiranja na podlagi dogodkov v Node.js je enostavna z razredom EventEmitter, ki vam omogoča ustvarjanje dogodkov po meri in pripenjanje poslušalcev dogodkov za njihovo obravnavo.

Pri gradnji katere koli programske aplikacije je ključna odločitev izbira ustrezne paradigme za vašo kodo.

Programiranje na podlagi dogodkov je dobra izbira za interaktivne aplikacije, ki se odzivajo na dejanja uporabnikov, ki se lahko zgodijo v poljubnem vrstnem redu. To je bolj priljubljena paradigma z aplikacijami GUI kot s programi ukazne vrstice ali kodo vdelanih sistemov.

instagram viewer

Kaj so dogodki?

Dogodek si lahko predstavljate kot dejanje ali dogodek, ki ga vaša koda lahko prepozna in se nanj odzove. Sistem ali uporabnik lahko sproži dogodek in vaša koda bo običajno registrirala funkcijo za njegovo obravnavo.

Primer osnovnega dogodka je klik na gumb za izvedbo določenega dejanja. Dejanje klika na gumb sproži dogodek, funkcija, ki se zažene, ko pride do klika, pa se imenuje poslušalec dogodkov (ali vodja).

Kaj je programiranje na podlagi dogodkov?

Dogodkovno vodeno programiranje je a programska paradigma v katerem je tok izvajanja aplikacije odvisen od dogodkov, ki se zgodijo, namesto da bi bil strogo zaporeden.

Ta paradigma se večinoma uporablja pri gradnji uporabniških vmesnikov in aplikacij v realnem času, kjer mora dogodek, kot je dejanje uporabnika, sprožiti dejanje v sistemu.

Paradigma je zelo priljubljena pri izdelavi spletnih aplikacij, kjer se poslušalci dogodkov sprožijo, ko uporabniki komunicirajo z objektni model dokumenta (DOM).

Naslednja slika prikazuje, kako tok deluje v programiranju, ki ga vodi dogodek. Ko pride do dogodka, ga kanal dogodka prejme in posreduje ustreznemu poslušalcu za obravnavo:

Programiranje na podlagi dogodkov v Node.js

The JavaScript zanka dogodkov je eden temeljnih konceptov za asinhrono naravo izvajalnega okolja Node.js. Arhitektura, ki temelji na dogodkih, uporablja svoje vgrajene EventEmitter modul za olajšanje nemotenega izvajanja.

S programiranjem, ki temelji na dogodkih, vam Node.js omogoča ustvarjanje aplikacij na strani strežnika, ki lahko upravljajo interakcijo z uporabniki, V/I operacije in obdelavo podatkov v realnem času. To se zgodi na način brez blokiranja, kar ima za posledico izboljšano zmogljivost in bolj gladko izkušnjo za uporabnika.

Implementacija programiranja na podlagi dogodkov v Node.js je enostavna, če razumete osnove definiranja, sprožanja in obravnavanja dogodkov.

Razred EventEmitter

z EventEmitter razreda v Node.js, lahko ustvarite dogodke po meri in priložite poslušalce dogodkov za njihovo obravnavo. Če želite razred uporabiti v svoji kodi, ga uvozite iz dogodkov tak modul:

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

// ES6
import { EventEmitter } from"events"

Razred in njegove članske funkcije so nato na voljo za uporabo v vaši aplikaciji. Če želite začeti oddajati in obravnavati dogodke, inicializirajte nov primerek EventEmitter razred.

Na primer:

const FoodEvents = new EventEmitter()

To ustvari nov objekt oddajnika, imenovan FoodEvents ki lahko oddaja dogodke in registrira poslušalce. Razred EventEmmitter ponuja tri metode za poslušanje dogodka: na, addListener, in enkrat.

The na metoda je najbolj osnovna funkcija za dodajanje poslušalcev dogodkov in addListener deluje na povsem enak način. Oba sprejmeta ime dogodka in funkcijo povratnega klica kot argumenta. Povratni klic je dejanska funkcija za obravnavo. Lahko uporabiš na in addListener zamenljivo.

Tukaj je opisano, kako obravnavate dogodek z uporabo na metoda:

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

Uporaba addListener kot neposredna alternativa za na:

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

Oba primera bosta dodala povratni klic v niz poslušalcev dogodkov za cookie_ready dogodek. Če uporabite oba, se bodo njuni povratni klici sprožili po vrstnem redu.

The enkrat metoda registrira enkratni poslušalec dogodkov, ki se zažene ob naslednjem sprožitvi dogodka. Po tem ga bo sistem odstranil iz niza poslušalcev.

Tukaj je opisano, kako uporabljati enkrat za obravnavo enkratnega dogodka:

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

V tem primeru bo oddajnik samo poslušal cookie_sent dogodek enkrat in odstranite upravljalnik, ko se zažene.

Vse tri metode vrnejo oddajnik, tako da lahko verižno kličete katerega koli od njih.

Ne pozabite, da mora aplikacija na neki točki ta dogodek oddati, če želi poslušalec obravnavati dogodek. Tukaj je nekaj vzorčne kode za oddajanje cookie_ready dogodek z uporabo oddajajo metoda:

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

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

bakeCookie()

Ko zaženete to kodo, ki v konzoli natisne obvestilo, da se piškotek peče, počaka 3 sekunde in odda cookie_ready dogodek, boste dobili rezultat, kot je spodnja slika:

To prikazuje, kako se poslušalci dogodkov izvajajo v vrstnem redu, v katerem ste jih registrirali.

The EventEmitter razred ponuja več metod, vključno z:

  • removeListener: Odstrani primerek poslušalca iz niza poslušalcev dogodkov. The izklopljeno metoda je na voljo tudi za ta namen.
  • prependListener: Ta metoda prav tako registrira poslušalca, vendar ga namesto na konec matrike poslušalcev doda na začetek. Nato se bo zagnal pred vsemi drugimi poslušalci, ki ste jih morda že registrirali.
  • prependOnceListener: To deluje tako kot prependListener, vendar se poslušalec zažene samo enkrat, kot v primeru enkrat.
  • odstraniVse poslušalce: Ta funkcija odstrani vse registrirane poslušalce za določen poimenovan dogodek ali vse poslušalce, če ji ne posredujete nobenega argumenta.
  • poslušalci: vrne matriko poslušalcev imena dogodka, ki mu ga posredujete kot argument.
  • imena dogodkov: S to funkcijo lahko dobite vsa imena dogodkov, za katere ste že registrirali poslušalca.
  • setMaxListeners: Node.js privzeto vrže opozorilo, ko registrirate več kot 10 poslušalcev za dogodek, da preprečite uhajanje pomnilnika. To privzeto vrednost lahko prilagodite z uporabo setMaxListeners. To vrednost lahko preverite tudi z getMaxListeners.

The dogodkov paket zagotavlja celovito funkcionalnost za programiranje na podlagi dogodkov v Node.js.

Katere so nekatere najboljše prakse programiranja na podlagi dogodkov?

Vsak programski pristop ima svoje kompromise in neupoštevanje najboljših praks ima lahko negativne učinke na vašo aplikacijo. Sledi nekaj najboljših praks, ki jih je treba upoštevati pri izdelavi aplikacij, ki temeljijo na dogodkih:

  • Za dogodke uporabite jedrnata in opisna imena, da omogočite čisto kodno zbirko, ki jo je mogoče vzdrževati.
  • Sprejmite dobro prakso obravnavanja napak in beleženja, da omogočite enostavno odpravljanje napak.
  • Pri pisanju poslušalcev dogodkov se izogibajte peklu povratnih klicev (gnezdenju več povratnih klicev). Namesto tega uporabite obljube JavaScript.
  • Ne ustvarite preveč poslušalcev za en dogodek. Namesto tega razmislite o razdelitvi dogodkov in njihovem veriženju.

Izdelajte aplikacije s pravo arhitekturo

Splošno pravilo, ki velja za gradnjo programske opreme, je sprejemanje ustreznih arhitekturnih in oblikovalskih odločitev. Ko boste uporabili napačen pristop k izdelavi aplikacije, se boste sčasoma soočili s posledicami.

Programiranje na podlagi dogodkov je paradigma, ki lahko pomembno vpliva na arhitekturo in zmogljivost aplikacije. Kadarkoli je delovanje vaše aplikacije ali njenega dela odvisno od dogodkov, razmislite o programiranju na podlagi dogodkov.