承接前面几篇(261 篇 HTTP 缓存、262 篇网络请求合并、288 篇 WebView 优化),这一篇把网络侧的能力合起来做一次整体审视:在弱网与离线条件下,App 应该表现得多好,以及用什么手段达到。这一题的难点在于:弱网不是异常状态,而是常态——设计前提就该是"网络随时可能失败"。
结论先行:弱网体验的目标不是"让请求成功",而是"让失败可感知、可恢复、代价可控"。三个手段按优先级是:缓存(不发起请求)→ 请求合并与降级(少发请求)→ 重试(再发请求)。重试放最后,因为它最消耗资源。
弱网的三个层次
| 层次 | 表现 | 用户感知 |
|---|---|---|
| 慢但通 | 延迟高(>1s),无失败 | 转圈很久 |
| 抖动 | 部分请求失败,重试后成功 | 界面跳动、重复加载 |
| 断网 | 请求直接失败 | 空白页、错误提示 |
"慢但通"这一层最容易被忽视,却是用户抱怨最多的。请求没失败,但用户等了很久——这时候用"失败提示"解决不了问题,需要用缓存或降级来提前给内容。