A Node erőteljes eseményvezérelt architektúrája az egyik legerősebb előnye.
Kulcs elvitelek
- Az eseményvezérelt programozás jó választás az interaktív alkalmazásokhoz, különösen a GUI-alkalmazásokhoz, mivel lehetővé teszi a kód számára, hogy bármilyen sorrendben válaszoljon a felhasználói műveletekre.
- Az eseményvezérelt programozást gyakran használják a webalkalmazásokban, ahol az eseményfigyelők aktiválódnak, amikor a felhasználók interakcióba lépnek a DOM-mal.
- Az eseményvezérelt programozás megvalósítása a Node.js-ben egyszerű az EventEmitter osztállyal, amely lehetővé teszi egyéni események létrehozását és eseményfigyelők csatolását a kezelésükhöz.
Bármely szoftveralkalmazás elkészítésekor az egyik döntő döntés a megfelelő paradigma kiválasztása a kódhoz.
Az eseményvezérelt programozás jó választás olyan interaktív alkalmazásokhoz, amelyek bármilyen sorrendben reagálnak a felhasználói műveletekre. Ez egy népszerűbb paradigma a GUI-alkalmazásoknál, mint a parancssori programoknál vagy a beágyazott rendszerkódoknál.
Mik azok az események?
Az eseményre úgy gondolhat, mint egy olyan műveletre vagy eseményre, amelyet a kód felismer, és reagál rá. A rendszer vagy egy felhasználó indíthat eseményt, és a kódja általában regisztrál egy funkciót annak kezelésére.
Példa egy alapeseményre, ha egy gombra kattintunk egy adott művelet végrehajtásához. A gombra kattintás egy eseményt indít el, és a kattintáskor lefutó függvény neve a eseményhallgató (vagy kezelő).
Mi az az eseményvezérelt programozás?
Az eseményvezérelt programozás a programozási paradigma amelyekben egy alkalmazás végrehajtási folyamata a bekövetkező eseményektől függ, nem pedig szigorúan egymás után.
Ezt a paradigmát leggyakrabban felhasználói felületek és valós idejű alkalmazások építésekor használják, ahol egy eseménynek, például egy felhasználói műveletnek egy műveletet kell kiváltania a rendszerben.
A paradigma nagyon népszerű webalkalmazások készítésekor, ahol az eseményfigyelők aktiválódnak, amikor a felhasználók interakcióba lépnek a dokumentum objektum modell (DOM).
A következő kép azt szemlélteti, hogyan működik a folyamat az eseményvezérelt programozásban. Amikor egy esemény bekövetkezik, az eseménycsatorna fogadja azt, és továbbítja a megfelelő figyelőnek, hogy kezelje:
Eseményvezérelt programozás a Node.js-ben
A JavaScript eseményhurok a Node.js futtatókörnyezet aszinkron jellege mögött meghúzódó egyik alapvető koncepció. Az eseményvezérelt architektúra a beépítettségét használja EventEmitter modul a zökkenőmentes végrehajtás megkönnyítése érdekében.
Az eseményvezérelt programozással a Node.js segítségével szerveroldali alkalmazásokat hozhat létre, amelyek képesek kezelni a felhasználói interakciót, az I/O műveleteket és a valós idejű adatfeldolgozást. Ez nem blokkoló módon történik, ami jobb teljesítményt és gördülékenyebb felhasználói élményt eredményez.
Az eseményvezérelt programozás megvalósítása a Node.js-ben egyszerű, ha ismeri az események meghatározásának, kiváltásának és kezelésének alapjait.
Az EventEmitter osztály
A... val EventEmitter osztályban a Node.js-ben, egyéni eseményeket hozhat létre, és eseményfigyelőket csatolhat a kezelésükhöz. Az osztály használatához a kódban importálja azt a eseményeket ilyen modul:
// CommonJS
const { EventEmitter } = require("events")
// ES6
import { EventEmitter } from"events"
Az osztály és a tagfüggvényei ezután elérhetőek az alkalmazásban való használatra. Az események kibocsátásának és kezelésének megkezdéséhez inicializáljon egy új példányt a EventEmitter osztály.
Például:
const FoodEvents = new EventEmitter()
Ez létrehoz egy új emitter objektumot, az úgynevezett FoodEvents amely eseményeket bocsát ki és hallgatókat regisztrál. Az EventEmmitter osztály három módszert kínál egy esemény meghallgatására: tovább, addListener, és egyszer.
A tovább metódus a legalapvetőbb funkció az eseményfigyelők hozzáadásához, és addListener pontosan ugyanúgy működik. Mindkettő elfogadja az esemény nevét és a visszahívási függvényt argumentumként. A visszahívás a tényleges kezelői funkció. Te tudod használni tovább és addListener felcserélhetően.
Így kezelheti az eseményt a tovább módszer:
FoodEvents.on("cookie_ready", (data) => {
console.log("Cookie ready for packaging, data received: ", data);
})
Használata addListener közvetlen alternatívájaként tovább:
FoodEvents.addListener("cookie_ready", (data) => {
console.log(
"Cookie will now be packaged and sent out, data received: ",
data
);
})
Mindkét példa hozzáadja a visszahívást az eseményfigyelők tömbjéhez cookie_ready esemény. Ha mindkettőt használja, akkor a visszahívásaik sorrendben aktiválódnak.
A egyszer metódus regisztrál egy egyszeri eseményfigyelőt, amely az esemény következő aktiválásakor fut le. Ezt követően a rendszer eltávolítja a hallgatók tömbjéből.
Íme, hogyan kell használni egyszer egyszeri esemény kezeléséhez:
FoodEvents.once("cookie_sent", (data) => {
console.log("Cookie is sent out, data received: ", data);
})
Ebben az esetben az adó csak a cookie_sent eseményt egyszer, és távolítsa el a kezelőt, miután lefutott.
Mindhárom módszer visszaadja az emittert, így bármelyikhez láncolhatja a hívásokat.
Ne felejtse el, hogy ahhoz, hogy a hallgató kezelni tudjon egy eseményt, az alkalmazásnak valamikor ki kell adnia az eseményt. Íme néhány mintakód a kibocsátáshoz cookie_ready esemény segítségével kibocsát módszer:
functionbakeCookie() {
console.log("Cookie is baking, almost ready...")setTimeout(() => {
FoodEvents.emit("cookie_ready", { flavor: "vanilla cookie" })
}, 3000)
}
bakeCookie()
Amikor lefuttatja ezt a kódot, amely figyelmeztetést nyomtat a konzolra, hogy a süti sül, vár 3 másodpercet, és kiadja a cookie_ready esemény esetén az alábbi képhez hasonló kimenetet kap:
Ez bemutatja, hogyan futnak az eseményfigyelők a regisztrációs sorrendben.
A EventEmitter osztály további metódusokat kínál, többek között:
- RemoveListener: Eltávolítja a figyelő egy példányát az eseményfigyelők tömbjéből. A ki módszer is rendelkezésre áll erre a célra.
- prependListener: Ez a metódus egy figyelőt is regisztrál, de ahelyett, hogy a hallgatók tömb végéhez adná, az elejéhez adja. Ezután minden olyan hallgató előtt fut, amelyet esetleg már regisztrált.
- prependOnceListener: Ez ugyanúgy működik, mint a prependListener, de a hallgató csak egyszer fut le, mint például a egyszer.
- RemoveAllListeners: Ez a funkció eltávolítja az összes regisztrált figyelőt egy adott megnevezett eseményhez, vagy az összes hallgatót, ha nem adsz át argumentumot.
- hallgatók: Az argumentumként átadott eseménynév hallgatóinak tömbjét adja vissza.
- eseménynevek: Ezzel a funkcióval lekérheti az összes esemény nevét, amelyhez már regisztrált figyelőt.
- setMaxListeners: A Node.js alapértelmezés szerint figyelmeztetést ad, ha 10-nél több figyelőt regisztrál egy eseményhez, hogy megakadályozza a memóriaszivárgást. Ezt az alapértelmezett értéket a setMaxListeners segítségével állíthatja be. Ezt az értéket a segítségével is ellenőrizheti getMaxListeners.
A eseményeket csomag átfogó funkcionalitást biztosít a Node.js eseményvezérelt programozásához.
Melyek az eseményvezérelt programozás bevált gyakorlatai?
Minden programozási megközelítésnek megvannak a maga kompromisszumai, és a bevált gyakorlatok figyelmen kívül hagyása káros hatással lehet az alkalmazásra. Az alábbiakban felsorolunk néhány bevált gyakorlatot, amelyeket figyelembe kell venni az eseményvezérelt alkalmazások létrehozásakor:
- Tiszta és karbantartható kódbázis létrehozása érdekében használjon tömör és leíró jellegű eseményeket.
- Alkalmazzon jó hibakezelési és naplózási gyakorlatokat, hogy lehetővé tegye a hibák egyszerű hibakeresését.
- Kerülje el a visszahívási poklot (több visszahívás beágyazását), amikor eseményfigyelőket ír. Használjon helyette JavaScript ígéreteket.
- Ne hozzon létre túl sok hallgatót egy eseményhez. Fontolja meg az események felosztását és láncolását.
Alkalmazások létrehozása a megfelelő architektúrával
Az épületszoftverekre vonatkozó általános szabály a megfelelő építészeti és tervezési döntések meghozatala. Ha rossz megközelítést alkalmaz egy alkalmazás létrehozásához, akkor végül szembe kell néznie a következményekkel.
Az eseményvezérelt programozás olyan paradigma, amely jelentős hatással lehet az alkalmazás architektúrájára és teljesítményére. Amikor az alkalmazás vagy annak egy része eseményektől függ, hogy működjön, fontolja meg az eseményvezérelt programozást.