原生 C 核心 · WebAssembly Worker

二进制差量。
运行于 React Native
各端。

在 iOS、Android 与 React Native Web 上创建和应用紧凑二进制补丁;共用一种兼容格式与类型化 API。

  • iOS · ObjC++
  • Android · JNI
  • Web · WASM
  • 新架构
npm i react-native-bs-diff-patch
quick-start.ts
import { diffBytes, patchBytes } from 'react-native-bs-diff-patch';

const delta = await diffBytes(oldBytes, newBytes);
const restored = await patchBytes(oldBytes, delta);
在线 / WASM

体验真实实现

补丁实验场

正在加载运行时
Worker 隔离运行 所有数据都保留在当前页面。
空闲0% 0%
补丁大小
节省传输
运行耗时
错误码
准备好生成并验证补丁 ENDSLEY / BSDIFF43

同一套控制,明确的契约

原生端支持进度与取消,Web 使用 AbortSignal。

上方 Playground 执行的是浏览器 API。Android 和 iOS 应用中请使用对应的 基于路径的 job facade。

Android / iOS原生任务
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);
React Native WebWorker + 信号
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 不匹配

底层机制

一种格式。
三种运行时。

  1. 01 类型化 API

    原生端使用路径,Web 使用二进制输入。

  2. 02 Worker 边界

    串行原生队列,或隔离的模块 Worker。

  3. 03 共享 C 核心

    所有平台使用相同的 bsdiff 与 bzip2 源码。

  4. 04 紧凑差量

    兼容的 `ENDSLEY/BSDIFF43` 补丁。

为集成而设计

原生性能。
清晰的平台契约。

高成本工作不会阻塞 React Native 模块队列或浏览器 主线程。遇到不支持的 API,库会明确拒绝,而不是 猜测文件系统行为。

阅读架构说明 →
01

已适配新架构

按版本适配的 Android package 与生成的 iOS TurboModule 注册。

02

默认使用 Web Worker

WASM 任务运行在页面线程之外;多次调用复用已初始化的 运行时,取消只影响当前操作。

03

跨平台补丁

可在一个受支持运行时生成补丁,并在另一个运行时应用。

04

发布级检查

原生兼容矩阵、设备断言、浏览器往返测试、Metro 与 安装包门禁。

真实编译与测量

兼容性承诺的验证依据。

发布门禁会编译真实的 React Native 产物,使用同一份 golden patch 覆盖原生端与 Web,模糊测试畸形补丁,并在 干净消费者工程中安装打包后的 npm 安装包。

RN 0.73.11 旧架构 + 新架构

TurboReactPackage boundary

RN 0.74.7 新架构

BaseReactPackage boundary

RN 0.86.0 新架构

当前矩阵基准

npm 安装包 125 KiB 压缩包

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 与错误码,并在发布前 理解内存、打包器与兼容性约束, 完成上线准备。