弱网是常态而非异常
别名: 弱网 · 离线优先 · flaky network · offline-first
概念解释
手机无线电在电梯、地铁、地下车库、漫游切换和拥塞小区里会反复掉到高延迟、高丢包或完全断开。弱网是移动使用的底色,不是「偶发错误」。把一次请求失败画成全屏大红错、要求人立刻重试,等于把常态当成事故。离线优先(offline-first)的意思是:本地已有的数据继续可操作,网络是同步通道而不是界面能不能用的前提。这条只谈连接质量作为默认环境,不谈大流量该不该先问一声,也不谈后台耗电怎么被系统点名。
机制
蜂窝链路的往返时延和丢包率随位置连续变化,应用层超时往往比人的一次注视更长。请求在「已发出、未确认」时,界面如果只认成功或失败两个终态,中间那几十秒会被显示成卡住或报错。人在移动中不会停下来等无线电恢复:进站、出站、进出建筑是连续动作,失败重试如果要重新打开页面,刚才的意图就被打断。把弱网当异常,还会迫使产品只在实验室 Wi-Fi 下验收——那里延迟稳定、几乎不丢包,所有「需要网络才能点」的按钮都会通过,到了车厢里才集体失败。
怎么研究
在真实移动路径上记请求,而不是在办公室固定热点里跑脚本。
自变量:链路状态(实验室 Wi-Fi、拥塞蜂窝、反复通断)、失败后的界面(全屏错误 / 本地可继续)、是否自动排队。 因变量:任务完成率、重试次数、在无连接期间仍能完成的操作比例、主观「是不是坏了」。
实验室用网络条件器可以复现延迟和丢包,但复现不了「人同时在走路、进站、看通知」。现场日志要把失败与位置变化对齐,避免把服务器故障算进弱网。不要用平均成功率掩盖长尾:百分之一的请求若总发生在通勤高峰,对那批人就是每次都失败。
边界
强一致金融操作(余额查询后立刻转账)不能在未知链路下假装成功,乐观更新的范围到此为止。内容本身尚未到过设备(第一次打开的未缓存文章)无法凭空离线阅读,应说明「还没有可看的副本」而不是装成已加载。桌面以太网环境弱网频率低,把移动端的离线优先原样搬去,会引入用不上的队列和冲突界面。飞行模式是人主动切断,和弱网不同:前者应立即按离线处理,后者是质量在抖。
怎么落地
- 把读、点赞、草稿、已打开过的详情做成本地可完成,网络恢复后再同步;不要让一次超时清空当前页。
- 失败时留在原界面并标明「将在连接恢复后完成」,而不是用阻断式错误页把人赶回去。
- 验证:打开一篇已读过的内容,开飞行模式后完成点赞或加注,再恢复网络。操作应已留下,并在同步后出现在服务器侧;若飞行模式下页面被换成错误页,弱网仍被当成了异常。