La puissante architecture événementielle de Node est l’un de ses plus grands avantages.
Points clés à retenir
- La programmation événementielle est un bon choix pour les applications interactives, en particulier les applications GUI, car elle permet au code de répondre aux actions de l'utilisateur dans n'importe quel ordre.
- La programmation basée sur les événements est couramment utilisée dans les applications Web, où les écouteurs d'événements se déclenchent lorsque les utilisateurs interagissent avec le DOM.
- La mise en œuvre d'une programmation basée sur les événements dans Node.js est simple avec la classe EventEmitter, qui vous permet de créer des événements personnalisés et d'attacher des écouteurs d'événements pour les gérer.
Lors de la création d’une application logicielle, une décision cruciale consiste à sélectionner le paradigme approprié pour votre code.
La programmation événementielle est un bon choix pour les applications interactives qui répondent aux actions des utilisateurs qui peuvent se produire dans n'importe quel ordre. Il s’agit d’un paradigme plus populaire avec les applications GUI qu’avec les programmes en ligne de commande ou le code des systèmes embarqués.
Que sont les événements?
Vous pouvez considérer un événement comme une action ou une occurrence que votre code peut reconnaître et à laquelle il peut répondre. Le système ou un utilisateur peut déclencher un événement et votre code enregistrera généralement une fonction pour le gérer.
Un exemple d'événement de base consiste à cliquer sur un bouton pour effectuer une action particulière. Le fait de cliquer sur le bouton déclenche un événement et la fonction qui s'exécute lorsque le clic se produit est appelée le écouteur d'événements (ou gestionnaire).
Qu'est-ce que la programmation événementielle?
La programmation événementielle est un paradigme de programmation dans lequel le flux d’exécution d’une application dépend d’événements qui se produisent plutôt que d’être strictement séquentiels.
Ce paradigme est principalement utilisé lors de la création d’interfaces utilisateur et d’applications en temps réel, où un événement tel qu’une action d’un utilisateur doit déclencher une action dans le système.
Le paradigme est très populaire lors de la création d'applications Web, dans lesquelles les écouteurs d'événements se déclenchent lorsque les utilisateurs interagissent avec le modèle objet de document (DOM).
L'image suivante visualise le fonctionnement du flux dans la programmation événementielle. Lorsqu'un événement se produit, le canal d'événements le reçoit et le transmet à l'écouteur approprié pour gérer :
Programmation basée sur les événements dans Node.js
Le Boucle d'événements JavaScript est l'un des concepts fondamentaux derrière la nature asynchrone du runtime Node.js. Une architecture événementielle utilise ses éléments intégrés Émetteur d'événements module pour faciliter un flux d’exécution transparent.
Grâce à la programmation basée sur les événements, Node.js vous permet de créer des applications côté serveur capables de gérer les interactions des utilisateurs, les opérations d'E/S et le traitement des données en temps réel. Cela se produit de manière non bloquante, ce qui entraîne des performances améliorées et une expérience plus fluide pour l'utilisateur.
La mise en œuvre d'une programmation événementielle dans Node.js est facile lorsque vous comprenez les bases de la définition, du déclenchement et de la gestion des événements.
La classe EventEmitter
Avec le Émetteur d'événements classe dans Node.js, vous pouvez créer des événements personnalisés et attacher des écouteurs d'événements pour les gérer. Pour utiliser la classe dans votre code, importez-la depuis le événements module comme ceci :
// CommonJS
const { EventEmitter } = require("events")
// ES6
import { EventEmitter } from"events"
La classe et ses fonctions membres sont alors disponibles pour que vous puissiez les utiliser dans votre application. Pour commencer à émettre et gérer des événements, initialisez une nouvelle instance du Émetteur d'événements classe.
Par exemple:
const FoodEvents = new EventEmitter()
Cela crée un nouvel objet émetteur appelé AlimentationÉvénements qui peut émettre des événements et enregistrer des auditeurs. La classe EventEmmitter propose trois méthodes pour écouter un événement: sur, addListener, et une fois.
Le sur La méthode est la fonction la plus basique pour ajouter des écouteurs d'événements, et ajouter un écouteur fonctionne exactement de la même manière. Ils acceptent tous deux le nom de l'événement et une fonction de rappel comme arguments. Le rappel est la fonction de gestionnaire réelle. Vous pouvez utiliser sur et ajouter un écouteur de manière interchangeable.
Voici comment gérer un événement en utilisant le sur méthode:
FoodEvents.on("cookie_ready", (data) => {
console.log("Cookie ready for packaging, data received: ", data);
})
En utilisant ajouter un écouteur comme alternative directe à sur:
FoodEvents.addListener("cookie_ready", (data) => {
console.log(
"Cookie will now be packaged and sent out, data received: ",
data
);
})
Ces deux exemples ajouteront le rappel au tableau d'écouteurs d'événements pour le cookie_prêt événement. Si vous utilisez les deux, leurs rappels se déclencheront dans l'ordre.
Le une fois La méthode enregistre un écouteur d'événement unique qui s'exécute la prochaine fois que l'événement se déclenche. Après cela, le système le supprimera du tableau des auditeurs.
Voici comment utiliser une fois pour gérer un événement ponctuel :
FoodEvents.once("cookie_sent", (data) => {
console.log("Cookie is sent out, data received: ", data);
})
Dans ce cas, l'émetteur n'écoutera que le cookie_envoyé événement une fois et supprimez le gestionnaire après son exécution.
Les trois méthodes renvoient l'émetteur, vous pouvez donc enchaîner les appels vers l'une d'entre elles.
N'oubliez pas que, pour qu'un auditeur gère un événement, l'application doit émettre cet événement à un moment donné. Voici un exemple de code pour émettre le cookie_prêt événement utilisant le émettre méthode:
functionbakeCookie() {
console.log("Cookie is baking, almost ready...")setTimeout(() => {
FoodEvents.emit("cookie_ready", { flavor: "vanilla cookie" })
}, 3000)
}
bakeCookie()
Lorsque vous exécutez ce code qui imprime un avis dans la console indiquant que le cookie est en cours de cuisson, attend 3 secondes et émet le cookie_prêt événement, vous obtiendrez une sortie comme l’image ci-dessous :
Cela montre comment les écouteurs d'événements s'exécutent dans l'ordre dans lequel vous les enregistrez.
Le Émetteur d'événements La classe fournit plus de méthodes, notamment :
- supprimerListener: supprime une instance d'un écouteur du tableau d'écouteurs d'événements. Le désactivé La méthode est également disponible à cet effet.
- prependListener: Cette méthode enregistre également un écouteur mais, au lieu de l'ajouter à la fin du tableau des auditeurs, elle l'ajoute au début. Il s'exécutera ensuite avant tous les autres auditeurs que vous avez peut-être déjà enregistrés.
- prependOnceListener: Cela fonctionne exactement comme prependListener, mais l'écouteur ne s'exécute qu'une seule fois, comme dans le cas de une fois.
- supprimerTouslesÉcouteurs: Cette fonction supprime tous les auditeurs enregistrés pour un événement nommé spécifique, ou tous les auditeurs si vous ne lui transmettez aucun argument.
- les auditeurs: Renvoie un tableau d'écouteurs du nom de l'événement que vous lui transmettez en argument.
- noms d'événements: Vous pouvez utiliser cette fonction pour obtenir tous les noms d'événements pour lesquels vous avez déjà enregistré un écouteur.
- setMaxListeners: Node.js génère un avertissement par défaut lorsque vous enregistrez plus de 10 auditeurs pour un événement, afin d'éviter les fuites de mémoire. Vous pouvez ajuster cette valeur par défaut à l'aide de setMaxListeners. Vous pouvez également vérifier cette valeur en utilisant getMaxListeners.
Le événements Le package fournit des fonctionnalités complètes pour la programmation événementielle dans Node.js.
Quelles sont les meilleures pratiques en matière de programmation événementielle?
Chaque approche de programmation comporte ses compromis, et ignorer les meilleures pratiques peut avoir des effets néfastes sur votre application. Voici quelques bonnes pratiques à prendre en compte lors de la création d’applications basées sur des événements :
- Utilisez des noms concis et descriptifs pour les événements afin de permettre une base de code propre et maintenable.
- Adoptez de bonnes pratiques de gestion des erreurs et de journalisation, pour permettre un débogage facile des erreurs.
- Évitez l'enfer des rappels (imbrication de plusieurs rappels) lors de l'écriture d'écouteurs d'événements. Utilisez plutôt les promesses JavaScript.
- Ne créez pas trop d’auditeurs pour un seul événement. Envisagez plutôt de diviser les événements et de les enchaîner.
Créez des applications avec la bonne architecture
Une règle générale qui s’applique à la création de logiciels est de prendre des décisions appropriées en matière d’architecture et de conception. Lorsque vous suivez une mauvaise approche pour créer une application, vous finirez par en subir les conséquences.
La programmation événementielle est un paradigme qui peut avoir un impact significatif sur l’architecture et les performances d’une application. Chaque fois que votre application, ou une partie de celle-ci, dépend d'événements pour fonctionner, vous devez envisager une programmation événementielle.