Android 优化——网络优化
-
接口设计
-
API设计
App 与 Server 之间的 API 设计要考虑网络请求的频次,资源的状态等。以便 App 可以以较少的请求来完成业务需求和界面的展示。
比如注册登录一般会有两个 API,但是设计 API 时应该给注册接口包含一个隐式的登录。来避免 App 在注册后还得请求一次登录接口(有可能失败,从而导致业务流程失败)。
比如有些请求可能包含了几种小请求,可以单独设计个接口,减少请求次数。
-
Gzip 压缩
使用 Gzip 来压缩 request 和 response,减少传输数据量,从而减少流量消耗。
-
考虑使用 Protocol Buffer/flatBuffer 代替 JSON
-
图片的 Size
图片相对于接口请求来说,数据量要大得多。故而也是需要优化的一个点。可以在获取图片时告知服务器需要的图片的宽高,以便服务器给出合适的图片,避免浪费。以七牛为例,可以在请求图片的 url 中添加诸如质量,格式,width,height 等 path 来获取合适的图片资源。对于不同的设备不同网络返回不同的内容不同分辨率图片。
-
增量更新
需要数据更新时,可考虑增量更新。如常见的服务端进行 bsdiff,客户端进行 bspatch。
-
大文件下载
支持断点续传,并缓存 Http Resonse 的 ETag 标识,下次请求时带上,从而确定是否数据改变过,未改变则直接返回 304。
-
-
网络缓存,减少延迟节省流量。
-
打包网络请求
当接口设计不能满足业务需求时。例如可能一个界面需要请求多个接口,或是网络良好,处于 Wifi 状态下时我们想获取更多的数据等。这时就可以打包一些网络请求,例如请求列表的同时,获取 Header 点击率较高的的 item 项的详情数据,响应体里包含更多的内容。
-
监听相关状态
监听设备的状态:休眠状态、充电状态、网络状态,结合 JobScheduler 来根据实际情况做网络请求。比方说 Splash 闪屏广告图片,可以在连接到 Wifi 时下载缓存到本地; 新闻类的 App 可以在充电,Wifi 状态下做离线缓存。
-
弱网优化
除了正常的网络优化,还需考虑到弱网情况下 App 的表现。
一般来说,网络延迟在 60ms 内是 OK 的,超过 200ms 就比较糟糕了。弱网优化,本质上是在弱网的情况下能让用户流畅的使用。
- 压缩/减少数据传输量
- 利用缓存减少网络传输
- 针对弱网(移动网络),不自动加载图片
- 界面先反馈,请求延迟提交。例如,用户点赞操作,可以直接给出界面的点赞成功的反馈,使用 JobScheduler 在网络情况较好的时候打包请求。
-
建立取消机制,页面跳走了要取消请求,且不再接收数据。
-
GET 请求失败增加重试机制,POST 请求可能因为延时,不要有重试机制,要防止频繁请求相同的接口。重试机制必须要有明显的结束条件。
-
避免重复上传与下载。避免轮询。
-
IP 直连,避免 DNS 解析,即耗时又有被劫持风险。