Zephyr Events – 레이스 컨디션에 안전한 2KB TypeScript 이벤트 이터머
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 설계와 안전/빠른 모드 분리가 기본값으로 적절한지 등에 대한 피드백을 환영한다.