Zephyr Events – 레이스 컨디션에 안전한 2KB TypeScript 이벤트 이터머

발행: (2026년 4월 8일 AM 07:37 GMT+9)
2 분 소요
원문: Dev.to

Source: Dev.to

개요

나는 대부분의 사람들이 가지고 있다는 사실조차 모르는 버그를 고친 작은 이벤트 이mitter를 만들었다: 핸들러가 emit 중에 자신에게 off()를 호출하면, 다음 핸들러가 건너뛰어진다. EventEmitter3, Node 내장 EventEmitter, 그리고 mitt 모두 이 문제를 가지고 있다.

Zephyr Events는 스냅샷 기반 반복을 사용하므로, 핸들러가 emit 도중에 구독하거나 구독 해제, 혹은 리스너를 모두 삭제해도 부작용이 없다. 이러한 안전성이 필요하지 않다면, **82 %**까지 빨라지는 zephyrEventsFast 모드가 있다.

  • 1.9 KB, 의존성 없음, 트리‑쉐이킹 가능

설치

npm install zephyr-events

사용법

import zephyrEvents from 'zephyr-events';

type Events = {
  'user:login': { id: number; name: string };
  'error': Error;
};

const emitter = zephyrEvents();

const unsub = emitter.on('user:login', (user) => {
  console.log(`Welcome, ${user.name}`);
});

emitter.emit('user:login', { id: 1, name: 'Alice' });

unsub();

성능

안전성 보장이 필요하지 않을 때는 빠른 모드로 전환할 수 있다:

import { zephyrEventsFast } from 'zephyr-events';

빠른 버전은 안전한 버전보다 **82 %**까지 빠를 수 있다.

피드백

API 설계와 안전/빠른 모드 분리가 기본값으로 적절한지 등에 대한 피드백을 환영한다.

npm에서 zephyr-events

0 조회
Back to Blog

관련 글

더 보기 »