文档
CodeRabbit
Cloudflare
AG Grid
Netlify
Neon
WorkOS
Clerk
Convex
Electric
PowerSync
Sentry
Railway
Prisma
Strapi
Unkey
CodeRabbit
Cloudflare
AG Grid
Netlify
Neon
WorkOS
Clerk
Convex
Electric
PowerSync
Sentry
Railway
Prisma
Strapi
Unkey
防抖器 API 参考
节流器 API 参考
速率限制器 API 参考
队列 API 参考
批处理器 API 参考
入门

概述

TanStack Pacer 是一个专注于提供高质量实用工具的库,用于控制应用程序中函数执行时机。虽然其他地方也存在类似的实用工具,但我们的目标是把重要的细节都做到位——包括类型安全树摇动以及一致且直观的 API。通过专注于这些基本要素,并以框架无关的方式提供它们,我们希望在您的应用程序中使这些实用工具和模式更加普及。适当的执行控制通常是在应用程序开发中被忽视的,导致性能问题、竞争条件和糟糕的用户体验,这些本可以通过预防来避免。TanStack Pacer 帮助您从一开始就正确地实现这些关键模式!

重要

TanStack Pacer 目前处于 beta 阶段,其 API 仍有可能发生变化。

该库的范围可能会扩大,但我们希望保持每个实用工具的包大小精简和专注。

起源

TanStack Pacer 的许多想法(和代码)并非全新。事实上,许多这些实用工具已经存在于其他 TanStack 库中一段时间了。我们从 TanStack Query、Router、Form,甚至 Tanner 最初的 Swimmer 库中提取了代码。然后我们清理了这些实用工具,填补了一些空白,并将它们作为独立的库发布。

特性

注意

TanStack Pacer 目前主要是一个客户端库,但它被设计成有可能在服务器端使用。

  • 防抖动
    • 在一段时间不活动后延迟执行,当您只关心序列中的最后一次执行时。
    • 具有 promise 支持和错误处理的同步或异步防抖动实用工具
    • 控制 leading、trailing 和 enabled 选项
  • 节流
    • 平滑地限制函数可以触发的速率
    • 具有 promise 支持和错误处理的同步或异步节流实用工具
    • 控制 leading、trailing 和 enabled 选项。
  • 速率限制
    • 限制函数在一段时间内可以触发的速率
    • 具有 promise 支持和错误处理的同步或异步速率限制实用工具
    • 固定或滑动窗口速率限制变体
  • 队列
    • 按特定顺序将函数排队执行
    • 选择 FIFO、LIFO 和优先级队列实现
    • 使用可配置的等待时间或并发限制控制处理速度
    • 使用启动/停止功能管理队列执行
    • 在可配置的持续时间后从队列中删除项目
  • 批量处理
    • 将多个操作分成更大的批次,以减少总共来回操作次数
    • 按时间段批量处理,按批量大小批量处理,以先到者为准,或使用自定义条件触发批量执行
  • 异步或同步变体
    • 选择每个实用工具的同步和异步版本
    • 异步变体的可选错误、成功和已完成处理
    • 异步变体的重试和中止支持
  • 状态管理
    • 在底层使用 TanStack Store 进行状态管理,具有细粒度的响应式
    • 轻松与您选择的自己的状态管理库集成
    • 将状态持久化到本地或会话存储,用于某些实用工具,如速率限制和队列
  • 便捷的 Hooks
    • 使用预构建的 hooks(如 useDebouncedCallbackuseThrottledValueuseQueuedState 等)减少样板代码。
    • 根据您的使用情况,可以选择多层抽象。
    • 与每个框架的默认状态管理解决方案配合使用,或与您喜欢的任何自定义状态管理库配合使用。
  • 类型安全
    • 具有 TypeScript 的完全类型安全,确保您的函数始终使用正确的参数调用
    • 泛型,用于灵活且可重用的实用工具
  • 框架适配器
    • React、Solid 等
  • 摇树优化
    • 我们当然会为您的应用程序提供正确的树摇动,但我们还为每个实用工具提供额外的深度导入,使您可以更轻松地将这些实用工具嵌入到您的库中,而不会增加库的 bundle-phobia 报告。

交互式比较演示

每个实用工具都设计为以特定方式使用,并且每个实用工具都有其独特的行为。

通过此交互式比较查看每个实用工具的行为。移动范围滑块以观察防抖动、节流、速率限制、队列和批量处理之间的差异

Pacer Lite

Pacer Lite (@tanstack/pacer-lite) 是核心 TanStack Pacer 库的一个精简版本。它旨在用于需要在最小开销和无响应式功能的库和 npm 包中使用的库。Lite 版本中的每个实用工具都具有其核心对应项的核心功能,但已被精简,具有稍小的 API 表面和更小的包大小。Pacer Lite 缺乏响应式功能、框架适配器、devtools 支持以及核心实用工具的一些高级选项。如果您对此感兴趣,请随时尝试一下!