const job = startPatch(oldPath, outputPath, patchPath, {
maxInputBytes: 64 * 1024 * 1024,
maxOutputBytes: 128 * 1024 * 1024,
});
const off = job.onProgress(({ phase, progress }) =>
renderProgress(phase, progress)
);
cancelButton.onPress = () => job.cancel();
await job.result.finally(off);
原生 C 核心 · WebAssembly Worker
二进制差量。
运行于 React Native
各端。
在 iOS、Android 与 React Native Web 上创建和应用紧凑二进制补丁;共用一种兼容格式与类型化 API。
- iOS · ObjC++
- Android · JNI
- Web · WASM
- 新架构
npm i react-native-bs-diff-patch
import { diffBytes, patchBytes } from 'react-native-bs-diff-patch';
const delta = await diffBytes(oldBytes, newBytes);
const restored = await patchBytes(oldBytes, delta);
体验真实实现
补丁实验场
同一套控制,明确的契约
原生端支持进度与取消,Web 使用 AbortSignal。
上方 Playground 执行的是浏览器 API。Android 和 iOS 应用中请使用对应的 基于路径的 job facade。
const controller = new AbortController();
const options = {
signal: controller.signal,
maxInputBytes: 64 * 1024 * 1024,
maxOutputBytes: 128 * 1024 * 1024,
};
cancelButton.onclick = () => controller.abort();
const delta = await diffBytes(oldBytes, newBytes, options);
ECANCELLED 原生端已取消
EINPUT_TOO_LARGE 原生端输入限制
EOUTPUT_TOO_LARGE 原生端输出限制
EABORTED Web 已取消
ERESOURCE Web 大小限制
EUNSUPPORTED 平台 API 不匹配
底层机制
一种格式。
三种运行时。
-
01
类型化 API
原生端使用路径,Web 使用二进制输入。
-
02
Worker 边界
串行原生队列,或隔离的模块 Worker。
-
03
共享 C 核心
所有平台使用相同的 bsdiff 与 bzip2 源码。
-
04
紧凑差量
兼容的 `ENDSLEY/BSDIFF43` 补丁。
已适配新架构
按版本适配的 Android package 与生成的 iOS TurboModule 注册。
默认使用 Web Worker
WASM 任务运行在页面线程之外;多次调用复用已初始化的 运行时,取消只影响当前操作。
跨平台补丁
可在一个受支持运行时生成补丁,并在另一个运行时应用。
发布级检查
原生兼容矩阵、设备断言、浏览器往返测试、Metro 与 安装包门禁。
真实编译与测量
兼容性承诺的验证依据。
发布门禁会编译真实的 React Native 产物,使用同一份 golden patch 覆盖原生端与 Web,模糊测试畸形补丁,并在 干净消费者工程中安装打包后的 npm 安装包。
TurboReactPackage boundary
BaseReactPackage boundary
当前矩阵基准
459 KiB 解压后 · 58 个文件
WebAssembly 参考数据
可复现,而非纸面数据。
Apple M3 Pro · Node 26.5.0 · 每 4 KiB 仅变更一个字节。每次运行都会 验证还原后的字节。请将这些数据视为开发阶段的 基线,而非浏览器性能承诺。
性能数据方法 →| 输入 | Diff | Patch | Delta |
|---|---|---|---|
| 1 MiB | 158.5 ms | 7.7 ms | 110 B |
| 10 MiB | 4,243.6 ms | 57.5 ms | 118 B |
| 50 MiB | 30,697.5 ms | 285.2 ms | 203 B |
文档
从第一个补丁到生产边界。
了解各平台安装方式,查阅每个 API 与错误码,并在发布前 理解内存、打包器与兼容性约束, 完成上线准备。