android:网络优化

目前针对公司Android端的SDK进行实际测试,反映出存在网络加载资源缓慢的问题,在知晓目前CDN的可能存在不稳定的情况下,针对sdk本身的网络模块进行了相应的分析,整理出相关的测试记录,帮助后期可以做出的优化。

典型的HTTP请求流程说明:

一次Http请求流程

发起一次完整的视频广告请求包括:

根据广告位请求Ad内容  下载 广告视频截图 下载Logo角标请求 下载插屏页模板Temp资源 下载广告视频的video文件 下载插屏页html的source资源

如下图所示,根据广告请求AD返回成功后,才会执行下载资广告资源的任务,这里是同步。而当服务器返回AD数据以后,发起多线程异步下载广告资源的任务。只有当一次视频广告所需的全部资源全部下载成功时,才会进入广告的播放显示流程。
Paste_Image.png

简单的理解就是,多个下载任务是并发的,对内容的获取是异步的。

数据获取和内容解析

一般来说,客户端从服务端请求获取数据,缓存数据内容,最终按不同形式呈现出来。所以对资源的加载简单地分为下面两个环节:
* 数据获取:也就是发送请求给服务器返回相应的数据。
* 内容解析:对服务器返回的不同数据类型,在设备上缓存的文件形式,对应其不同的解析方式。

网络任务分析

通过手机端设置代理方式,借助Fiddler对手机端的网络数据进行抓包分析。下面是针对SDK项目的demo程序来进行数据抓包分析:
\
可以看出,针对一次完成的视频广告请求,一共是发起6次网络请求的任务,与上面描述的内容一致,下面针对这些任务的实际执行情况和相应的数据指标来进行分析。<喎�"/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxoNSBpZD0="网络任务耗时分析公司网络环境下根据广告位请求ad">网络任务耗时分析:(公司网络环境下根据广告位请求AD)

通过分析请求AD任务的整体耗时分布,发现耗时主要是在进行DNS解析和TCP握手连接两个方面。
\


针对上面两点通常的优化有下面几种方式:
1.采用IP直连的方式,避免需要把域名通过DNS服务器解析得到IP地址这个耗时过程;
2.同时考虑到CDN分布式部署情况,域名解析到的IP地址并不一定,增加DNS缓存的设置;

将域名和从DNS服务器解析得到的IP地址保存在DNS缓存中。当下一次再使用这个域名时,就直接从DNS缓存里获得所需的信息,而无需再访问DNS服务器。

3.建立TCP/IP可靠连接,是需要三次握手协议,每次请求都重复这个建立连接的过程,无疑是非常耗时的,考虑下面的方式:

请求合并,对数据量小而零散请求都一次集中执行完毕,类似的请求做合并;
分优先级、延迟部分请求,将不重要的请求延迟,削峰减少并发;
连接复用,不需要每次都通过“三次握手:建立一个新连接,再通过“四次挥手”来关闭连接;

整个请求的TimeLine

网络任务数据传输分析:

请求头和响应头
\


请求和响应的内容:

所占的比例

通过上面的数据表现,考虑对网络传输的数据进行一下处理:
减小请求数据大小
1.对于 POST 请求,Body 可以做 Gzip 压缩
2.对请求头进行压缩,Http 1.1 不支持,可以进行SPDY改造后支持, Http 2.0 原生支持。

Http 1.1 可以通过服务端对前一个请求的请求头进行缓存,后面相同请求头用 md5 之类的 id 来表示即可。

减小返回数据大小
通常一般对网络数据优化的措施是:
(1) 对返回的内容数据使用 Gzip 压缩
(2) 精简数据格式如 JSON 代替 XML,WebP 代替其他图片格式
(3) 对于不同的设备不同网络返回不同的内容,如不同分辨率图片
(4) 增量更新需要数据更新时,可考虑数据增量更新。如常见的服务端进行 bsdiff,客户端进行 bspatch。
(5) 大文件下载支持断点续传和多线程下载,并缓存 Http Resonse 的 ETag 标识,下次请求时带上,从而确定是否数据改变过,未改变则直接返回 304。

下图是对比Json数据使用 Gzip 压缩前后对比图
返回内容开启 Gzip压缩前

开启Gzip压缩后

对比发现,开启Gzip后可以减少57.3%的数据传输量

网络任务优化措施

 


考虑预取包括预连接、预加载数据。 使用HttpUrlConnection替换目前的HttpClient,可以具有默认的Gzip压缩和连接复用实现 DNS优化,确定IP直连和DNS缓存两者结合的方式 多连接下载,对于较大文件,如大图片、文件下载可考虑多连接下载

 

需要控制请求的最大并发量,毕竟移动端网络受限

增加网络性能的监控,毕竟优化需要通过数据对比才能看出效果,所以监控 系统必不可少,通过前后端的数据监控确定调优效果。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值