@cratestack/link-batch

中文文档
0.19.3发布于 2026/11/09MITTypeScriptES Module构建来源已验证近 30 天下载 2632

为 CrateStack 生成的 TypeScript RPC 客户端提供蝙蝠屎式自动批量排程器,以RpcLink 方式发运.

中文使用文档
文档目录3 节
  1. 使用量
  2. 断接语义
  3. 已知的限制

@ cratestack/ link- batch

A 类 屁话- CrateStack 的自动批量排程器 生成类型Script RPC客户端(transport rpc 计划),作为 RpcLink (单位:千美元)问题182而不是一个 fetch 覆盖——所以它由 @cratestack/link-logger,重试链接,或重新认证链接 而不是打他们.

反应原生相容性证据在 docs/react-native-compatibility.md。 。 。 .

在同一勾选符中发出的多次无序呼叫会崩溃成单个 POST /rpc/batch 请求 而不是发射一个 POST /rpc/{op_id} 每一个.

使用量

import { createBatchLink } from "@cratestack/link-batch";
import { CratestackRpcRuntime } from "./generated/runtime"; // your project's generated client

const runtime = new CratestackRpcRuntime("https://api.example.com", {
  links: [createBatchLink()],
});
const client = new MyGeneratedClient(runtime);

// These three calls, if issued in the same tick, become ONE /rpc/batch request:
const [a, b, c] = await Promise.all([
  client.widgets.get(1),
  client.widgets.get(2),
  client.widgets.get(3),
]);

断接语义

  • 窗口: 默认为 queueMicrotask ——在同一勾点中同步发来呼叫(如:. 内部 Promise.all)崩溃. 过 windowMs 将窗口对开.
  • 分区 (固定在 273号; 版本 ưμ㼯A 按运输信封分列的分区——标题(不包括) Idempotency-Key,该附件载有 (b) 按框架而不是按要求), fetch 参考、编码参考和已解决的批次 URL - 每一个分区都是作为自己的 POST /rpc/batch。呼吁共享一个信封 绝大多数常见的情况,仍然完全变成一个请求;没有这样的电话(例如两个) 不同 Authorization 标题)各保留自己的,在单独的请求中,而不是一个 默而覆于彼所出.
  • 总标题: 通过 headers 改为 createBatchLink({ headers }) 以声明信头 每一个合成 /rpc/batch 请求载, 合并 结束 每个分区本身的——a 同名的每个呼叫标题被这个值所压倒,而不是相反. 使用这个 服务级头(如 API 密钥) 而不是 per- tenant auth, 应从 驱动分区的每个呼叫头.
  • maxBatchSize 已执行 每个分区,而不是全球横冲直撞——一个 将超大小的分隔块划入多个并行请求中;它从不借用一个 不同的分区.
  • 编剧: 只呼叫共享明确 idempotencyKey 崩溃为一个请求框架 默认情况下——这已经是呼叫者自己的信号,即呼叫是安全的重复. 电话: 没有一能键从不自动折叠,因为服务器没有自行脱落,而且 悄悄地合并两个文本相同但无标记的变异是不安全的。 通过自定义 dedupe 完全基于值的崩溃,或 () => null 以禁用调试并只禁用批量。 编剧 运行 在内部 一个分区——它从不崩溃 跨越两个不同的信封.
  • 关联: 通过匹配每个响应框的结果后扇出 id数组 位置——服务器的 /rpc/batch 合同已签发担保令(见 docs/design/rpc-transport.md §3.2),但基于id的匹配严格来说更坚固并具有镜像功能 repo自己的Rust客户端批发器(examples/rpc-batch-debounce) (中文(简体) ).
  • 失败隔离: 失败的分区( 网络错误, 非 OK 响应) 只拒绝 已排队的呼叫者 那个 分区——它绝不影响同时飞行的分区.

已知的限制

  • 中止个人通话 AbortSignal 只有在批次尚未发送时才取消—— 它不会取消飞行 /rpc/batch 请求.
  • (fixed in #273),这里保存着任何读取旧版本的道克的人 在273号之前 已合成 /rpc/batch 请求重新使用 第一个 队列调用 headers编号 :fetchFn编号 :codec 页:1 整个冲浪——同一窗口内后来的呼叫中,每个呼叫的自定义头被悄悄地放下 从总请求中选择,而不是应用。 这就是为什么现在存在分割.

版本与发布记录

@cratestack/link-batch 共发布 67 个版本,首次发布于 2026/08/02;过去 12 个月发布了 67 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.19.3latest2026/11/091 天前
0.19.22026/11/091 天前
0.19.12026/11/092 天前
0.19.02026/11/092 天前
0.18.12026/11/073 天前
0.18.02026/11/074 天前

关于 @cratestack/link-batch 的常见问题

@cratestack/link-batch 是什么?

为 CrateStack 生成的 TypeScript RPC 客户端提供蝙蝠屎式自动批量排程器,以RpcLink 方式发运.

如何安装 @cratestack/link-batch?

在项目目录运行 npm install @cratestack/link-batch,或使用 pnpm add / yarn add / bun add。

@cratestack/link-batch 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@cratestack/link-batch 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@cratestack/link-batch 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=24。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@cratestack/link-batch 可以商用吗?

@cratestack/link-batch 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@cratestack/link-batch 的下载量有多少?

根据 npm 官方下载统计,@cratestack/link-batch 在 2026/10/11 – 2026/11/09 这 30 天内被下载 2,632 次,日均约 88 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@cratestack/link-batch 还在维护吗?

最新版本 0.19.3 发布于 2026/11/09(1 天前);至今共发布 67 个版本,其中过去 12 个月发布了 67 个;首次发布于 2026/08/02。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。