본문으로 건너뛰기

클래스: RateLimiter<TFn>

정의 위치: rate-limiter.ts:156

요청률 제한 함수를 생성하는 클래스입니다.

요청률 제한은 시간 윈도우 안에서 한도까지 함수를 실행할 수 있게 한 뒤, 윈도우가 지날 때까지 이후의 모든 호출을 차단하는 간단한 방식입니다. 이로 인해 모든 실행이 즉시 일어난 뒤 완전히 차단되는 "버스트성" 동작이 발생할 수 있습니다. 이 동기 버전은 더 가볍고 대개 필요한 기능을 모두 제공하지만, 프로미스, 재시도 지원, 중단 기능 또는 고급 오류 처리가 필요하다면 AsyncRateLimiter로 전환합니다.

요청률 제한기는 다음 두 가지 윈도우 유형을 지원합니다.

  • 'fixed': 윈도우 기간이 지나면 재설정되는 엄격한 윈도우입니다. 윈도우 안의 모든 실행이 한도에 포함되며, 기간이 지나면 윈도우가 완전히 재설정됩니다.
  • 'sliding': 이전 실행이 만료됨에 따라 새 실행을 허용하는 이동식 윈도우입니다. 시간의 흐름에 따라 더 일정한 실행률을 제공합니다.

더 매끄러운 실행 패턴이 필요하다면 다음 기능의 사용을 고려합니다.

  • 스로틀: 실행 사이에 일정한 간격을 보장합니다(예: 200ms당 최대 한 번)
  • 디바운스: 호출이 잠시 멈출 때까지 기다린 후 실행합니다(예: 500ms 동안 호출이 없을 때)

요청률 제한은 엄격한 API 한도나 리소스 제약에 사용하는 것이 가장 적합합니다. UI 업데이트나 빈번한 이벤트를 완화하는 용도라면 일반적으로 스로틀이나 디바운스가 더 나은 사용자 경험을 제공합니다.

상태 관리:

  • 반응형 상태 관리에 TanStack Store를 사용합니다
  • 요청률 제한기를 생성할 때 initialState를 사용하여 초기 상태 값을 제공합니다
  • onExecute 콜백을 사용하여 함수 실행에 반응하고 사용자 정의 로직을 구현합니다
  • 요청률 한도를 초과하여 실행이 거부될 때 onReject 콜백을 사용하여 반응합니다
  • 상태에는 실행 횟수, 실행 시각, 거부 횟수가 포함됩니다
  • 클래스를 직접 사용할 때는 rateLimiter.store.state를 통해 상태에 접근할 수 있습니다
  • 프레임워크 어댑터(React/Solid)를 사용할 때는 rateLimiter.state에서 상태에 접근합니다

예시

const rateLimiter = new RateLimiter(
(id: string) => api.getData(id),
{
limit: 5,
window: 1000,
windowType: 'sliding',
}
);

// Will execute immediately until limit reached, then block
rateLimiter.maybeExecute('123');

타입 매개변수

TFn

TFn extends AnyFunction

생성자

생성자

new RateLimiter<TFn>(fn, initialOptions): RateLimiter<TFn>;

정의 위치: rate-limiter.ts:163

매개변수

fn

TFn

initialOptions

RateLimiterOptions&lt;TFn>

반환값

RateLimiter&lt;TFn>

속성

fn

fn: TFn;

정의 위치: rate-limiter.ts:164


key

key: string | undefined;

정의 위치: rate-limiter.ts:159


options

options: RateLimiterOptions<TFn>;

정의 위치: rate-limiter.ts:160


store

readonly store: Store<Readonly<RateLimiterState>>;

정의 위치: rate-limiter.ts:157

메서드

getMsUntilNextWindow()

getMsUntilNextWindow(): number;

정의 위치: rate-limiter.ts:358

다음 실행이 가능해질 때까지 남은 밀리초 수를 반환합니다

반환값

number


getRemainingInWindow()

getRemainingInWindow(): number;

정의 위치: rate-limiter.ts:350

현재 윈도우에서 허용되는 남은 실행 횟수를 반환합니다

반환값

number


maybeExecute()

maybeExecute(...args): boolean;

정의 위치: rate-limiter.ts:252

구성된 한도 안에 있으면 요청률이 제한된 함수의 실행을 시도합니다. 현재 윈도우의 호출 횟수가 한도를 초과하면 실행을 거부합니다.

매개변수

args

...Parameters&lt;TFn>

반환값

boolean

예시

const rateLimiter = new RateLimiter(fn, { limit: 5, window: 1000 });

// First 5 calls will return true
rateLimiter.maybeExecute('arg1', 'arg2'); // true

// Additional calls within the window will return false
rateLimiter.maybeExecute('arg1', 'arg2'); // false

reset()

reset(): void;

정의 위치: rate-limiter.ts:369

요청률 제한기의 상태를 재설정합니다

반환값

void


setOptions()

setOptions(newOptions): void;

정의 위치: rate-limiter.ts:191

요청률 제한기 옵션을 업데이트합니다

매개변수

newOptions

Partial&lt;RateLimiterOptions&lt;TFn>>

반환값

void