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(如 useDebouncedCallback、useThrottledValue 和 useQueuedState 等)减少样板代码。
- 根据您的使用情况,可以选择多层抽象。
- 与每个框架的默认状态管理解决方案配合使用,或与您喜欢的任何自定义状态管理库配合使用。
- 类型安全
- 具有 TypeScript 的完全类型安全,确保您的函数始终使用正确的参数调用
- 泛型,用于灵活且可重用的实用工具
- 框架适配器
- 摇树优化
- 我们当然会为您的应用程序提供正确的树摇动,但我们还为每个实用工具提供额外的深度导入,使您可以更轻松地将这些实用工具嵌入到您的库中,而不会增加库的 bundle-phobia 报告。
交互式比较演示
每个实用工具都设计为以特定方式使用,并且每个实用工具都有其独特的行为。
通过此交互式比较查看每个实用工具的行为。移动范围滑块以观察防抖动、节流、速率限制、队列和批量处理之间的差异
Pacer Lite
Pacer Lite (@tanstack/pacer-lite) 是核心 TanStack Pacer 库的一个精简版本。它旨在用于需要在最小开销和无响应式功能的库和 npm 包中使用的库。Lite 版本中的每个实用工具都具有其核心对应项的核心功能,但已被精简,具有稍小的 API 表面和更小的包大小。Pacer Lite 缺乏响应式功能、框架适配器、devtools 支持以及核心实用工具的一些高级选项。如果您对此感兴趣,请随时尝试一下!