框架
版本
防抖器 API 参考
节流器 API 参考
速率限制器 API 参考
队列 API 参考
批处理器 API 参考

速率限制器

类: RateLimiter<TFn>

定义于: rate-limiter.ts:143

一个创建速率限制函数的类。

速率限制是一种简单的方法,它允许一个函数在一个时间窗口内执行最多达到一个限制,然后阻止所有后续的调用,直到该窗口过去。这可能导致“爆发式”行为,即所有执行立即发生,然后是完全阻塞。

速率限制器支持两种类型的窗口

  • 'fixed': 一个严格的窗口,在窗口期后重置。窗口内的所有执行都会计入限制,并且窗口会在期满后完全重置。
  • 'sliding': 一个滚动窗口,允许在旧的执行过期时进行新的执行。这提供了更一致的执行速率。

为了更平滑的执行模式,请考虑使用

  • 节流 (Throttling): 确保执行之间有规律的间隔(例如,最多每 200 毫秒一次)
  • 防抖 (Debouncing): 在调用暂停后执行(例如,在没有调用 500 毫秒后)

速率限制最适合用于硬性的 API 限制或资源约束。对于 UI 更新或平滑频繁的事件,节流或防抖通常能提供更好的用户体验。

状态管理

  • 使用 TanStack Store 进行响应式状态管理
  • 使用 initialState 在创建速率限制器时提供初始状态值
  • 使用 onExecute 回调来响应函数执行并实现自定义逻辑
  • 使用 onReject 回调函数来响应在超出速率限制时被拒绝的执行
  • 状态包括执行计数、执行时间和拒绝计数
  • 使用类本身时,可以通过 rateLimiter.store.state 访问状态
  • 在使用框架适配器(React/Solid)时,状态可以从 rateLimiter.state 访问

示例

ts
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');
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 extends AnyFunction

构造函数

new RateLimiter()

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

定义于: rate-limiter.ts:150

参数

fn

TFn

initialOptions

RateLimiterOptions<TFn>

Returns (返回)

RateLimiter<TFn>

属性

fn

ts
fn: TFn;
fn: TFn;

定义于: rate-limiter.ts:151


key

ts
key: string;
key: string;

定义于: rate-limiter.ts:146


options

ts
options: RateLimiterOptions<TFn>;
options: RateLimiterOptions<TFn>;

定义于: rate-limiter.ts:147


store

ts
readonly store: Store<Readonly<RateLimiterState>>;
readonly store: Store<Readonly<RateLimiterState>>;

定义于: rate-limiter.ts:144

方法

getMsUntilNextWindow()

ts
getMsUntilNextWindow(): number
getMsUntilNextWindow(): number

定义于: rate-limiter.ts:341

返回下一次执行可能性的毫秒数

Returns (返回)

number


getRemainingInWindow()

ts
getRemainingInWindow(): number
getRemainingInWindow(): number

定义于: rate-limiter.ts:333

返回当前窗口中剩余允许的执行次数

Returns (返回)

number


maybeExecute()

ts
maybeExecute(...args): boolean
maybeExecute(...args): boolean

定义于: rate-limiter.ts:235

尝试在配置的限制内执行速率限制函数。如果当前窗口中的调用次数超过限制,则会拒绝执行。

参数

args

...Parameters<TFn>

Returns (返回)

boolean

示例

ts
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
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()

ts
reset(): void
reset(): void

定义于: rate-limiter.ts:352

重置速率限制器状态

Returns (返回)

void


setOptions()

ts
setOptions(newOptions): void
setOptions(newOptions): void

定义于: rate-limiter.ts:174

更新速率限制器选项

参数

newOptions

Partial<RateLimiterOptions<TFn>>

Returns (返回)

void

我们的合作伙伴
Code Rabbit
Unkey
订阅 Bytes

您的每周 JavaScript 资讯。每周一免费发送给超过 10 万开发者。

Bytes

无垃圾邮件。您可以随时取消订阅。

订阅 Bytes

您的每周 JavaScript 资讯。每周一免费发送给超过 10 万开发者。

Bytes

无垃圾邮件。您可以随时取消订阅。