博客内容使用 CC BY-NC-SA 3.0 授权发布。
Powered by Hexo & SimpleBlock .
移动网络性能优化要点
这里记录一些非协议的常见优化要点,网络协议的相关优化以后有空再写。
1. DNS
问题:
- 解析问题
- 运营商劫持、域名失效
- 解析慢、失败
- 单个 CDN 节点故障
方案:
解析问题
- HttpDNS
- 启动时下发服务器 IP 列表,类似 HttpDNS 的轮子
单点故障
- 根据权重选择合适的节点访问,即客户端应该获得服务端 IP 列表而不是单个 IP,部分现成的 HttpDNS 不支持 (比如 D+)
2. 网络链路优化
问题:
- 移动网络链路冗长,延迟高
- 网络切换后原 IP 可能无法联通或慢
方案:
- CDN
- 网络环境切换时及时刷新 DNS (HttpDNS) 缓存
3. 网络质量检测
问题:
- 2G/3G/4G/Wi-Fi 网络环境下延迟时间不一
- 同一网络环境中也可能有较大波动,比如在运行的地铁中
- 网络环境切换导致连接超时
方案:
- 根据用户的网络环境设置不同的超时参数(超时时间太短可能导致低速网络下无法建立连接,超时太长可能导致长时间等待)(携程)
- 根据请求状况动态调整请求策略 (Facebook)
- 客户端网络库检测网络环境切换状态,重新请求
4. 网络请求优先级和依赖机制
问题:
- 不同的网络环境下并发 TCP 连接的数量有限制 (待进一步确认,没找到可靠的消息来源)
- 短连接握手时间太长,都用短连接不合算
方案:
- 允许客户端在低速网络状况下一直保持长连接,减少 TCP 握手的时间
- 设定请求的优先级,重要的请求使用长连接,低优先级的用短连接,防止不重要的请求阻塞长连接队列
- 请求有依赖机制,当主请求失败后不再处理后续依赖的请求
5. 重试机制
问题:
- 快速失败给用户的体验不好
方案:
- 在幂等的请求(客户端决定)中可以启用重试策略
6. 减少数据传输量
问题:
- 数据包多传输时间长
解决方案:
- 启用 Gzip
- 采用更好的的序列化/反序列化方案
- 采用 WebP 图片格式
参考:
- iOS应用架构谈 网络层设计方案 http://casatwy.com/iosying-yong-jia-gou-tan-wang-luo-ceng-she-ji-fang-an.html
- R U Ok–客户端网络优化实践 http://2014.54chen.com/blog/2015/06/03/are-u-ok/
- App的移动网络优化 http://www.xexplorer.net/index.php/archives/60/
- 携程App的网络性能优化实践 http://www.infoq.com/cn/articles/how-ctrip-improves-app-networking-performance