Node'i võimas sündmustepõhine arhitektuur on üks selle tugevamaid eeliseid.

Võtmed kaasavõtmiseks

  • Sündmuspõhine programmeerimine on hea valik interaktiivsete rakenduste, eriti GUI-rakenduste jaoks, kuna see võimaldab koodil reageerida kasutaja toimingutele mis tahes järjekorras.
  • Sündmuspõhist programmeerimist kasutatakse tavaliselt veebirakendustes, kus sündmuste kuulajad käivituvad, kui kasutajad suhtlevad DOM-iga.
  • Sündmuspõhise programmeerimise rakendamine Node.js-is on lihtne EventEmitteri klassiga, mis võimaldab teil luua kohandatud sündmusi ja lisada sündmuste kuulajaid nende käsitlemiseks.

Mis tahes tarkvararakenduse loomisel on üks oluline otsus koodi jaoks sobiva paradigma valimine.

Sündmuspõhine programmeerimine on hea valik interaktiivsete rakenduste jaoks, mis reageerivad kasutaja toimingutele, mis võivad toimuda mis tahes järjekorras. See on GUI-rakenduste puhul populaarsem paradigma kui käsureaprogrammide või manustatud süsteemi koodide puhul.

Mis on sündmused?

Võite mõelda sündmusele kui tegevusele või sündmusele, mille teie kood suudab ära tunda ja millele reageerida. Sündmuse saab käivitada süsteem või kasutaja ja teie kood registreerib tavaliselt selle käsitlemiseks funktsiooni.

instagram viewer

Põhisündmuse näide on konkreetse toimingu sooritamiseks nupul klõpsamine. Nupul klõpsamine käivitab sündmuse ja klõpsu korral käivitatavat funktsiooni nimetatakse sündmuste kuulaja (või käitleja).

Mis on sündmustepõhine programmeerimine?

Sündmuspõhine programmeerimine on a programmeerimise paradigma kus rakenduse täitmisvoog sõltub pigem aset leidvatest sündmustest kui rangelt järjestikustest.

Seda paradigmat kasutatakse enamasti kasutajaliideste ja reaalajas rakenduste loomisel, kus sündmus, näiteks kasutaja tegevus, peaks käivitama süsteemis toimingu.

Paradigma on väga populaarne veebirakenduste loomisel, kus sündmuste kuulajad käivituvad, kui kasutajad nendega suhtlevad dokumendiobjekti mudel (DOM).

Järgmine pilt visualiseerib, kuidas voog sündmustepõhises programmeerimises töötab. Kui sündmus toimub, võtab sündmusekanal selle vastu ja edastab selle käsitlemiseks sobivale kuulajale:

Sündmuspõhine programmeerimine Node.js-s

The JavaScripti sündmuste silmus on üks põhimõisteid Node.js käitusaja asünkroonsuse taga. Sündmustepõhine arhitektuur kasutab oma sisseehitatud Sündmuste tekitaja moodul sujuva täitmise hõlbustamiseks.

Sündmuspõhise programmeerimisega võimaldab Node.js luua serveripoolseid rakendusi, mis saavad hakkama kasutaja interaktsiooni, I/O toimingute ja reaalajas andmetöötlusega. See toimub mitteblokeerival viisil, mille tulemuseks on parem jõudlus ja kasutaja jaoks sujuvam kasutuskogemus.

Sündmuspõhise programmeerimise rakendamine Node.js-is on lihtne, kui mõistate sündmuste määratlemise, käivitamise ja käsitlemise põhitõdesid.

EventEmitteri klass

Koos Sündmuste tekitaja klassi Node.js-s, saate luua kohandatud sündmusi ja lisada sündmuste kuulajaid, et neid käsitleda. Klassi kasutamiseks oma koodis importige see failist sündmused selline moodul:

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

// ES6
import { EventEmitter } from"events"

Seejärel on klass ja selle liikmefunktsioonid teie rakenduses kasutamiseks saadaval. Sündmuste väljastamise ja käsitlemise alustamiseks lähtestage uus eksemplar Sündmuste tekitaja klass.

Näiteks:

const FoodEvents = new EventEmitter()

See loob uue emitteri objekti nimega Toiduüritused mis võivad sündmusi väljastada ja kuulajaid registreerida. Klass EventEmmitter pakub sündmuse kuulamiseks kolme meetodit: peal, lisakuulaja, ja üks kord.

The peal meetod on kõige elementaarsem funktsioon sündmuste kuulajate lisamiseks ja lisakuulaja töötab täpselt samamoodi. Mõlemad aktsepteerivad argumentidena sündmuse nime ja tagasihelistamisfunktsiooni. Tagasihelistamine on tegelik töötleja funktsioon. Sa võid kasutada peal ja lisakuulaja vaheldumisi.

Siin on, kuidas käsitlete sündmust kasutades peal meetod:

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

Kasutades lisakuulaja otsese alternatiivina peal:

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

Mõlemad näited lisavad tagasihelistamise sündmuse kuulajate massiivi cookie_ready sündmus. Kui kasutate mõlemat, käivituvad nende tagasihelimised järjekorras.

The üks kord meetod registreerib ühekordse sündmusekuulaja, mis käivitub järgmisel sündmuse käivitumisel. Pärast seda eemaldab süsteem selle kuulajate hulgast.

Siin on, kuidas kasutada üks kord ühekordse sündmuse käsitlemiseks:

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

Sel juhul kuulab emitter ainult küpsis_saadetud üks kord ja eemaldage käitleja pärast selle käivitamist.

Kõik kolm meetodit tagastavad emitteri, nii et saate aheldada kõnesid ühega neist.

Ärge unustage, et selleks, et kuulaja saaks sündmusega hakkama, peab rakendus selle sündmuse mingil hetkel väljastama. Siin on mõned näidiskoodid selle väljastamiseks cookie_ready sündmus kasutades kiirgama meetod:

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

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

bakeCookie()

Kui käivitate selle koodi, mis prindib konsoolile teate küpsise küpsemise kohta, ootab 3 sekundit ja edastab cookie_ready sündmuse korral saate väljundi, nagu alloleval pildil:

See näitab, kuidas sündmuste kuulajad töötavad teie registreerimisjärjekorras.

The Sündmuste tekitaja klass pakub rohkem meetodeid, sealhulgas:

  • eemaldaKuulaja: eemaldab kuulaja eksemplari sündmuste kuulajate massiivist. The väljas selleks on saadaval ka meetod.
  • prependListener: See meetod registreerib ka kuulaja, kuid selle asemel, et lisada see kuulajate massiivi lõppu, lisab see selle algusesse. Seejärel käivitatakse see enne teisi kuulajaid, mille olete juba registreerinud.
  • prependOnceListener: See töötab täpselt nagu prependListener, kuid kuulaja töötab ainult üks kord, nagu näiteks rakenduse puhul üks kord.
  • eemalda kõik kuulajad: see funktsioon eemaldab kõik konkreetse nimega sündmuse registreeritud kuulajad või kõik kuulajad, kui te sellele argumenti ei anna.
  • kuulajaid: tagastab selle sündmuse nime kuulajate massiivi, mille argumendina edastate.
  • sündmuste nimed: Selle funktsiooni abil saate hankida kõik sündmuste nimed, millele olete juba kuulaja registreerinud.
  • setMaxListeners: Node.js annab vaikimisi hoiatuse, kui registreerite sündmusele rohkem kui 10 kuulajat, et vältida mälulekkeid. Seda vaikeväärtust saate reguleerida setMaxListenersi abil. Seda väärtust saate kontrollida ka kasutades getMaxListeners.

The sündmused pakett pakub Node.js-s kõikehõlmavat funktsiooni sündmustepõhiseks programmeerimiseks.

Millised on sündmusepõhise programmeerimise parimad tavad?

Igal programmeerimismeetodil on omad kompromissid ja parimate tavade eiramine võib teie rakendusele negatiivselt mõjuda. Sündmuspõhiste rakenduste loomisel tuleb arvestada järgmiste parimate tavadega.

  • Kasutage sündmuste jaoks lühikesi ja kirjeldavaid nimetusi, et võimaldada puhas ja hooldatav koodibaas.
  • Kasutage häid vigade käsitlemise ja logimise tavasid, et võimaldada vigade hõlpsat silumist.
  • Vältige sündmuste kuulajate kirjutamisel tagasihelistamispõrgut (mitme tagasihelistamise pesastamist). Kasutage selle asemel JavaScripti lubadusi.
  • Ärge looge ühe sündmuse jaoks liiga palju kuulajaid. Kaaluge sündmuste poolitamist ja nende aheldamist.

Looge rakendusi õige arhitektuuriga

Üldine reegel, mis tarkvara ehitamisel kehtib, on sobivate arhitektuuri- ja disainiotsuste tegemine. Kui järgite rakenduse loomisel vale lähenemisviisi, seisate lõpuks silmitsi tagajärgedega.

Sündmuspõhine programmeerimine on paradigma, mis võib oluliselt mõjutada rakenduse arhitektuuri ja jõudlust. Kui teie rakenduse või selle osa toimimine sõltub sündmustest, peaksite kaaluma sündmustepõhist programmeerimist.