Výkonná architektura Node řízená událostmi je jednou z jeho nejsilnějších výhod.

Klíčové věci

  • Programování řízené událostmi je dobrou volbou pro interaktivní aplikace, zejména aplikace GUI, protože umožňuje kódu reagovat na akce uživatele v libovolném pořadí.
  • Programování řízené událostmi se běžně používá ve webových aplikacích, kde se posluchači událostí spouštějí při interakci uživatelů s DOM.
  • Implementace událostmi řízeného programování v Node.js je snadná díky třídě EventEmitter, která vám umožňuje vytvářet vlastní události a připojovat posluchače událostí, aby je zvládli.

Při vytváření jakékoli softwarové aplikace je jedním zásadním rozhodnutím výběr vhodného paradigmatu pro váš kód.

Programování řízené událostmi je dobrou volbou pro interaktivní aplikace, které reagují na akce uživatele, k nimž může dojít v libovolném pořadí. Je to populárnější paradigma u aplikací GUI než u programů příkazového řádku nebo kódu vestavěných systémů.

Co jsou události?

Událost si můžete představit jako akci nebo událost, kterou váš kód dokáže rozpoznat a reagovat na ni. Systém nebo uživatel může spustit událost a váš kód obvykle zaregistruje funkci, která ji zpracuje.

instagram viewer

Příkladem základní události je kliknutí na tlačítko pro provedení konkrétní akce. Kliknutím na tlačítko se spustí událost a funkce, která se spustí, když dojde ke kliknutí, se nazývá posluchač události (nebo psovod).

Co je událostmi řízené programování?

Programování řízené událostmi je a programovací paradigma ve kterém tok provádění aplikace závisí na událostech, které nastanou, spíše než aby byly striktně sekvenční.

Toto paradigma se většinou používá při vytváření uživatelských rozhraní a aplikací v reálném čase, kde by událost, jako je akce uživatele, měla spustit akci v systému.

Toto paradigma je velmi oblíbené při vytváření webových aplikací, kde se posluchači událostí spouštějí, když s nimi uživatelé komunikují objektový model dokumentu (DOM).

Následující obrázek znázorňuje, jak tok funguje v programování řízeném událostmi. Když nastane událost, kanál události ji přijme a předá příslušnému posluchači, aby zpracoval:

Programování řízené událostmi v Node.js

The Smyčka událostí JavaScriptu je jedním ze základních konceptů asynchronní povahy běhového prostředí Node.js. Architektura řízená událostmi využívá své vestavěné EventEmitter modul pro usnadnění bezproblémového průběhu provádění.

Díky programování řízenému událostmi vám Node.js umožňuje vytvářet aplikace na straně serveru, které dokážou zpracovat interakci uživatele, I/O operace a zpracování dat v reálném čase. K tomu dochází neblokujícím způsobem, což má za následek zvýšený výkon a hladší zážitek pro uživatele.

Implementace programování řízeného událostmi v Node.js je snadná, když rozumíte základům definování, spouštění a zpracování událostí.

Třída EventEmitter

s EventEmitter třídy v Node.js, můžete vytvořit vlastní události a připojit posluchače událostí, které je zpracují. Chcete-li použít třídu ve svém kódu, importujte ji z Události modul takto:

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

// ES6
import { EventEmitter } from"events"

Třída a její členské funkce jsou pak k dispozici pro použití ve vaší aplikaci. Chcete-li zahájit vysílání a zpracování událostí, inicializujte novou instanci souboru EventEmitter třída.

Například:

const FoodEvents = new EventEmitter()

Tím se vytvoří nový objekt emitoru s názvem FoodEvents které mohou vysílat události a registrovat posluchače. Třída EventEmmitter poskytuje tři metody pro poslech události: na, addListener, a jednou.

The na metoda je nejzákladnější funkcí pro přidávání posluchačů událostí a addListener funguje úplně stejným způsobem. Oba přijímají jako argumenty název události a funkci zpětného volání. Zpětné volání je skutečná funkce obsluhy. Můžeš použít na a addListener zaměnitelně.

Zde je návod, jak zpracovat událost pomocí na metoda:

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

Použitím addListener jako přímá alternativa na:

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

Oba tyto příklady přidají zpětné volání do pole posluchačů událostí pro cookie_ready událost. Pokud použijete oba, jejich zpětná volání se spustí v pořadí.

The jednou metoda registruje jednorázový posluchač události, který se spustí při příštím spuštění události. Poté jej systém odstraní z pole posluchačů.

Zde je návod, jak používat jednou pro zpracování jednorázové události:

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

V tomto případě bude vysílač pouze naslouchat cookie_sent událost jednou a po jejím spuštění obsluhu odeberte.

Všechny tři metody vrací emitor, takže můžete řetězit volání na kteroukoli z nich.

Nezapomeňte, že aby posluchač zpracoval událost, aplikace musí tuto událost v určitém okamžiku vyslat. Zde je nějaký ukázkový kód k odeslání cookie_ready událost pomocí vysílat metoda:

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

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

bakeCookie()

Když spustíte tento kód, který na konzoli vytiskne upozornění, že se cookie peče, počká 3 sekundy a vydá cookie_ready událost, dostanete výstup jako na obrázku níže:

To ukazuje, jak posluchače událostí běží v pořadí, v jakém je zaregistrujete.

The EventEmitter třída poskytuje více metod, včetně:

  • removeListener: Odebere instanci posluchače z pole posluchačů událostí. The vypnuto Pro tento účel je k dispozici také metoda.
  • prependListener: Tato metoda také zaregistruje posluchače, ale místo toho, aby jej přidala na konec pole posluchačů, přidá jej na začátek. Poté se spustí před všemi ostatními posluchači, které jste již možná zaregistrovali.
  • prependOnceListener: Toto funguje stejně jako prependListener, ale posluchač se spustí pouze jednou, jako v případě jednou.
  • removeAllListeners: Tato funkce odstraní všechny registrované posluchače pro konkrétní pojmenovanou událost nebo všechny posluchače, pokud jí nezadáte žádný argument.
  • posluchači: Vrátí pole posluchačů názvu události, který mu předáte jako argument.
  • názvy událostí: Tuto funkci můžete použít k získání všech názvů událostí, pro které jste již zaregistrovali posluchače.
  • setMaxListeners: Node.js ve výchozím nastavení vyvolá varování, když pro událost zaregistrujete více než 10 posluchačů, aby se zabránilo úniku paměti. Tuto výchozí hodnotu můžete upravit pomocí setMaxListeners. Tuto hodnotu můžete také zkontrolovat pomocí getMaxListeners.

The Události balíček poskytuje komplexní funkce pro programování řízené událostmi v Node.js.

Jaké jsou některé osvědčené postupy programování řízeného událostmi?

Každý přístup k programování má své nevýhody a ignorování osvědčených postupů může mít nepříznivý dopad na vaši aplikaci. Níže jsou uvedeny některé osvědčené postupy, které je třeba vzít v úvahu při vytváření aplikací řízených událostmi:

  • Používejte stručné a popisné názvy událostí, abyste umožnili čistou a udržovatelnou kódovou základnu.
  • Přijměte dobré postupy pro zpracování chyb a protokolování, abyste mohli chyby snadno ladit.
  • Vyhněte se peklu zpětného volání (vnořování více zpětných volání) při psaní posluchačů událostí. Místo toho použijte přísliby JavaScriptu.
  • Nevytvářejte příliš mnoho posluchačů pro jednu událost. Místo toho zvažte rozdělení událostí a jejich řetězení.

Vytvářejte aplikace se správnou architekturou

Obecným pravidlem, které platí pro vytváření softwaru, je přijímat vhodná rozhodnutí o architektuře a návrhu. Když při vytváření aplikace použijete nesprávný přístup, nakonec budete čelit následkům.

Programování řízené událostmi je paradigma, které může mít významný dopad na architekturu a výkon aplikace. Kdykoli funkce vaší aplikace nebo její části závisí na událostech, měli byste zvážit programování řízené událostmi.