📌  相关文章
📜  EventEmitter 和 NodeEventTarget 的区别(1)

📅  最后修改于: 2023-12-03 14:41:01.982000             🧑  作者: Mango

EventEmitter 和 NodeEventTarget 的区别

在 Node.js 中,存在两种基本的事件机制,分别是 EventEmitter 和 NodeEventTarget。两者都可用于处理异步事件,但在使用方式和应用场景上有一些区别。

EventEmitter

EventEmitter 是 Node.js 的核心模块之一,可以用于处理异步事件。它是一个 JavaScript 类,它提供了一个事件触发器,可以用它来触发事件,并监听事件的触发。在 Node.js 中,很多模块都是基于 EventEmitter 实现的,比如 http、fs、net 等模块,在使用这些模块时,都需要通过 EventEmitter 来注册和处理相应的事件。

使用方法
  1. 引入 events 模块。

    const EventEmitter = require('events');
    
  2. 创建 EventEmitter 实例。

    const eventEmitter = new EventEmitter();
    
  3. 注册事件和监听器。

    eventEmitter.on('eventName', listener);
    
  4. 触发事件。

    eventEmitter.emit('eventName');
    
应用场景

EventEmitter 适用于如下场景:

  • 单进程、单线程的应用程序。
  • 处理少量的异步事件。
NodeEventTarget

NodeEventTarget 是在 Node.js v15.0.0 以后新增的 API,它也实现了事件机制,但是与 EventEmitter 不同的是,它是一个基于 Web 标准的事件处理器,实现了浏览器中的 EventTarget API,将 Node.js 中的事件机制与 Web 标准进行整合。

使用方法
  1. 引入 NodeEventTarget 模块。

    const { NodeEventTarget } = require('event-target-shim');
    
  2. 创建 NodeEventTarget 实例。

    const nodeEventTarget = new NodeEventTarget();
    
  3. 注册事件和监听器。

    nodeEventTarget.addEventListener('eventName', listener);
    
  4. 触发事件。

    nodeEventTarget.dispatchEvent(new CustomEvent('eventName'));
    
应用场景

NodeEventTarget 适用于如下场景:

  • Node.js 与浏览器事件的混合应用程序。
  • 处理大量的异步事件,需要更加高效地管理事件流。
总结

EventEmitter 和 NodeEventTarget 都是用于处理异步事件的机制,但是在使用方式和应用场景上有一些不同。EventEmitter 是 Node.js 的核心模块之一,适用于处理少量的异步事件。NodeEventTarget 是在 Node.js v15.0.0 以后新增的 API,实现了浏览器中的 EventTarget API,适用于处理大量的异步事件,需要更加高效地管理事件流。