客户端(Android/iOS)网络质量优化实践指南!

293 阅读2分钟

背景

当你的APP打开慢、图片加载不出、更有甚者提示网络超时等情况,那么想要提供使用起来更快更稳更好的APP,网络质量优化是必不可少的一环。

实践方案

WeChat81a30129465e351f991c922bac921c43.jpg

一、客户端测速打点上报

方案:

  • 业务自身网络请求埋点上报(rpt、dns、tcp、ssl、fpt等耗时)
  • 域名测速埋点上报(多域名配置,也可添加竞品做数据对比看板)
  • 域名测速埋点上报时机(APP冷热启动、网络状态切换、业务出现失败等情况)

方案流程图:

网络测速流程图.png

基于客户端日志埋点的实践收益

  1. 客户端测速
  2. 网络请求耗时失败率监控
  3. 客户端链路容灾
  4. 客户端网络在线诊断

域名测速可能遇到的问题和解决方案

  • 问题:客户端测速如果域名特别多,可能会导致速度变慢以及浪费带宽资源。
  • 解决方法:域名虽不同但链路相同,测速一组可覆盖所有线路的域名即可。

二、客户端CDN容灾(前置条件:接入多家CDN厂商)

端上方案流程图:

端上CDN容灾方案.png

CDN架构:

WeChatcb83afee411ac59cc53673994c03448e.jpg

三、客户端多链路容灾

  • 收益:用户网络或者APP服务有问题,客户端可自动选择可访问域名自动恢复服务
  • 衡量指标:容灾成功率

方案流程图:

网络容灾方案流程图.png

域名切换条件示例(可根据自身业务修改):

  • 如:主域名小于1s或都容灾域名和当前域名都大于2s不切换,1s~2s之间差距小于200ms不切换

四、客户端QUIC接入

  • QUIC 虽然是基于UDP实现,但功能上等同于 TCP + TLS + HTTP/2
图片 1.png

端上方案(Android/iOS):

  • QUIC需要客户端和服务端都支持,客户端可使用三方Cronet/libcur网络库,iOS(14.5以上)系统网络库本来就支持
  • 衡量指标:耗时、失败率等

WeChat899dc7e462bfbc5c825d0e3eed1030c7.jpg

HTTP/3 QUIC 在线测试

WeChat0f10626926801e90cb384a9d1824567b.jpg

五、HTTPDNS接入

  • 收益:1、使用IP访问可避免DNS劫持 2、使用预先解析功能可提高用户的DNS解析时间
  • 衡量指标:劫持率、耗时、失败率等

方案流程图:

IP直链流程图.png

相关资料

  1. cronet-transport-for-okhttp
  2. OkHttp Brotli Implementation
  3. HTTP/3 QUIC 在线测试