跳过主要内容

JavaScript应用健康检查:2026年指南

一个实用的应用健康检查指南,适用于Capacitor和Electron应用。运行时检查、更新、遥测、安全性、CI脚本和回滚步骤。

JavaScript应用健康检查:2026年指南

一项JavaScript更新在周五下午发布。应用程序打开,身份验证看起来正常,崩溃计数器保持平稳。然后,某些设备上的检出开始失败,而App Store和Play Console控制台的仪表板则落后太远,无法支持有把握地回滚决定。

那一事件暴露了对待应用程序更新的弱点 应用健康检查 作为一个仪表盘审查。健康的发布不仅仅是避免崩溃。它必须快速启动,渲染重要屏幕,完成关键旅程,到达正确的后端版本,并为on-call工程师提供足够的遥测,以便在延迟存储数据赶上之前采取行动。

目录

周五下午发生的事件,启动了这个剧本

通常第一个报告听起来很模糊:‘某些用户的检出功能已损坏。’支持团队有几张截图,工程团队有最近的捆绑包,商店控制台显示没有明显的回归。团队比较日志,重现流程在一个设备上,并发现失败依赖于更新状态、后端响应形状和较旧的本机外壳。

这不是调试会话。这是一个发布系统故障。

大多数 KPI 的商店仪表板仍然落后大约 24 小时,崩溃和 ANR 率的商店仪表板可能需要多达 72 小时,根据商店遥测延迟参考。那些仪表板仍然有用来进行趋势分析,但它们太慢了,不能作为唯一的回滚触发器来处理实时事件。

实用规则: 商店控制台告诉你发生了什么事后报告延迟。你的更新器和运行时遥测必须告诉你当前发布正在做什么。

A mobile app健康检查可以为团队提供三层证据:

  • 运行时质量: 崩溃、ANR、启动行为、屏幕渲染、错误和资源压力。
  • 用户结果: 登录完成、支付确认、其他用户认可的成功或失败的旅程。
  • 发布交付: 采用率、失败的安装、阻塞的设备、渠道行为和回滚状态。

每个层次都需要一个相应的运营杠杆。一个崩溃回归可能需要停止发布或回滚JavaScript包。一个失败的后端依赖需要服务修复,而不是应用回滚。一个破坏的更新路径需要渠道控制和设备级别的调查。

实践的回应应该从时间线开始,而不是责备。记录包裹发布的时间、哪个渠道接收了它、第一个失败的旅程出现的时间以及受影响的版本。然后使用 移动团队的事件响应指南 来分配负责人、保存证据并决定最安全的行动是暂停渠道、回滚还是原生发布。

这个过程的目的很简单: 降低静默故障并缩短坏信号与安全动作之间的距离. 根据该结果设计健康检查的其余部分

定义预测用户痛苦的健康指标

周五发布可能会显示绿色的商店仪表板,而用户可能无法登录、完成结账或接收更新。定义“健康”状态之前的意外事件,使用与每个信号相关的释放、CI或回滚决策来描述。存储的遥测数据有24到72小时的盲点,因此设备侧事件必须覆盖平台报告可靠之前的时间段

第一层描述用户是否可以完成有意义的工作:

  1. 无故障的会话 使用广泛引用的参考点,关于 99.93%的iOS和99.81%的Android,记录在 应用健康框架参考。将这些值视为审查基准,而不是普遍保证。根据发布、操作系统、设备家族和扩散小组将其分段。发布特定下降应暂停扩散或触发捆绑回滚
  2. ANR行为 一个冻结的界面可能会阻止登录、结账或支付确认而不产生崩溃。根据版本和流程分组,检查可能阻塞主线程的WebView工作、插件调用和原生桥接操作。修复可能位于code或CI中,而滚动部署的暂停按钮则是调节器。
  3. 启动和屏幕就绪。 测量到交互的时间,而不是仅仅是进程启动。一个快速打开的壳,但首屏空白仍然是不健康的。设置CI阈值来监测回归,并在失败时检查设备日志。
  4. 关键旅程成功。 登录、搜索、结账、支付、同步和注销需要明确的成功事件。HTTP响应并不证明用户已经确认。一个下降应该在任何人选择回滚之前识别受影响的流程。

用于测量和预测用户痛点的四个关键应用健康指标的列表。

将发布门槛与诊断信号分开。

发布门槛 通常包括无崩溃的会话、ANR、启动、身份验证和最高价值用户旅程。 诊断信号 包括内存压力、电池影响、存储增长、网络延迟、HTTP错误类别和WebView渲染。它们解释了失败并指导修复,但不应自动阻止每次部署。

以四个字段写出每个标准:

字段 示例
信号 完成checkout
分段 发布、平台、区域、设备家族
查看规则 与上一个稳定队列进行比较
操作 暂停发布、检查日志或回滚捆绑包

使用此 应用程序健康监控指南 作为一个起点,然后将每个信号分配给一个人或轮班,并记录可以改变结果的杠杆。保持原始信号可见。一个单独的分数可能会隐藏严重的支付失败在健康的背景活动之后。

一个健康的发布是稳定的、响应的、可观察的,并且能够完成用户所重视的任务。它还与一个on-call工程师可以采取的行动相连。

运行时检查你可以在本周内连接起来

在用户体验工作的地方进行应用程序的仪表盘,而不仅仅是在过程报告生命的地方。一个Capacitor应用程序可以捕获JavaScript异常、原生崩溃、桥接失败、导航时间和旅程事件。一个Electron应用程序可以添加渲染进程失败、主进程错误、预载失败、窗口就绪和资源观察。

一个实际的应用程序健康检查测量 稳定性和性能一起包括崩溃率、ANR率、启动时间、屏幕渲染时间、错误率和资源利用率。该 移动性能健康检查指南 也强调了根据发布版本和滚动分组。没有该分组,一个健康的旧版本可能会隐藏一个失败的新版本。

从改变决策的信号开始

捕获一个会话标识符、应用程序版本、原生壳版本、平台、设备类别、地区和滚动频道与每个健康事件。避免将个人数据放入这些字段。上下文让on-call工程师在打开调试器之前回答“谁受影响?”

对于每个信号,定义目标和响应:

  • 崩溃: 与上述平台benchmark进行比较。发布特定下降应该暂停受影响的群体,同时工程师确定堆栈或插件边界。
  • ANR: 按屏幕和操作分组。重复的冻结在桥接调用期间指向不同于数据库迁移的缓解措施。
  • 启动时间: 标记第一个可用交互屏幕的点。慢速结果可能来自过大的Web资产、同步初始化、证书检查或在导航之前运行的插件。
  • 屏幕渲染: 在checkout、登录、搜索等高价值屏幕周围发出开始和就绪事件。缺失的就绪事件通常会揭示一个静默失败,这种失败不会通过崩溃报告显示。
  • 错误率: 记录标准化错误类别、状态家族和操作名称。不要记录令牌、支付细节或完整的请求体。
  • 资源利用率: 监控内存、存储、电池行为和网络故障作为证据。资源趋势在与崩溃或ANR相关时最为重要。

下表故意保守。若简报提供基准值,则会包含。其他频段应从自己的稳定基准值中选择,而不是作为普遍限值虚构。

信号 单位 健康频段 为什么它重要
崩溃免费会话率 百分比 99.93%的iOS、99.81%的Android作为参考点 检测到意外终止的会话
ANR率 事件或会话 无稳定分支的回归问题 识别冻结的接口
启动时间 毫秒或秒 稳定与上一个版本 显示应用程序是否迅速可用
屏幕渲染时间 毫秒或秒 关键屏幕稳定 揭示缓慢或不完整的旅程
错误率 每个操作事件 稳定性 连接后端或客户端错误到用户工作
资源利用率 内存、存储、电池、网络测量 没有未解释的发布特定恶化 帮助解释冻结、退出和设备降级

用动作来仪器,而不是仅仅用警报

一个崩溃事件应该链接到一个发布和一个回滚路径。一个检出失败应该链接到失败的步骤和响应类。一个启动回归应该链接到消耗时间的初始化阶段。

对于Capacitor团队,保持仪器接近JavaScript和本机边界,然后在物理设备上验证它。对于Electron,收集单独的渲染器和主进程上下文,因为一个进程可以失败而另一个进程看起来健康。然后 Capacitor性能监控设置 可以帮助团队将这些信号连接到发布级别的调查。

健康端点和CI检查,能够在用户之前捕捉问题

A running process isn’t proof that the application is ready. Your backend can accept a TCP connection while its database pool is exhausted, its cache is unavailable, or a critical external service is timing out.

使用一个专门的、未经身份验证的就绪端点,如 /healthz. 这个端点应该返回 200 当应用程序和关键依赖项健康时,503 当它们不健康时,遵循 健康端点实现指南. 这些建议也建议将检查时间限制在 500 ms内,检查数据库、缓存和关键外部服务,并为每个依赖项设置超时。

使响应有用并有界限

返回一个小的、稳定的响应形状。包括一个总体状态和可读的组件状态,但永远不要暴露凭据、堆栈跟踪、内部主机名或敏感配置。就绪检查应该在一个所需依赖项不可用时失败,而可选服务应该在应用程序仍然可以提供其核心功能时保持诊断。

验证状态code之外的更多内容:

  • 确认响应是有效的 JSON 格式,包含预期的字段。
  • 检查端点是否正确访问了预期的后端版本。
  • 测试来自相关区域和网络路由的路径。
  • 设置独立超时,以便一个慢速依赖项不能阻塞整个探测。
  • 在基础设施需要区分进程失败和依赖项失败的情况下,保持独立性和就绪性。

从用户的角度来看,200 响应的 JSON 格式错误或证书过期并不是一个健康的应用。

一张图表,展示了持续集成质量门控的五个阶段,包括构建、健康测试、分析、集成和部署。

将检查放置在发布路径中。

在 CI 中,使用预览环境运行端点。然后,执行应用程序中使用的 API 操作,接着是对模拟器或设备农场的少量关键 UI 流程。构建应该在环境无法满足生产所需的就绪性契约时失败。

一个 GitHub Actions 任务可以保持简单:

  • 构建 Web 包和本机 shell。
  • 将其部署到隔离环境中。
  • Poll /healthz with a timeout.
  • 状态验证和响应形状
  • 登录和一个收入关键的旅程的集成测试
  • 只有所有门控通过后才发布

不要让端点执行写入或破坏性迁移。让它重复调用,低成本,安全。端点是一个发布门控,不是一个第二个应用

更新、更新器和存储和设备之间的盲点

一个发布可以从技术上是正确的,但仍然会在设备不接收它、安装它或报告其状态时失败。因此,更新器是应用健康的一部分,而不是一个交付细节

考虑一个改变结帐验证的JavaScript包。商店安装的原生壳仍然可用,但更新通道将新的Web资产分发给一部分设备。一些设备安装成功。其他设备无法通过验证或被阻塞,因为它们的原生版本不兼容。商店仪表板不会立即显示这些状态之间的区别

报告差距很重要。商店仪表板可能会滞后大约 小时,故障和ANR率可能会滞后大约,如所述 移动发布可见性参考. 近实时更新者遥测填充了间隔,显示哪些设备接收了一个捆绑包,哪些安装失败,哪些回滚,哪些从未检查过。

截图来自 https://capgo.app

将频道视为安全边界

使用独立的beta、staging和生产频道,具有明确的兼容性规则。生产发布 shouldn’t 包含一个缺乏必需插件或配置能力的本机 shell。通过频道、发布、平台和报告的应用程序版本跟踪采用和失败。

操作杠杆是具体的:

  • 防护栏: 防止不兼容的捆绑包到达不受支持的 shell。
  • 受众发布: 从控制的队伍开始,然后在运行时和旅程信号保持健康时扩展。
  • 差异性交付: 仅发送支持更新的更新者支持的更改资产,减少更新中涉及的工作和数据量。
  • 回滚保护: 安装或启动验证失败时,恢复到已知的良好包。
  • 版本比较: 比较新一代的崩溃、启动、WebView 和旅程健康状况与稳定控制组的健康状况。

Capgo 是 Electron 和 Capacitor 团队需要签名的 JavaScript、CSS、配置和资产更新、目标频道、设备日志、采用率和失败指标以及回滚控制的选项。 Capacitor 的实时更新概述 描述了更新器模型以及团队如何将交付状态与发布决策联系起来。

重要原则不是供应商。它是反馈循环。一次发布应该产生证据,而证据应该控制下一代是否接收包。

JavaScript 应用程序的安全性、权限和遥测卫生

一个应用程序可能看起来稳定,但仍然携带不可接受的风险,通过权限、更新信任或遥测。对于 Electron 和 Capacitor 发布,审查插件和嵌入式 Web 内容作为攻击面的一部分。

开始这些检查:

  • 插件白名单: 移除未使用的插件,审查其本地功能,并验证联系人、文件、位置、摄像头、麦克风或外部意图的访问权限。
  • 深度链接审查: 测试 URL 方案和 Android 意图。未受信任的链接不应打开特权流或绕过身份验证。
  • 捆绑验证: 在应用更新之前验证签名,拒绝不完整或意外的负载,并保留最后一次已知良好的捆绑包以便恢复。
  • 令牌存储: 将凭据保留在平台安全存储中,而不是 JavaScript 可访问的文件或未受限制的本地存储中。
  • Electron 边界: 将特权 API 保留在主进程中,暴露狭窄的预载接口,并防止任意远程内容到达本机 API。

遥测需要匹配的控制。记录事件名称、发布标识符、操作类别和失败类别。除非经过文档安全审查许可,否则排除令牌、支付信息、用户输入的完整文本、精确位置和原始响应体。

根据操作需求设置保留期,并根据角色限制访问。提供删除或抹除路径,其中适用隐私要求。健康事件应隔离发布回归而不成为用户行为的第二个数据库。

存储仪表板不能立即提供整个图像。App Store 和 Play Console 遥测可能会留下 24-72 小时的报告间隙,因此将商店信号与更新器状态、发布标识符和设备侧失败事件配对。 Google Play Console 报告文档 解释了报告上下文团队应考虑的延迟结果。

在发布前确认每个新权限都有明确的目的,每个记录的字段都有所有者,更新器拒绝不受信任或不兼容的捆绑包。一个模糊的界限是一个发布阻塞。 当信号暴露了信任或隐私问题时,首先停止交付,然后修复导致它的发布或配置。

当健康信号触发时的修复和回滚

只有当它导致安全行动时,健康信号才有意义。 写下决策树在事件发生前,团队还能清晰地思考。

  • 在一个发布或一致体中出现崩溃或ANR回归: 暂停该频道,比较受影响的版本与稳定一致体,若原生壳仍然兼容,则回滚捆绑包。
  • 健康端点返回503: 停止应用推送并修复失败的关键依赖项。 重启服务可能有所帮助,但不要用应用回滚来掩盖后端故障。
  • 关键旅程失败而崩溃保持正常: 禁用受影响的功能或频道,检查响应形状和配置,然后发货修正的捆绑包。
  • 更新安装或启动验证失败: 保持上一个捆绑包活动,标记发布不健康,并调查签名、兼容性或资产完整性。
  • 原生权限或插件行为有问题: 可能需要更大的修复。准备一个商店发布,修复需要原生code、清单更改、特权或新权限声明。

The Capacitor 实时更新回滚策略 应该是运行手册的一部分,而不是在危机期间发现的页面。自动保护适合于更新器可以可靠检测安装或启动失败的情况。然而,完整的事件仍然需要,当用户可以完成启动,但在重要旅程中失败时。

一张标题为《修复和回滚玩法指南》的图表,展示了针对软件性能问题的三个不同的自动响应。

商业压力明显地要求正式化这个流程。移动应用测试服务市场预计将在2025年达到 $7.70亿美元 并将在2031年达到 $19.84亿美元,年增长率为17.09%。同时,苹果应用商店拒绝率大约是 2024年24.9%根据 市场和商店评估数据. 这些数字并不能取代工程判断,但它们强调了将质量检查视为可选项的成本。

每次事故发生后,保存时间线,找出最早的可操作信号,记录哪个杠杆发挥了作用,并将缺失的检查转化为发布门控。成熟的应用程序健康检查不仅仅是报告失败。它使下一次失败更容易检测、包含和逆转。


Capgo为Capacitor和Electron团队提供了实时更新、目标频道、发布和失败遥测、设备日志和回滚保护,使实时健康信号可以驱动发布决策。访问 Capgo 连接您的更新管道与本手册中描述的应用程序健康检查和修复控制。

Live updates for Capacitor apps

When a web-layer bug is live, ship the fix through Capgo instead of waiting days for app store approval. Users get the update in the background while native changes stay in the normal review path.

当 web 层面的 bug 活跃时,通过 __CAPGO_KEEP_0__ 将修复推送给用户,而不是等待几天的 app 商店审批。用户在后台接收更新,而原生变化仍然在正常审批路径中。

人工支持

立即开始

Capgo gives you the best insights you need to create a truly professional mobile app.