Noden tehokas tapahtumalähtöinen arkkitehtuuri on yksi sen vahvimmista eduista.
Avaimet takeawayt
- Tapahtumapohjainen ohjelmointi on hyvä valinta interaktiivisille sovelluksille, erityisesti GUI-sovelluksille, koska sen avulla koodi voi vastata käyttäjän toimiin missä tahansa järjestyksessä.
- Tapahtumapohjaista ohjelmointia käytetään yleisesti verkkosovelluksissa, joissa tapahtumien kuuntelijat aktivoituvat, kun käyttäjät ovat vuorovaikutuksessa DOM: n kanssa.
- Tapahtumapohjaisen ohjelmoinnin toteuttaminen Node.js: ssä on helppoa EventEmitter-luokan avulla, jonka avulla voit luoda mukautettuja tapahtumia ja liittää tapahtumakuuntelijoita käsittelemään niitä.
Kun rakennat mitä tahansa ohjelmistosovellusta, yksi ratkaiseva päätös on valita koodillesi sopiva paradigma.
Tapahtumalähtöinen ohjelmointi on hyvä valinta interaktiivisille sovelluksille, jotka vastaavat käyttäjän toimiin, jotka voivat tapahtua missä tahansa järjestyksessä. Se on suositumpi paradigma GUI-sovelluksissa kuin komentoriviohjelmissa tai sulautettujen järjestelmien koodissa.
Mitä ovat tapahtumat?
Voit ajatella tapahtumaa toimintona tai tapahtumana, jonka koodisi voi tunnistaa ja reagoida siihen. Järjestelmä tai käyttäjä voi laukaista tapahtuman ja koodisi yleensä rekisteröi toiminnon käsittelemään sitä.
Esimerkki perustapahtumasta on painikkeen napsauttaminen tietyn toiminnon suorittamiseksi. Painikkeen napsautus käynnistää tapahtuman, ja napsautuksen tapahtuessa suoritettavaa toimintoa kutsutaan nimellä tapahtuman kuuntelija (tai ohjaaja).
Mitä on tapahtumalähtöinen ohjelmointi?
Tapahtumalähtöinen ohjelmointi on a ohjelmointiparadigma jossa sovelluksen suorituskulku riippuu tapahtumista pikemminkin kuin tiukasti peräkkäin.
Tätä paradigmaa käytetään useimmiten rakennettaessa käyttöliittymiä ja reaaliaikaisia sovelluksia, joissa tapahtuman, kuten käyttäjän toiminnan, pitäisi käynnistää toiminto järjestelmässä.
Paradigma on erittäin suosittu luotaessa verkkosovelluksia, joissa tapahtumaseuraajat aktivoituvat, kun käyttäjät ovat vuorovaikutuksessa Document Object Model (DOM).
Seuraava kuva havainnollistaa, kuinka vuo toimii tapahtumaohjatussa ohjelmoinnissa. Kun tapahtuma tapahtuu, tapahtumakanava vastaanottaa sen ja välittää sen asianmukaiselle kuuntelijalle käsiteltäväksi:
Tapahtumapohjainen ohjelmointi Node.js: ssä
The JavaScript-tapahtumasilmukka on yksi Node.js-ajonajan asynkronisen luonteen taustalla olevista peruskäsitteistä. Tapahtumalähtöinen arkkitehtuuri käyttää sisäänrakennettuaan EventEmitter moduuli, joka mahdollistaa saumattoman suoritusvirran.
Tapahtumapohjaisen ohjelmoinnin avulla Node.js: n avulla voit luoda palvelinpuolen sovelluksia, jotka voivat käsitellä käyttäjän vuorovaikutusta, I/O-toimintoja ja reaaliaikaista tietojenkäsittelyä. Tämä tapahtuu estämällä tavalla, mikä parantaa suorituskykyä ja sujuvampaa käyttäjäkokemusta.
Tapahtumapohjaisen ohjelmoinnin toteuttaminen Node.js: ssä on helppoa, kun ymmärrät tapahtumien määrittelyn, käynnistämisen ja käsittelyn perusteet.
EventEmitter-luokka
Kanssa EventEmitter luokkaa Node.js: ssä, voit luoda mukautettuja tapahtumia ja liittää tapahtumakuuntelijoita käsittelemään niitä. Jos haluat käyttää luokkaa koodissasi, tuo se tiedostosta Tapahtumat tällainen moduuli:
// CommonJS
const { EventEmitter } = require("events")
// ES6
import { EventEmitter } from"events"
Luokka ja sen jäsenfunktiot ovat sitten käytettävissäsi sovelluksessasi. Aloita tapahtumien lähettäminen ja käsittely alustamalla uusi esiintymä EventEmitter luokkaa.
Esimerkiksi:
const FoodEvents = new EventEmitter()
Tämä luo uuden emitteriobjektin nimeltä Ruokatapahtumat joka voi lähettää tapahtumia ja rekisteröidä kuuntelijoita. EventEmmitter-luokka tarjoaa kolme tapaa kuunnella tapahtumaa: päällä, addListener, ja kerran.
The päällä menetelmä on perustoiminto tapahtumakuuntelijoiden lisäämiseen, ja addListener toimii täsmälleen samalla tavalla. Molemmat hyväksyvät tapahtuman nimen ja takaisinsoittotoiminnon argumentteina. Takaisinsoitto on varsinainen käsittelijän toiminto. Voit käyttää päällä ja addListener vaihtokelpoisesti.
Näin käsittelet tapahtumaa käyttämällä päällä menetelmä:
FoodEvents.on("cookie_ready", (data) => {
console.log("Cookie ready for packaging, data received: ", data);
})
Käyttämällä addListener suorana vaihtoehtona päällä:
FoodEvents.addListener("cookie_ready", (data) => {
console.log(
"Cookie will now be packaged and sent out, data received: ",
data
);
})
Molemmat esimerkit lisäävät takaisinkutsun tapahtumakuuntelijoiden joukkoon cookie_ready tapahtuma. Jos käytät molempia, heidän takaisinsoittonsa käynnistyvät järjestyksessä.
The kerran menetelmä rekisteröi kertaluonteisen tapahtumakuuntelijan, joka suoritetaan seuraavan kerran, kun tapahtuma käynnistyy. Sen jälkeen järjestelmä poistaa sen kuuntelijajoukosta.
Näin käytät kerran kertaluonteisen tapahtuman käsitteleminen:
FoodEvents.once("cookie_sent", (data) => {
console.log("Cookie is sent out, data received: ", data);
})
Tässä tapauksessa lähetin kuuntelee vain cookie_sent tapahtuman kerran ja poista käsittelijä sen ajettua.
Kaikki kolme menetelmää palauttavat lähettäjän, joten voit ketjuttaa kutsut mihin tahansa niistä.
Älä unohda, että jotta kuuntelija voi käsitellä tapahtumaa, sovelluksen on lähetettävä se jossain vaiheessa. Tässä on esimerkkikoodin lähettämiseen cookie_ready tapahtuma käyttäen säteillä menetelmä:
functionbakeCookie() {
console.log("Cookie is baking, almost ready...")setTimeout(() => {
FoodEvents.emit("cookie_ready", { flavor: "vanilla cookie" })
}, 3000)
}
bakeCookie()
Kun suoritat tämän koodin, joka tulostaa konsoliin ilmoituksen, että eväste on kypsä, odottaa 3 sekuntia ja lähettää cookie_ready tapahtumasta saat alla olevan kuvan kaltaisen tulosteen:
Tämä osoittaa, kuinka tapahtumakuuntelijat toimivat siinä järjestyksessä, jossa rekisteröit ne.
The EventEmitter luokka tarjoaa lisää menetelmiä, mukaan lukien:
- poistaListener: Poistaa kuuntelijan esiintymän tapahtumaseurainten joukosta. The vinossa menetelmä on myös saatavilla tähän tarkoitukseen.
- prependListener: Tämä menetelmä rekisteröi myös kuuntelijan, mutta sen sijaan, että se lisäisi sen kuuntelijataulukon loppuun, se lisää sen alkuun. Sen jälkeen se suoritetaan ennen muita mahdollisesti jo rekisteröityneitä kuuntelijoita.
- prependOnceListener: Tämä toimii aivan kuten prependListener, mutta kuuntelija suoritetaan vain kerran, kuten tapauksessa kerran.
- poistaAllListeners: Tämä toiminto poistaa kaikki tietyn nimetyn tapahtuman rekisteröidyt kuuntelijat tai kaikki kuuntelijat, jos et välitä sille argumenttia.
- kuulijoita: Palauttaa joukon kuuntelijoita tapahtuman nimestä, jonka annat sille argumenttina.
- tapahtumien nimet: Voit käyttää tätä toimintoa saadaksesi kaikki tapahtumanimet, joille olet jo rekisteröinyt kuuntelijan.
- setMaxListeners: Node.js antaa oletusarvoisesti varoituksen, kun rekisteröit tapahtumaan yli 10 kuuntelijaa muistivuotojen estämiseksi. Voit säätää tätä oletusarvoa käyttämällä setMaxListeners. Voit tarkistaa tämän arvon myös käyttämällä getMaxListeners.
The Tapahtumat paketti tarjoaa kattavat toiminnot tapahtumalähtöiseen ohjelmointiin Node.js: ssä.
Mitkä ovat tapahtumalähtöisen ohjelmoinnin parhaat käytännöt?
Jokaisella ohjelmointitavalla on kompromissinsa, ja parhaiden käytäntöjen huomiotta jättäminen voi vaikuttaa haitallisesti sovellukseesi. Seuraavassa on joitain parhaita käytäntöjä, jotka on otettava huomioon luotaessa tapahtumapohjaisia sovelluksia:
- Käytä tapahtumille tiiviitä ja kuvaavia nimiä puhtaan ja ylläpidettävän koodikannan luomiseksi.
- Ota käyttöön hyviä virheiden käsittely- ja kirjauskäytäntöjä, jotta virheiden virheenkorjaus on helppoa.
- Vältä takaisinsoittohelvettiä (useiden takaisinsoittojen sisäkkäisyyttä) kirjoittaessasi tapahtumakuuntelijoita. Käytä sen sijaan JavaScript-lupauksia.
- Älä luo liikaa kuuntelijoita yhdelle tapahtumalle. Harkitse tapahtumien jakamista ja ketjuttamista sen sijaan.
Rakenna sovelluksia oikealla arkkitehtuurilla
Rakennusohjelmistojen yleinen sääntö on tehdä asianmukaiset arkkitehtuuri- ja suunnittelupäätökset. Kun noudatat väärää lähestymistapaa sovelluksen rakentamiseen, kohtaat lopulta seuraukset.
Tapahtumalähtöinen ohjelmointi on paradigma, jolla voi olla merkittävä vaikutus sovelluksen arkkitehtuuriin ja suorituskykyyn. Aina kun sovelluksesi tai osa siitä riippuu tapahtumista toimiakseen, sinun tulee harkita tapahtumalähtöistä ohjelmointia.