一、写在前面
Android应用为什么需要考虑网络优化,主要基于以下几个原因:
- 流量:App的移动网络流量消耗对用户来说是比较敏感的;
- 电量:网络请求对电量的消耗是比较大的,影响手机的待机时间;
- 用户体验:网络请求是耗时操作,如果App请求等待时间长,会给用户网络卡, 应用反应慢的感觉。
网络请求优化的目的是尽可能的减少用户等待的时间、减少用户的流量使用、减少对手机电量的消耗,最终达到提升用户体验。
二、分析网络连接的工具
1.AndroidStudio自带工具——Network Monitor
Android Studio内置的Monitor工具中就有一个Network Monitor,可以跟踪应用长传下载数据:
- Rx --- R(ecive) 表示下行流量, 即下载接收;
- Tx --- T(ransmit) 表示上行流量, 即上传发送。
2.Charles、Fiddler等抓包工具
使用Charles、Fiddler等抓包工具同样可以实现Network Monitor的功能,而且更加强大。
3.FaceBook开源的调试工具——Stetho
Stetho是Facebook出品的一个Android应用的调试工具。无需Root即可通过Chrome,在Chrome Developer Tools中可视化查看应用布局,网络请求,sqlite,preference等。同样集成了Stetho之后也可以很方便的查看网络请求的各种情况。
三、Android应用网络优化原则
1.前后端采用gzip方式请求和响应
前端在请求header添加:"content-encoding" 为 "gzip",后端也要开启gzip,才能生效。
相比不采用gzip的请求方式,能节省流量,可以快速响应。
Android 当前流行的http第三方框架默认都支持GZIP压缩,如OKHttp3;
2.图片设置
- 不同分辨率的图片:先用图片控件宽高占位显示,根据网络情况 3g 4g wifi 请求不同分辨率图片的方式;列表中的图片根据需要的尺寸加载合适的缩略图,只有用户查看大图的时候才去加载原图;
- 选择占用空间小的图片格式:比如webp,相同的图片webpage比jpg占用的空间少很多;
- 使用图片框架:图片加载框架推荐Glide,一般的图片加载框架都有缓存图片的策略(缓存大小有控制,一般使用LRUCache算法)和加载图片时机控制。
3.请求优化
- 合并Http请求:减少Http请求次数,当Http请求次数很多的时候就会频繁的创建和断开TCP连接;
- 尽量在WiFi下传输大一些的数据,一是省流量,二是省电;考虑在WiFi下做预加载,如预加载开屏广告资源、手Q Web 类的离线资源等;非WiFi情况下尽量减少网络访问;
- 制定合理的Http请求数据格式和返回数据格式:做到请求数据中没有冗余字段,可以在Http请求数据格式里面加一个字段dataVersion代表本地已有数据的版本号,服务器的数据表中也有一个字段是dataVersion,当服务器数据被修改的时候,dataVersion就加一,当检测到客户端传上来的dataVersion小于服务器数据表中的dataVersion的时候就返回最新数据,否则可以直接返回空数据代表当前本地数据已经是最新数据;
- 请求频率优化:可以结合本地缓存网络数据,降低网络请求的频率。
4.本地缓存网络数据
把网络请求的数据缓存到本地,再次使用的时候直接用缓存的数据,缓存的数据需要设置缓存超时时间,便于更新最新网络数据。
5.离线缓存
当一个设备处于没有网络连接状态时,应用应该允许用户发出的网络请求,在网络连接恢复以后再执行这些网络请求。一个例子就是一个邮件客户端允许用户在设备处于离线的状态下依然能够创建,发送,查看,移动和删除已经存在的邮件,就是因为这些操作被保存下来并且在网络恢复以后再执行。
6.前端网站加速方法
- 最小化http请求:终端用户响应时间的80%是在前端,而这恰好是花费在下载页面组件上:图片,级联样式表,脚步,flash等。减少加载组件的数量也就是减少展现页面的http请求的数量。这是加快页面访问速度的关键;
- 使用CDN 内容分发网络:CDN是选取靠近用户的服务器的内容呈现给用户,所以具有更好的效率,服务器选择分发内容到一个指定的用户基于网络的优先法则。例如都是选择最少跳转节点的服务器或这响应时间最短的服务器;
- 压缩CSS和JS大小:减少代码中不必要的字符,也会降低页面加载的时间,删除代码中所有的注释以及不必要的空格。js文件大小和页面加载时间是成正比的,两个广受欢迎的压缩工具是:YUI和JSmin,当然YUI也可以用来压缩CSS;
- 避免重定向:重定向降低了用户体验,在用户和html之间插入一个重定向延迟了页面展现的内容,而且重定向会浪费网络带宽;
- 配置Etag:视图标签 (ETags)是一种网络服务器和客服端用来判定客服端缓存的组件是否匹配原始任一服务器的机制;
- 删除重复的代码:重复代码的创建有可能会导致不必要的http请求和执行js,降低了性能;
7.优化体验的方法:结合本地数据
用本地数据缓存(缓存到本地数据库或本地文件)配合网络请求完成数据的显示,具体步骤:先读取本地缓存中的数据显示,同时网络请求并行进行,收到网络请求后在网络数据与本地不一致的情况下更新UI显示和本地缓存数据。这个操作会提高数据的显示速度,但没有节约数据请求。
8.交互层级的设计也可以提升用户体验
交互层级的设计在需求评审的时候开发可以根据技术方案提出自己的优化建议,这个优化原则需要与交互、产品多沟通。
四、总结
网络优化,是App优化中相当重要的一项优化工作,除了客户端以上的优化原则,很多一部分优化工作依赖于服务端,包括服务器端的代码开发、部署方式等。
网友评论