background image
App 的网络测试中性能优化方案
优化 DNS 解析和缓存
由于我们的 App 网络服务主要基于 TCP 连接,为了将 DNS 时间降至最低,我们
内置了 Server IP 列表,该列表可以在 App 启动服务中下发更新。App 启动后的
首次网络服务会从 Server IP 列表中取一个 IP 地址进行 TCP 连接,同时 DNS 解析
会并行进行,DNS 成功后,会返回最适合用户网络的 Server IP,那么这个 Server
IP 会被加入到 Server IP 列表中被优先使用。
网络质量检测
针对网络连接和读写操作的超时时间,我们提出了网络质量检测机制。目前做到
的是根据用户是在 2G/3G/4G/Wi-Fi 的网络环境来设置不同的超时参数,以及网
络服务的并发数量。2G/3G/4G 网络环境对并发 TCP 连接的数量是有限制的(2G
网络下运营商经常只能允许单个 Host 一个 TCP 连接),因此网络服务重要参数能
够根据网络质量状况来动态设定对性能和体验都非常重要。
提供网络服务优先级和依赖机制
由于网络对并发 TCP 连接的限制,就需要能够控制不必要的网络服务数量,因此
我们在通讯模块中加入了网络服务优先级和依赖机制。发送一个网络服务,可以
设置它的优先级,高优先级的服务优先使用长连接, 低优先级的就是用短连接。
长连接由于是从长连接池中取到的 TCP 连接,因此节省了 TCP 连接时间。
网络服务依赖机制是指可以设置数个服务的依赖关系,即主从服务。假设一个
App 页面要发多个服务,主服务成功的情况下,才去发子服务,如果主服务失败
了,自服务就无需再关心成功或者失败,会直接被取消。如果主服务成功了,那
么子服务就会自动触发。
提供网络服务重发机制
移动网络不稳定,如果一次网络服务失败,就立刻反馈给用户你失败了,体验并
不友好。我们提供了网络服务重发机制,即当网络服务在连接失败、写 Request
失败、读 Response 失败时自动重发服务;长连接失败时就用短连接来做重发补
偿,短连接服务失败时当然还是用短连接来补偿。这种机制增加了用户体验到的
服务成功概率。
减少数据传输量
我们优化了 TCP 服务 Payload 数据的格式和序列化/反序列化算法,从自定义格式
转换到了 Protocol Buffer 数据格式,效果非常明显。序列化/反序列算法也做了调
整,如果大家使用 JSON 数据格式,选用一个高效的反序列化算法,针对真实业