Node jaudīgā uz notikumu balstītā arhitektūra ir viena no tās spēcīgākajām priekšrocībām.

Key Takeaways

  • Uz notikumiem balstīta programmēšana ir laba izvēle interaktīvām lietotnēm, jo ​​īpaši GUI lietotnēm, jo ​​tā ļauj kodam reaģēt uz lietotāja darbībām jebkurā secībā.
  • Uz notikumiem balstīta programmēšana parasti tiek izmantota tīmekļa lietotnēs, kur notikumu uztvērēji tiek aktivizēti, kad lietotāji mijiedarbojas ar DOM.
  • Uz notikumu balstītas programmēšanas ieviešana pakalpojumā Node.js ir vienkārša, izmantojot EventEmitter klasi, kas ļauj izveidot pielāgotus notikumus un pievienot notikumu uztvērējus, lai tos apstrādātu.

Veidojot jebkuru lietojumprogrammu, viens no izšķirošajiem lēmumiem ir jūsu koda atbilstošās paradigmas izvēle.

Uz notikumiem balstīta programmēšana ir laba izvēle interaktīvām lietotnēm, kas reaģē uz lietotāja darbībām, kas var notikt jebkurā secībā. Tā ir populārāka paradigma ar GUI lietotnēm nekā ar komandrindas programmām vai iegulto sistēmu kodu.

Kas ir notikumi?

Varat uzskatīt notikumu kā darbību vai notikumu, ko jūsu kods var atpazīt un uz ko reaģēt. Sistēma vai lietotājs var izraisīt notikumu, un jūsu kods parasti reģistrēs funkciju, lai to apstrādātu.

Pamata notikuma piemērs ir noklikšķināšana uz pogas, lai veiktu noteiktu darbību. Noklikšķinot uz pogas, tiek aktivizēts notikums, un funkcija, kas tiek palaista, kad notiek klikšķis, tiek saukta par notikumu klausītājs (vai apstrādātājs).

Kas ir uz notikumu virzīta programmēšana?

Uz notikumu orientēta programmēšana ir a programmēšanas paradigma kurā lietojumprogrammas izpildes plūsma ir atkarīga no notikumiem, kas notiek, nevis stingri secīgi.

Šo paradigmu galvenokārt izmanto, veidojot lietotāja saskarnes un reāllaika lietojumprogrammas, kur notikumam, piemēram, lietotāja darbībai, ir jāizraisa darbība sistēmā.

Paradigma ir ļoti populāra, veidojot tīmekļa lietotnes, kurās notikumu uztvērēji aktivizē, kad lietotāji mijiedarbojas ar dokumenta objekta modelis (DOM).

Nākamajā attēlā ir vizualizēts, kā plūsma darbojas notikumu virzītā programmēšanā. Kad notiek notikums, notikuma kanāls to saņem un nodod tālāk atbilstošajam klausītājam, lai tas apstrādātu:

Uz notikumiem balstīta programmēšana pakalpojumā Node.js

The JavaScript notikumu cilpa ir viens no pamatjēdzieniem, kas slēpjas aiz Node.js izpildlaika asinhronā rakstura. Notikumu vadīta arhitektūra izmanto savu iebūvēto EventEmitter modulis, lai atvieglotu netraucētu izpildes plūsmu.

Izmantojot uz notikumu balstītu programmēšanu, Node.js ļauj izveidot servera puses lietojumprogrammas, kas var apstrādāt lietotāja mijiedarbību, I/O darbības un reāllaika datu apstrādi. Tas notiek bez bloķēšanas, kā rezultātā tiek uzlabota veiktspēja un vienmērīgāka lietotāja pieredze.

Uz notikumiem balstītas programmēšanas ieviešana pakalpojumā Node.js ir vienkārša, ja saprotat notikumu definēšanas, aktivizēšanas un apstrādes pamatus.

EventEmitter klase

Ar EventEmitter klasē Node.js, varat izveidot pielāgotus notikumus un pievienot notikumu uztvērējus, lai tos apstrādātu. Lai izmantotu klasi savā kodā, importējiet to no notikumiem šāds modulis:

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

// ES6
import { EventEmitter } from"events"

Pēc tam klase un tās dalībnieku funkcijas ir pieejamas lietošanai savā lietojumprogrammā. Lai sāktu emitēt un apstrādāt notikumus, inicializējiet jaunu gadījumu EventEmitter klasē.

Piemēram:

const FoodEvents = new EventEmitter()

Tādējādi tiek izveidots jauns emitētāja objekts, ko sauc Pārtikas pasākumi kas var raidīt notikumus un reģistrēt klausītājus. EventEmmitter klase nodrošina trīs metodes, kā noklausīties notikumu: ieslēgts, pievienot klausītāju, un vienreiz.

The ieslēgts metode ir visvienkāršākā funkcija notikumu klausītāju pievienošanai, un pievienot Klausītāju darbojas tieši tādā pašā veidā. Viņi abi pieņem notikuma nosaukumu un atzvanīšanas funkciju kā argumentus. Atzvanīšana ir faktiskā apstrādātāja funkcija. Tu vari izmantot ieslēgts un pievienot Klausītāju savstarpēji aizstājami.

Lūk, kā rīkoties ar notikumu, izmantojot ieslēgts metode:

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

Izmantojot pievienot Klausītāju kā tieša alternatīva ieslēgts:

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

Abi šie piemēri pievienos atzvanīšanu notikumu klausītāju masīvam cookie_ready notikumu. Ja izmantojat abus, to atzvani tiks aktivizēti noteiktā secībā.

The vienreiz metode reģistrē vienreizēju notikumu uztvērēju, kas darbojas nākamajā notikuma aktivizēšanas reizē. Pēc tam sistēma to noņems no klausītāju masīva.

Lūk, kā izmantot vienreiz lai apstrādātu vienreizēju notikumu:

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

Šajā gadījumā emitētājs tikai klausīsies cookie_sent notikumu vienu reizi un noņemiet apdarinātāju pēc tam, kad tas ir palaists.

Visas trīs metodes atgriež izstarotāju, lai jūs varētu ķēdīt zvanus uz jebkuru no tām.

Neaizmirstiet, ka, lai klausītājs varētu apstrādāt notikumu, lietojumprogrammai tas kādā brīdī ir jāizstaro. Šeit ir daži koda paraugi, kas jāizdod cookie_ready notikumu, izmantojot izstaro metode:

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

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

bakeCookie()

Kad palaižat šo kodu, kas konsolē drukā paziņojumu, ka cepums cep, gaida 3 sekundes un izstaro cookie_ready notikumu, jūs saņemsiet izvadi, piemēram, attēlā zemāk:

Tas parāda, kā notikumu klausītāji darbojas tādā secībā, kādā tos reģistrējāt.

The EventEmitter klase nodrošina vairāk metožu, tostarp:

  • noņemtKlausītājs: noņem klausītāja gadījumu no notikumu uztvērēju masīva. The izslēgts metode ir pieejama arī šim nolūkam.
  • prependListener: šī metode arī reģistrē klausītāju, bet tā vietā, lai to pievienotu klausītāju masīva beigām, tā pievieno to sākumam. Pēc tam tas darbosies pirms citiem klausītājiem, kurus, iespējams, jau esat reģistrējis.
  • prependOnceListener: Tas darbojas tāpat kā prependListener, taču klausītājs darbojas tikai vienu reizi, kā tas ir gadījumā vienreiz.
  • noņemt visus klausītājus: šī funkcija noņem visus reģistrētos klausītājus konkrētam nosauktam notikumam vai visus klausītājus, ja tam nenododat nevienu argumentu.
  • klausītāji: atgriež klausītāju masīvu notikuma nosaukumam, kuru tam nododat kā argumentu.
  • notikumu nosaukumi: varat izmantot šo funkciju, lai iegūtu visus notikumu nosaukumus, kuriem jau esat reģistrējis klausītāju.
  • setMaxListeners: Node.js pēc noklusējuma izdod brīdinājumu, ja notikumam reģistrējat vairāk nekā 10 klausītājus, lai novērstu atmiņas noplūdes. Varat pielāgot šo noklusējuma vērtību, izmantojot setMaxListeners. Varat arī pārbaudīt šo vērtību, izmantojot getMaxListeners.

The notikumiem pakotne nodrošina visaptverošu funkcionalitāti uz notikumu balstītai programmēšanai pakalpojumā Node.js.

Kādas ir uz notikumu balstītas programmēšanas paraugprakses?

Katrai programmēšanas pieejai ir savi kompromisi, un labākās prakses ignorēšana var negatīvi ietekmēt jūsu lietojumprogrammu. Tālāk ir minētas dažas paraugprakses, kas jāņem vērā, veidojot uz notikumiem balstītas lietojumprogrammas.

  • Izmantojiet kodolīgus un aprakstošus notikumu nosaukumus, lai nodrošinātu tīru un uzturējamu kodu bāzi.
  • Ieviesiet labu kļūdu apstrādes un reģistrēšanas praksi, lai varētu viegli atkļūdot kļūdas.
  • Izvairieties no atzvanīšanas elles (vairāku atzvanu ligzdošanas), rakstot notikumu uztvērējus. Tā vietā izmantojiet JavaScript solījumus.
  • Neveidojiet pārāk daudz klausītāju vienam notikumam. Apsveriet iespēju sadalīt notikumus un savienot tos ķēdē.

Veidojiet lietojumprogrammas ar pareizo arhitektūru

Vispārējs noteikums, kas attiecas uz būvniecības programmatūru, ir pieņemt atbilstošus arhitektūras un dizaina lēmumus. Ja izmantojat nepareizu pieeju lietojumprogrammas izveidei, jūs galu galā saskarsities ar sekām.

Uz notikumu orientēta programmēšana ir paradigma, kas var būtiski ietekmēt lietojumprogrammas arhitektūru un veiktspēju. Ikreiz, kad jūsu lietojumprogramma vai tās daļa ir atkarīga no notikumiem, lai darbotos, jums jāapsver uz notikumiem balstīta programmēšana.