android app性能优化_百度地图 APP 网络性能优化实践

点击上方“开发者技术前线”,选择“星标”

13:21 在看 真爱

作者:obom | 责编 :可可

来源:百度地图技术团队

随着移动互联网的普及,无线网络的性能优化一直是手机产品 APP 性能优化的 重要课题之一,面对移动无线网络的复杂环境,在 APP 开发时面临比传统 PC 互 联网更具挑战性的网络性能问题。百度地图手机端引擎团队联合运维团队、CDN 团队,在APP 网络性能优化方面总结了一些实践经验,并取得了一定的成果。

百度手机地图网络整体框图

505ca49fc58293420614eee79edf26a3.png

端:区分 Native 端与 Hybrid 端两部分。

端网络:系统自带的 RESTful HTTP 与自有的 HTTP。自有的 HTTP 是基于 TCP、UDP 实现的,可以自由切换。其中TCP 又包含长连接、短连接两条通道可供选择。NA 可以直接使用自有的 HTTP,Hybrid 的请求中也部分会走自有的 HTTP 以提高请求效率。

Server 端:针对TCP 长连接与 UDP 通信分别部署对应的 Server,PHPUI 作为业务服务的转接、适配层与客户端直接对接。

无线网络常见问题

2.1 DNS

  Ø  失败率高、解析慢:主流的手机系统 Android、iPhone 都是基于 linux 内核进行开发的,传统的local DNS解析接口gethostbyname()为系统进程同步,再加上运营商 DNS 基本是由第三方公司整体集成发布提供服务,解 析递归时存在不稳定等原因,造成无线网络产品在网络请求时 DNS 出错的占比是最大的。

  Ø  劫持:网络链路上的路由、网管、运营商等提供的DNS 缓存存在被非法 修改的风险,比如明明请求的是 A,结果返回的却是 B,就有可能是你的域名被劫持了。比如Apple内部DNS问题导致APP Store, iTunes Connect 帐号无法登录;百度地图去年在重庆、广州也遇到过 DNS 劫持的问题。 

2.2 网络劫持

  Ø  断点续传劫持:此类问题在酒店、餐馆等开放场所比较容易遇到,无线网络提供 方主要基于视频或大文件下载占用带宽过高,造成其他用户网络 慢,不通等问题在路由进行的相关过滤策略。

  Ø  固定域名劫持:出口路由或者运营商LAC 层面,会对本区域内域名访问进行统计, 如果发现异常或者请求频繁、数据量过大,会对该域名进行强制

拦截。

  Ø  端口拦截: 例如网络运营会对非80,8080,443 等的端口进行封禁。

  Ø  运营商Cache策略诱发的劫持:运营上的初衷是增加 Cache,提升访问效率,并调整其内部机器资 源、带宽占用, 但不同产品、不同业务对数据试试性要求不同, 运营商的 Cache 机制,会将旧数据返回客户端,而不是业务服务 真正的数据。 

2.3 网络不稳定

  Ø  运动状态,移动网络基站切换造成网络的抖动;

 Ø  基站小区用户拥塞;

 Ø  信号差; 网络不稳定是无线网络的特性之一,上面列举出来的三种情况, 运营商会有专门的网优团队进行优化,我们应用方要关注的点就 是如何处理我们的业务,能够最大程度的规避、快速反应来处理该类问题。

2.4  数据传输量过大 无线网络带宽是固定的,数据量传输越大,传输时间越长,用户体验就越差。这就要求为了追求极致的用户体验,把业务数据内容跟体积 做到最优化。

2.5  跨机房访问

无线网络优化实践

3.1 HTTP-DNS与并行DNS解析

很多网络开源库中都是采用 gethostbyname()接口来进行 DNS 解析工作,但该接口在 linux 内核中是系统级进程同步的,可以采用 getaddrinfo()接口进行替换实现并发,一个 APP 中肯定会使用到多个域名、即可以通过该接口来实现 DNS 解析工作的并发请求。

HTTP-DNS 技术,是基于自建的DNS 解析服务,通过 HTTP 请求,及时获取用户当前的最优 IP 节点,保证用户访问的最佳网络链路,减少不必要的数据传输通道延迟。并且自建的DNS解析服务更能够有效的杜绝Local DNS链路上面 各层劫持的问题,保证用户使用的IP地址为正确的业务服务。下图是HTTP-DNS 的原理实现。

11a02b2a869a8e5bab48b336cbefe273.png

3.2 自定义基于 TCP 连接的 HTTP

系统集成的RESTful HTTP , 如 DefaultHttpClient ( Android ), NSURLConnection(iOS)对 HTTP 请求进行了整体封装,请求的各个环节不受 控制,仅能提供一定的超时设置,而基于 TCP 的自有 HTTP 实现,可以从DNS 解析、建链、数据读写等各环节灵活控制,各步骤的超时、重试机制, 包括不同网络(2g、3g、4g、wifi),用户所处网络环境等特征进行动态设置, 保证用户请求的最大成功率。

  Ø  自建内存DNS-IP池,节省HTTP请求的DNS解析时间,提高访问效率, 通过两种方式1、local DNS方式获取;2、HTTP-DNS方式获取,通过定时拉取更新,用户操作触发异步更新,并采用权值计算方式保证 HTTP 请求使用 IP 的正确性。

  Ø  自动检测当前网络环境下断点续传可用性,当遇到端点续传不可用网络 时,自动切换为非断点续传请求。

  Ø  根据系统底层反馈的网络错误或者网络超时问题,分别进行不同的处理, 比如如果发现是连接错误,则立即重联、如果为连接超时,则会等待几 秒再次进行重试。

  Ø 基于TCP的长连接实现,减少握手时间,提升访问性能。

3.3 自定义基于UDP连接的 HTTPUDP 相较 TCP 会减少握手时间,减少网络耗时,这是基于 UDP 进行 HTTP 封装的初衷,从我们自己的性能测试来看,基于 UDP 的传输性能会提升 30% 左右。当然因为 UDP 不是基于可靠连接的,所以我们会在 UDP 协议基础上 面包装一层协议,来保证协议的可靠、稳定。因此我们推出了一套LIGHT 协 议来实现,可以认为是类似 QUIC 来实现。因为是在传输层,因此对实现数 据包的自由切分,传输策略等相较 TCP,会有更加灵活的控制和策略。而且 在服务部署中,接入 CDN,保证用户采用 UDP 进行传输时,共享 CDN 加速效果。

3.4 数据协议格式

通过采用自定义数据格式,压缩数据体积,主要采用的技术手段有三种:

1、  通用的gzip 压缩;

2、  基于nanopb 自定义的数据格式;

3、 根据业务进行针对性数据压缩;

以 TCP 为例,TCP 数据传输会有一个自加速的过程,在基站部署中,运 营商的资源调度也会对已有链接进行数据传输速度的动态调整,因此在数据 格式设计中,不仅仅要考虑体积的压缩,还要结合业务本身的逻辑,综合考 虑来确定最终的协议。

3.5 域名统一

采用统一的服务入口,一方面能够提高链路的复用率,减少 DNS、建链的耗 时,另一方面,数据协议压缩,对端产品的适配都可以统一处理,具体业务 服务可以仅考虑业务功能逻辑实现,减少其他因素干扰。

3.6 服务部署 根据不同运营商、分机房部署;

服务双活、三活甚至更多,保证服务的持续可用; CDN 部署,减少链路路径;

网络技术前沿方向

92c352b03b70a15fee72c3bb18f16e15.png

网络优化成果数据

cd355d7c493fdb96711852dac47c4045.png

网络优化的价值意义

 对用户搜索次数、周活跃天数与搜索耗时进行了统计分析,如下图:

5c8009238afb70bacad1a9750f919c4a.png用户平均搜索次数与搜索耗时对比图

2ceca11cd0f4cd84fe54af0ad547238c.png用户周活跃天数与搜索耗时对比图 

用户周活跃天数与搜索耗时对比图 从上面两张对比图可以看出,耗时变长导致用户使用率下降,拐点在 1.2s附近,超过之后用户搜索意愿下降,活跃天数下降,最终趋近于 1。反之,网络耗时缩短,用户使用意愿、活跃度更高!

结合我们目前的网络现状,在 99%+的用户能够正常使用的基础上,保证了 90%+的用户在网络相关功能使用上为正向激励。

END

开发者技术前线 ,汇集技术前线快讯和关注行业趋势,大厂干货,是开发者经历和成长的优秀指南。

历史阅读

支付宝客户端自动化日志收集及分析

美团点评高性能跨平台动态化框架

网易考拉 Android 通知栏适配全方案

2474e215fcb4bfaf1fca2f9ca81eba48.png 381009d2d7ee9aab900741c7a1b01790.gif ed9818087da68683f89d7aef9f59ae78.png 喜欢就点个好看吧 381009d2d7ee9aab900741c7a1b01790.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值