Výkonná architektúra Node riadená udalosťami je jednou z jeho najsilnejších výhod.

Kľúčové informácie

  • Programovanie riadené udalosťami je dobrou voľbou pre interaktívne aplikácie, najmä aplikácie GUI, pretože umožňuje kódu reagovať na akcie používateľa v akomkoľvek poradí.
  • Programovanie riadené udalosťami sa bežne používa vo webových aplikáciách, kde sa poslucháči udalostí spúšťajú, keď používatelia interagujú s DOM.
  • Implementácia programovania riadeného udalosťami v Node.js je jednoduchá vďaka triede EventEmitter, ktorá vám umožňuje vytvárať vlastné udalosti a pripájať poslucháčov udalostí, aby ich zvládli.

Pri vytváraní akejkoľvek softvérovej aplikácie je jedným zásadným rozhodnutím výber vhodnej paradigmy pre váš kód.

Programovanie riadené udalosťami je dobrou voľbou pre interaktívne aplikácie, ktoré reagujú na akcie používateľa, ktoré sa môžu vyskytnúť v akomkoľvek poradí. Je to populárnejšia paradigma s aplikáciami GUI ako s programami príkazového riadka alebo kódom vstavaných systémov.

instagram viewer

Čo sú udalosti?

Udalosť si môžete predstaviť ako akciu alebo udalosť, ktorú váš kód dokáže rozpoznať a reagovať na ňu. Systém alebo používateľ môže spustiť udalosť a váš kód zvyčajne zaregistruje funkciu, ktorá ju spracuje.

Príkladom základnej udalosti je kliknutie na tlačidlo na vykonanie konkrétnej akcie. Akt kliknutia na tlačidlo spustí udalosť a funkcia, ktorá sa spustí, keď nastane kliknutie, sa nazýva poslucháč udalostí (alebo psovod).

Čo je programovanie riadené udalosťami?

Programovanie riadené udalosťami je a programovacia paradigma v ktorom tok vykonávania aplikácie závisí skôr od udalostí, ktoré sa vyskytnú, než aby boli striktne sekvenčné.

Táto paradigma sa väčšinou používa pri vytváraní používateľských rozhraní a aplikácií v reálnom čase, kde by udalosť, akou je napríklad akcia používateľa, mala spustiť akciu v systéme.

Paradigma je veľmi populárna pri vytváraní webových aplikácií, kde sa poslucháči udalostí spúšťajú pri interakcii používateľov objektový model dokumentu (DOM).

Nasledujúci obrázok znázorňuje, ako tok funguje v programovaní riadenom udalosťami. Keď nastane udalosť, kanál udalosti ju prijme a odovzdá príslušnému poslucháčovi, aby spracoval:

Udalosťami riadené programovanie v Node.js

The Slučka udalostí JavaScript je jedným zo základných konceptov asynchrónneho charakteru runtime Node.js. Architektúra riadená udalosťami využíva svoje vstavané EventEmitter modul na uľahčenie bezproblémového priebehu vykonávania.

Pomocou programovania riadeného udalosťami vám Node.js umožňuje vytvárať aplikácie na strane servera, ktoré dokážu spracovať interakciu používateľa, I/O operácie a spracovanie údajov v reálnom čase. K tomu dochádza neblokujúcim spôsobom, výsledkom čoho je zvýšený výkon a plynulejší zážitok pre používateľa.

Implementácia programovania riadeného udalosťami v Node.js je jednoduchá, keď rozumiete základom definovania, spúšťania a spracovania udalostí.

Trieda EventEmitter

S EventEmitter triedy v Node.js, môžete vytvoriť vlastné udalosti a pripojiť poslucháčov udalostí, aby ste ich mohli zvládnuť. Ak chcete použiť triedu vo svojom kóde, importujte ju z diania modul takto:

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

// ES6
import { EventEmitter } from"events"

Trieda a jej členské funkcie sú potom k dispozícii na použitie vo vašej aplikácii. Ak chcete začať vysielať a spracovávať udalosti, inicializujte novú inštanciu súboru EventEmitter trieda.

Napríklad:

const FoodEvents = new EventEmitter()

Tým sa vytvorí nový objekt emitora s názvom FoodEvents ktoré môžu vysielať udalosti a registrovať poslucháčov. Trieda EventEmmitter poskytuje tri metódy na počúvanie udalosti: na, addListener, a raz.

The na metóda je najzákladnejšou funkciou na pridávanie poslucháčov udalostí a addListener funguje presne rovnakým spôsobom. Obaja akceptujú názov udalosti a funkciu spätného volania ako argumenty. Spätné volanie je skutočná funkcia obsluhy. Môžeš použiť na a addListener zameniteľne.

Tu je návod, ako zvládnuť udalosť pomocou na metóda:

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

Použitím addListener ako priama alternatíva k na:

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

Oba tieto príklady pridajú spätné volanie do poľa poslucháčov udalostí pre cookie_ready udalosť. Ak použijete obe, ich spätné volanie sa spustí v poradí.

The raz metóda registruje jednorazový poslucháč udalosti, ktorý sa spustí pri ďalšom spustení udalosti. Potom ho systém odstráni z poľa poslucháčov.

Tu je návod na použitie raz zvládnuť jednorazovú udalosť:

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

V tomto prípade bude vysielač iba počúvať cookie_sent udalosť raz a po jej spustení odstráňte obsluhu.

Všetky tri metódy vrátia emitor, takže môžete reťaziť volania na ktorúkoľvek z nich.

Nezabudnite, že na to, aby poslucháč spracoval udalosť, aplikácia musí túto udalosť v určitom okamihu vyslať. Tu je nejaký vzorový kód, ktorý sa má vyslať cookie_ready udalosť pomocou emitovať metóda:

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

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

bakeCookie()

Keď spustíte tento kód, ktorý vytlačí na konzole upozornenie, že sa cookie pečie, počká 3 sekundy a vydá cookie_ready udalosť, dostanete výstup ako na obrázku nižšie:

Toto ukazuje, ako poslucháči udalostí bežia v poradí, v akom ich zaregistrujete.

The EventEmitter trieda poskytuje viac metód, vrátane:

  • removeListener: Odstráni inštanciu poslucháča z poľa poslucháčov udalostí. The vypnuté Na tento účel je k dispozícii aj metóda.
  • prependListener: Táto metóda tiež zaregistruje poslucháča, ale namiesto toho, aby ho pridala na koniec poľa poslucháčov, pridá ho na začiatok. Potom sa spustí pred akýmikoľvek ďalšími poslucháčmi, ktorých ste už možno zaregistrovali.
  • prependOnceListener: Toto funguje rovnako ako prependListener, ale poslucháč sa spustí iba raz, ako v prípade raz.
  • removeAllListeners: Táto funkcia odstráni všetkých registrovaných poslucháčov pre konkrétnu pomenovanú udalosť alebo všetkých poslucháčov, ak jej nezadáte žiadny argument.
  • poslucháčov: Vráti pole poslucháčov názvu udalosti, ktorý mu odovzdáte ako argument.
  • názvy udalostí: Túto funkciu môžete použiť na získanie všetkých názvov udalostí, pre ktoré ste už zaregistrovali poslucháča.
  • setMaxListeners: Node.js predvolene zobrazí varovanie, keď pre udalosť zaregistrujete viac ako 10 poslucháčov, aby sa zabránilo úniku pamäte. Túto predvolenú hodnotu môžete upraviť pomocou setMaxListeners. Túto hodnotu môžete skontrolovať aj pomocou getMaxListeners.

The diania balík poskytuje komplexné funkcie pre programovanie riadené udalosťami v Node.js.

Aké sú niektoré osvedčené postupy programovania riadeného udalosťami?

Každý prístup k programovaniu má svoje nevýhody a ignorovanie osvedčených postupov môže mať nepriaznivé účinky na vašu aplikáciu. Pri vytváraní aplikácií riadených udalosťami je potrebné zvážiť niekoľko osvedčených postupov:

  • Použite stručné a popisné názvy udalostí, aby ste umožnili čistú a udržiavateľnú kódovú základňu.
  • Prijmite dobré postupy spracovania chýb a protokolovania, aby ste umožnili jednoduché ladenie chýb.
  • Vyhnite sa peklu spätného volania (vnorenie viacerých spätných volaní) pri písaní poslucháčov udalostí. Namiesto toho použite prísľuby JavaScriptu.
  • Nevytvárajte príliš veľa poslucháčov pre jednu udalosť. Namiesto toho zvážte rozdelenie udalostí a ich reťazenie.

Vytvárajte aplikácie so správnou architektúrou

Všeobecným pravidlom, ktoré platí pri budovaní softvéru, je robiť vhodné rozhodnutia o architektúre a dizajne. Keď pri vytváraní aplikácie použijete nesprávny prístup, nakoniec budete čeliť následkom.

Programovanie riadené udalosťami je paradigma, ktorá môže mať významný vplyv na architektúru a výkon aplikácie. Vždy, keď fungovanie vašej aplikácie alebo jej časti závisí od udalostí, mali by ste zvážiť programovanie riadené udalosťami.