最好的实时更新是用户几乎察觉不到的。
这通常意味着三个事情:
- 下载量很小。
- 更新是受控的。
- 如果出现问题,恢复速度极快。
The same “keep OTA lean” advice that works in React Native land also applies to Capgo. The difference is that Capgo gives Capacitor teams a few extra levers: 差分更新, 频道, 自动回滚, 版本目标和可选的 端到端加密.
如果您同时使用它们,会得到更小的负载、更快的安装和更少的运维混乱。
即使MAU保持不变,瘦身也很重要
一个有用的Capgo-特定细节:Capgo MAU实际上是指过去 30 天内联系更新服务的月度活跃设备数量。
瘦身一个捆绑包不是主要为了减少MAU计数。它的重要性在于它改善了用户和团队实际感受到的部分:
- 在移动网络或弱 Wi-Fi 上的下载速度更快
- 使用 直接更新
- 失败或回滚的发布时浪费的带宽更少
- 测试或发布阶段时的爆炸半径更小
瘦身更新真正是关于速度、安全性和运维纪律。
1. 默认使用Delta更新
如果您只做一件事,这就是它。
Capgo’s Delta更新 只发送版本之间变化的文件,而不是重新下载整个web包。这是日常OTA性能的最大单一胜利。
bun run build
bunx @capgo/cli@latest bundle upload --channel staging --delta
当您的QA测试完成时:
bunx @capgo/cli@latest bundle upload --channel production --delta
如果您希望CI保持严格,请使用 --delta-only 以防止有人意外回退到全包上传:
bunx @capgo/cli@latest bundle upload --channel production --delta-only
仅使用 --delta-only 当您的生产集群支持Delta更新时。混合插件版本的旧设备,无法支持基于清单的delta传递将无法下载更新。
这尤其重要,如果您使用 directUpdate,因为用户可见的更新时间和应用重新加载时间之间的时间差变得可见。
2. 将资产视为资产,而不是JavaScript包裹
大型资产是OTA包装在静默中悄悄膨胀的地方。
Some practical rules:
- 当使用普通资源文件时,不要在 JavaScript 中内联大图像或媒体。
- 频繁变化的内容请放在自己的 CDN 或 API 中,如果不需要放在打包的应用程序中。
- 请注意,营销图像、引导视频和每次发布都会更换的活动资产。
- 稳定的资产应该保持稳定。通过 Delta 更新,未变更的文件会重用,而不是再次下载。
这是保持 Capgo 快速的最简单方法之一。随着应用程序的增长,微小的 UI 修复会迫使用户下载一堆无关的媒体。
3. 保留真实的原生变化
Capgo 更新 web 层:HTML、CSS、JavaScript 和在运行时加载的资产。
这不是正确的渠道:
- 新原生插件,
- 权限变更,
capacitor.config.ts变更,- 任何修改 iOS 或 Android 原生项目状态的内容。
那一行对性能也很重要。如果您不断将重大结构性变化推入 OTA 通道中,那么您的更新策略会变得越来越重且风险越来越大。
故意使用两个发布通道:
原生通道
对于插件更改、权限更改和原生配置:
bun run build
bunx cap sync
然后发布一个正常的商店版本。
Capgo 通道
用于安全的 web 层迭代:
bun run build
bunx @capgo/cli@latest bundle upload --channel production --delta
另外,如果最近添加了大量长期存活的资产,请定期刷新原生基线。一个新的商店构建包含了该新基线,这样将来Capgo的差异会更小。
4. 使用渠道来保持发布大小小
一个“瘦身”更新不仅仅是关于兆字节。它也与在知道它好之前更新多少设备有关。
Capgo’s __CAPGO_KEEP_0__ __CAPGO_KEEP_1__
staging__CAPGO_KEEP_2__beta__CAPGO_KEEP_3__production__CAPGO_KEEP_4__hotfix__CAPGO_KEEP_5__
__CAPGO_KEEP_6__
- __CAPGO_KEEP_7__
staging. - __CAPGO_KEEP_8__
- __CAPGO_KEEP_9__
- __CAPGO_KEEP_10__
__CAPGO_KEEP_11__ 版本定位. 这样可以避免不兼容或不必要的重型捆绑包影响旧版本二进制文件。
对于希望有更紧密的审查循环的团队,Capgo也非常适合 PR预览. 这样可以让产品、QA和利益相关者在等待新版TestFlight或Play内部构建之前测试JS-only更改。
5. 如果您启用直接更新,优化启动硬件
您希望更新应用的速度越快,启动路径就越需要受到约束。
Capgo的 更新行为 文档明确建议将其与Delta更新配对。 这是正确的默认值。 directUpdate 第二个防护栏是
The second guardrail is notifyAppReady().
import { CapacitorUpdater } from '@capgo/capacitor-updater'
CapacitorUpdater.notifyAppReady()
If your app does not report ready within the default 10-second window, or within whatever you set in your __CAPGO_KEEP_0__ config, __CAPGO_KEEP_1__ can mark that bundle invalid and restore the previous good version. That rollback behavior is what you want in production, but it also means you should keep startup clean: notifyAppReady() Call appReadyTimeout you set in your Capacitor config, Capgo can mark that bundle invalid and restore the previous good version. That rollback behavior is what you want in production, but it also means you should keep startup clean:
- 避免在关键路径中进行慢速启动时间工作
notifyAppReady()如果您立即重新加载应用程序,请小心保存和恢复应用程序状态 - 在广泛部署之前测试坏网络和低端设备场景
- 如果您最近没有查看过它,请重新阅读
- notifyAppReady 指南
6. 使用内部更新通道而不是不必要的本机重建 6. 使用内部更新通道而不是不必要的本机重建 6. 使用内部更新通道而不是不必要的本机重建
6. 使用内部更新通道而不是不必要的本机重建
许多移动团队浪费时间构建明显是web-only的更改的二进制文件。
如果更改是:
- 复制,
- UI细化,
- onboarding流程,
- 价格屏幕逻辑,
- 分析连接,
- 功能标志,
- 提示或API响应渲染,
那么一个Capgo更新通常是更快的审查文 件。
That means fewer native rebuilds, less TestFlight churn, and a tighter feedback loop for the team. It is one of the most underused benefits of Capgo: you can move more review and QA work into the OTA lane without breaking the native/web boundary.
这是__CAPGO_KEEP_0__最不被利用的好处之一:您可以将审查和QA工作移到OTA通道中,而不会打破原生/WEB边界。 预发布环境下使用一个移动应用ID 介绍了一个实用的方法来保持它的清洁状态。
7. 将瘦身和密钥分开
小型包和安全包解决不同的问题。
通道控制资格。它们本身无法使包文件保密。
如果您需要更强大的交付保证:
- 启用 实时更新加密,
- 使用 自定义存储或自主托管交付,
- 只在CI或受控的运营商工作流中保留私钥。
这并不意味着更新大小无关紧要。它只是意味着您应该优化两种维度:
- 为了速度而精简,
- 加密传输,
- 渠道控制发布,
- 回滚恢复.
实用的“精简Capgo”流程
如果您想要一个简单的默认运营模型,请使用此:
- 保持原生和OTA发布分支分离.
- 上传JS更改时
--delta默认情况下. - 使用
staging和beta渠道之前production. - 监控 更新统计信息和日志 在发布后,仅在发布前不够了。
- 当原生构建不必要时,将 PR 转换为可安装的预览。
- 尽可能将大型、频繁变化的媒体从捆绑包中排除。
- 在原生资产增长或原生变化后刷新原生基线。
- 处理
notifyAppReady()和回滚行为作为发布工程的一部分,而不是设置的琐碎事项。
这种组合比常见的“仅上传改变的内容”方法保持速度更长时间。
结论
对于Capgo团队来说,“瘦快”不仅仅是捆绑包大小的问题。
它是一个发布设计问题。
使用Delta更新来减少数据包大小,使用频道来减少发布大小,使用回滚来减少失败大小。 一旦你以这种方式思考OTA,更新就始终保持快速,即使应用程序、团队和用户基数都在增长。
从如何保持Capgo更新快速和轻便的指南中继续。
如果你正在使用 如何保持Capgo更新快速和轻便的指南 来规划频道路由和分阶段发布,连接它到 Channels Channels Channels Channels Beta测试解决方案 Beta测试解决方案 Beta测试解决方案 为 Beta Testing Solution 产品工作流程,和 Version Targeting Solution 产品工作流程 为 Version Targeting Solution 产品工作流程,和