TanStack Pacer 是一个专注于为您的应用程序提供高质量函数执行时序控制工具的库。尽管存在其他类似的工具,但我们的目标是确保所有重要的细节都正确——包括类型安全、摇树优化以及一致且直观的 API。通过专注于这些基础并以框架无关的方式提供它们,我们希望让这些工具和模式在您的应用程序中更加普及。在应用程序开发中,适当的执行控制常常是事后才考虑的事情,这会导致性能问题、竞态条件和糟糕的用户体验,而这些本是可以避免的。TanStack Pacer 帮助您从一开始就正确地实现这些关键模式!
重要
TanStack Pacer 目前处于Alpha阶段,其 API 可能会发生变化。
这个库的范围可能会扩大,但我们希望保持每个独立工具的打包体积精简和专注。
来源
TanStack Pacer 的许多想法(和代码)并非全新。事实上,其中许多工具已经在其他 TanStack 库中存在了相当长一段时间。我们从 TanStack Query、Router、Form,甚至 Tanner 的原始 Swimmer 库中提取了代码。然后我们清理了这些工具,填补了一些空白,并将它们作为独立库发布。
特性
注意
TanStack Pacer 目前主要是一个客户端库,但它正在被设计成可能也可以在服务器端使用。
- 防抖(Debouncing)
- 在一段时间不活动后延迟执行,适用于您只关心序列中最后一次执行的场景。
- 同步或异步防抖工具,支持 Promise 和错误处理。
- 控制前置、后置和启用选项。
- 节流(Throttling)
- 平滑地限制函数触发的速率。
- 同步或异步节流工具,支持 Promise 和错误处理。
- 控制前置、后置和启用选项。
- 速率限制(Rate Limiting)
- 在一段时间内限制函数触发的速率。
- 同步或异步速率限制工具,支持 Promise 和错误处理。
- 速率限制的固定窗口或滑动窗口变体。
- 队列(Queuing)
- 按特定顺序排列要执行的函数。
- 选择先入先出 (FIFO)、后入先出 (LIFO) 和优先队列实现。
- 通过可配置的等待时间或并发限制来控制处理速度。
- 通过开始/停止功能管理队列执行。
- 在可配置的持续时间后从队列中过期项目。
- 批处理(Batching)
- 将多个操作分块成更大的批次,以减少总体的往返操作。
- 按时间段、批次大小、时间优先或自定义条件触发批处理执行。
- 异步或同步变体
- 在每个工具的同步和异步版本之间进行选择。
- 为异步变体提供可选的错误、成功和已完成处理。
- 状态管理
- 底层使用 TanStack Store 进行状态管理,具有细粒度的响应性。
- 轻松集成您选择的任何状态管理库。
- 对于速率限制和队列等某些工具,可以将状态持久化到本地或会话存储。
- 便捷的 Hooks
- 通过预构建的 Hooks,如 useDebouncedCallback、useThrottledValue 和 useQueuedState 等,减少样板代码。
- 根据您的用例,有多个抽象层可供选择。
- 可与每个框架的默认状态管理解决方案配合使用,或与您偏好的任何自定义状态管理库配合使用。
- 类型安全
- 完整的 TypeScript 类型安全,确保您的函数始终以正确的参数调用。
- 泛型,提供灵活且可重用的工具。
- 框架适配器
- 摇树优化
- 我们当然默认就能正确地为您的应用程序进行摇树优化,但我们也为每个工具提供了更深度的导入,使这些工具更容易嵌入到您的库中,而不会增加您库的打包体积负担。
交互式对比演示
每个工具都设计为以特定的方式使用,并且每个工具都有其独特的行为。
通过此交互式演示查看每个工具的行为。移动范围滑块以观察防抖、节流、速率限制、队列和批处理之间的差异。