tseep极速事件发射器

联合创作 · 2023-09-28 09:37

tseep 号称是”世界上最快的事件发射器“,在“经典 API 事件发射器”方面,比 eventemitter3 快12倍。

  • 基于事件映射的 emit 方法的全类型参数
  • 完全实现 NodeJS.EventEmitter 类型和标准,提供接口
  • 最快的pure-js EventEmitter
  • 使用 eventemitter 3测试进行全面测试

基准

emit-multiple-listeners:

tseep x 40,569,711 ops/sec <--- EventEmitter1 x 4,498,223 ops/sec EventEmitter2 x 4,536,296 ops/sec EventEmitter3 x 5,852,395 ops/sec fastemitter x 6,127,215 ops/sec event-emitter x 3,449,595 ops/sec contra/emitter x 2,186,002 ops/sec tsee x 5,231,167 ops/sec emitix x 6,549,983 ops/sec Fastest is [ 'tseep' ] 

基准测试

安装和使用

npm i tseep 

简单用法:

import { EventEmitter } from "tseep";

const events = new EventEmitter<{
    foo: (a: number, b: string) => void;
}>();

// foo's arguments is fully type checked
events.emit("foo", 123, "hello world");

API

EventEmitter<T> ,其中 T 延伸 { [eventName]: Call signature } 

EventEmitter.emit 的args基于事件映射完全类型化。

!! __proto__ 事件名称受限制(类型保护存在)!!

// Listener = (...args: any[]) => Promise<any>|void
// EventMap extends { [event in (string|symbol)]: Listener }

class EventEmitter<EventMap> {
    readonly maxListeners: number;
    readonly _eventsCount: number;

    emit(event: EventKey, ...args: ArgsN<EventMap[EventKey]>): boolean;
    on(event: EventKey, listener: EventMap[EventKey]): this;
    once(event: EventKey, listener: EventMap[EventKey]): this;
    addListener(event: EventKey, listener: EventMap[EventKey], argsNum?: ArgsNum<EventMap[EventKey]>): this;
    removeListener(event: EventKey, listener: EventMap[EventKey]): this;
    hasListeners(event: EventKey): boolean;
    prependListener(event: EventKey, listener: EventMap[EventKey]): this;
    prependOnceListener(event: EventKey, listener: EventMap[EventKey]): this;
    off(event: EventKey, listener: EventMap[EventKey]): this;
    removeAllListeners(event?: EventKey): this;
    setMaxListeners(n: number): this;
    getMaxListeners(): number;
    listeners(event: EventKey): EventMap[EventKey][];
    rawListeners(event: EventKey): EventMap[EventKey][];
    eventNames(): Array<string | symbol>;
    listenerCount(type: EventKey): number;
}
浏览 1
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报