La poderosa arquitectura basada en eventos de Node es una de sus mayores ventajas.

Conclusiones clave

  • La programación basada en eventos es una buena opción para aplicaciones interactivas, especialmente aplicaciones GUI, ya que permite que el código responda a las acciones del usuario en cualquier orden.
  • La programación basada en eventos se usa comúnmente en aplicaciones web, donde los detectores de eventos se activan cuando los usuarios interactúan con el DOM.
  • Implementar programación basada en eventos en Node.js es fácil con la clase EventEmitter, que le permite crear eventos personalizados y adjuntar detectores de eventos para manejarlos.

Al crear cualquier aplicación de software, una decisión crucial implica seleccionar el paradigma apropiado para su código.

La programación basada en eventos es una buena opción para aplicaciones interactivas que responden a las acciones del usuario que pueden ocurrir en cualquier orden. Es un paradigma más popular entre las aplicaciones GUI que con los programas de línea de comandos o el código de sistemas integrados.

instagram viewer

¿Qué son los eventos?

Puedes pensar en un evento como una acción o suceso que tu código puede reconocer y responder. El sistema o un usuario pueden desencadenar un evento y su código generalmente registrará una función para manejarlo.

Un ejemplo de un evento básico es hacer clic en un botón para realizar una acción particular. El acto de hacer clic en el botón activa un evento, y la función que se ejecuta cuando ocurre el clic se llama oyente de eventos (o manejador).

¿Qué es la programación basada en eventos?

La programación basada en eventos es una paradigma de programación en el que el flujo de ejecución de una aplicación depende de eventos que ocurren en lugar de ser estrictamente secuencial.

Este paradigma se utiliza principalmente al crear interfaces de usuario y aplicaciones en tiempo real, donde un evento como la acción de un usuario debería desencadenar una acción en el sistema.

El paradigma es muy popular al crear aplicaciones web, donde los detectores de eventos se activan cuando los usuarios interactúan con el modelo de objetos de documento (DOM).

La siguiente imagen visualiza cómo funciona el flujo en la programación basada en eventos. Cuando ocurre un evento, el canal de eventos lo recibe y lo pasa al oyente apropiado para que lo maneje:

Programación basada en eventos en Node.js

El Bucle de eventos de JavaScript es uno de los conceptos fundamentales detrás de la naturaleza asincrónica del tiempo de ejecución de Node.js. Una arquitectura basada en eventos utiliza su función incorporada. Emisor de eventos módulo para facilitar un flujo de ejecución fluido.

Con la programación basada en eventos, Node.js le permite crear aplicaciones del lado del servidor que pueden manejar la interacción del usuario, las operaciones de E/S y el procesamiento de datos en tiempo real. Esto ocurre sin bloqueo, lo que resulta en un rendimiento mejorado y una experiencia más fluida para el usuario.

Implementar programación basada en eventos en Node.js es fácil cuando comprende los conceptos básicos de definición, activación y manejo de eventos.

La clase EventEmitter

Con el Emisor de eventos clase en Node.js, puede crear eventos personalizados y adjuntar detectores de eventos para manejarlos. Para usar la clase en su código, impórtela desde el eventos módulo como este:

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

// ES6
import { EventEmitter } from"events"

La clase y sus funciones miembro estarán disponibles para que las utilice en su aplicación. Para comenzar a emitir y manejar eventos, inicialice una nueva instancia del Emisor de eventos clase.

Por ejemplo:

const FoodEvents = new EventEmitter()

Esto crea un nuevo objeto emisor llamado ComidaEventos que puede emitir eventos y registrar oyentes. La clase EventEmmitter proporciona tres métodos para escuchar un evento: en, agregar oyente, y una vez.

El en El método es la función más básica para agregar detectores de eventos, y agregar oyente funciona exactamente de la misma manera. Ambos aceptan el nombre del evento y una función de devolución de llamada como argumentos. La devolución de llamada es la función de controlador real. Puedes usar en y agregar oyente indistintamente.

Así es como manejas un evento usando el en método:

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

Usando agregar oyente como alternativa directa para en:

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

Ambos ejemplos agregarán la devolución de llamada a la matriz de detectores de eventos para el cookie_ready evento. Si usa ambos, sus devoluciones de llamada se activarán en orden.

El una vez El método registra un detector de eventos único que se ejecuta la próxima vez que se activa el evento. Después de eso, el sistema lo eliminará del conjunto de oyentes.

Aquí se explica cómo utilizar una vez para manejar un evento único:

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

En este caso, el emisor sólo escuchará el cookie_enviada evento una vez y eliminar el controlador después de que se haya ejecutado.

Los tres métodos devuelven el emisor, por lo que puedes encadenar llamadas a cualquiera de ellos.

No olvide que, para que un oyente maneje un evento, la aplicación debe emitir ese evento en algún momento. Aquí hay un código de muestra para emitir el cookie_ready evento usando el emitir método:

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

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

bakeCookie()

Cuando ejecuta este código que imprime un aviso en la consola de que la cookie se está horneando, espera 3 segundos y emite el cookie_ready evento, obtendrá un resultado como la imagen a continuación:

Esto demuestra cómo se ejecutan los detectores de eventos en el orden en que los registra.

El Emisor de eventos La clase proporciona más métodos, incluyendo:

  • eliminar oyente: Elimina una instancia de un oyente de la matriz de oyentes de eventos. El apagado El método también está disponible para este propósito.
  • anteponerListener: Este método también registra un oyente pero, en lugar de agregarlo al final de la matriz de oyentes, lo agrega al principio. Luego se ejecutará antes que cualquier otro oyente que ya haya registrado.
  • anteponerOnceListener: Esto funciona igual que prependListener, pero el oyente solo se ejecuta una vez, como en el caso de una vez.
  • eliminar todos los oyentes: Esta función elimina todos los oyentes registrados para un evento con nombre específico, o todos los oyentes si no le pasa ningún argumento.
  • oyentes: Devuelve una matriz de oyentes del nombre del evento que le pasas como argumento.
  • nombres de eventos: Puede utilizar esta función para obtener todos los nombres de eventos para los que ya ha registrado un oyente.
  • setMaxListeners: Node.js genera una advertencia de forma predeterminada cuando registra más de 10 oyentes para un evento, para evitar pérdidas de memoria. Puede ajustar este valor predeterminado usando setMaxListeners. También puedes verificar este valor usando obtenerMaxListeners.

El eventos El paquete proporciona una funcionalidad integral para la programación basada en eventos en Node.js.

¿Cuáles son algunas de las mejores prácticas de programación basada en eventos?

Cada enfoque de programación tiene sus ventajas y desventajas, e ignorar las mejores prácticas puede tener efectos adversos en su aplicación. Las siguientes son algunas de las mejores prácticas a considerar al crear aplicaciones basadas en eventos:

  • Utilice nombres concisos y descriptivos para los eventos para permitir una base de código limpia y fácil de mantener.
  • Adopte buenas prácticas de registro y manejo de errores para permitir una fácil depuración de errores.
  • Evite el infierno de las devoluciones de llamadas (anidar varias devoluciones de llamadas) al escribir detectores de eventos. Utilice promesas de JavaScript en su lugar.
  • No cree demasiados oyentes para un evento. Considere dividir los eventos y encadenarlos.

Cree aplicaciones con la arquitectura adecuada

Una regla general que se aplica a la creación de software es tomar decisiones apropiadas de arquitectura y diseño. Cuando sigue el enfoque incorrecto para crear una aplicación, eventualmente enfrentará las consecuencias.

La programación basada en eventos es un paradigma que puede tener un impacto significativo en la arquitectura y el rendimiento de una aplicación. Siempre que su aplicación, o parte de ella, dependa de eventos para funcionar, debe considerar la programación basada en eventos.