EAS Update 的 bundle diff
编辑页面
使你的项目在可用时接受 bundle diff。
For the complete documentation index, see llms.txt. Use this Use this file to discover all available pages.
启用 bundle diffing 后,EAS Update 会在可能的情况下交付一个 bundle 补丁。当你发布一个新的更新时,EAS Update 可以生成一个更小的文件,其中只包含设备上当前运行的 bundle 与新 bundle 之间的差异。这通常会显著减少更新下载大小。
前提条件
你的应用必须使用 Expo SDK 55 或更高版本。
启用 bundle diffing
在项目的 app config 中,将 updates.enableBsdiffPatchSupport 设置为 true:
app.json
{ "expo": { "updates": { "enableBsdiffPatchSupport": true } } }
验证是否正在提供 bundle diff
Expo 网站
你可以在 Update Details 页面上确认是否正在提供 bundle diff。打开你发布的 Update Group,然后选择你想检查的平台。
Updates API
你可以通过使用 Updates.readLogEntriesAsync() 检查更新日志来确认是否正在提供 bundle diff。如果你的应用收到了补丁,你会看到一条表示补丁已成功应用的记录(例如,“patch successfully applied”)。
补丁生成与分发
EAS Update 使用 bsdiff 算法 来生成 bundle 补丁。
只有在以下情况下才会提供补丁:
- 它明显小于完整 bundle。 如果不是,EAS Update 会改为提供完整 bundle。
- 它可以高效计算。 如果生成补丁消耗的资源过多,EAS Update 会改为提供完整 bundle。
当前限制
- 嵌入式 bundle 不符合条件。 嵌入式 bundle 绝不会被用作打补丁的基础。设备必须已经在运行某个已发布的更新,才能接收补丁。
- 并非每一对可能的更新都会立即有补丁。 当一个更新发布后,EAS Update 只会针对该 channel 上第二新的更新预计算一个补丁。如果设备在运行另一个已发布更新时请求新更新,最初会收到完整 bundle。随后会按需为该特定基础更新生成补丁,并向未来类似请求提供。
- 补丁会在发布后不久生成。 从发布一个更新到补丁准备就绪之间可能需要几分钟。在这段时间内,设备可能会收到完整 bundle。