当一个APP迭代完善到一定程度,就不得不考虑用户体验及性能优化。今天我们主要讨论弱网络环境下APP如何优化以达到更好的用户体验。
何为弱网络环境
从字面意来讲,就是在网速不好的情况下使用APP来处理网络请求操作。如3G、4G网络,在网络信号不好的情况下用户的网络速度维持在较低的水平。当然在WI-FI下也存在网速差的情况。通常网络延迟Ping值超过200ms。在这样差的网络环境下,如果不对弱网进行优化,APP在使用过程中难免加载缓慢,用户体验肯定大大折扣。
弱网环境模拟
那么我们如何在开发工程中测试弱网环境呢?
我们可以真机器连接xcode后,打开iPhone,选择【设置】->【开发者】->【Network Link Conditioner】->【Enable】->点亮Enable后的按钮。
在里面选择对应的网络环境模式进行测试。
真实环境下如何检测APP弱网状态
在开发阶段我们可以利用手机设置弱网环境,那么在APP发布后如何检测APP弱网状态呢?
首先我们要区分网络状态和弱网络状态的区别。
网络状态
苹果监测网络状态,我们通常使用Reachablity框架或着使用AFNetworking中AFNetworkReachabilityManager来监测当前网络是否可用,是在WAN还是WiFi下。但在这里我可以告诉大家,通过以上方法无法检测实际的网络状态,它只是检测的是本地连接状态。在如下场景下用以上方法行不通的:
1.现在很流行的公用wifi,需要网页鉴权,鉴权之前无法上网,但本地连接已经建立;
2.存在了本地网络连接,但信号很差,实际无法连接到服务器;
3.iOS连接的路由设备本身没有连接外网。
在上面的情形下,使用上面的两种方法可能仍然返回网络可用。这里推荐一个框架 RealReachability。题外话就不啰嗦了。
弱网络状态
首先可以肯定的是有网的,有流量产生的。我们可以使用Ping值来检测当前网络是否为弱网。
ping 值是指,从PC对网络服务器发送数据到接收到服务器反馈数据的时间。也就是我们APP数据请求过去,再回来,所需要的时间,就是我们常说的ping值。大家可以查看下面的文章来了解什么是PING值,PING值的计算方法。
苹果自己提供了 SimplePing 封装了 ping 的功能,它利用 resolve host,create socket(send & recv data), 解析 ICMP 包验证 checksum 等实现了 ping 功能。并且支持 iPv4 和 iPv6。
这样我们就可以在正式环境中,通过ping值来准确获取当前网络状况了。
弱网状态下如何优化
下面就是我们的重头戏,如何做弱网优化。我主要从移动前端以下几个方面说起:
接口设计优化
在于后端设计接口是可以从以下几方面优化:
1.慢查询监控 2.多查询优化
3.常用接口cache:对于常用的接口进行缓存处理。
4.多接口合并:所谓的多接口合并也就是某个页面内请求过多,也可以考虑做一定的请求合并。数据压缩再处理
1.对数据进行 Gzip 压缩。
2.精简数据格式,如 JSON 代替 XML,WebP 代替其他图片格式。
3.针对不同设备不同网络返回不同数据格式。
如不同分辨率图片大小(可配合七牛):
2/3G使用低清晰度图片——>下发300X240,精度为80的图片
4G普通清晰度图片——>下发600X480,精度为80的图片
WiFi高清晰度图片(最好根据网速来判断,wifi也有慢的)——>下发600X480,精度为100的图片。数据缓存
对首页及特定一级页面进行数据缓存,在一定的有效时间内再次请求可以直接从缓存读取数据,也可避免空白页出现影响体验。界面优化
1.针对弱网(移动网络), 不自动加载图片(显示本占位图)。
2.界面先反馈, 请求延迟提交。例如, 用户点赞操作, 可以直接给出界面的点赞成功的反馈,在网络情况较好的时候再发起请求.(类似支付宝没网也能扫码支付。)
结语
网络优化, 是App优化中相当重要的一项优化. 除了客户端, 接口的优化外, 很多一部分优化还依赖于服务器端, 包括服务器端的代码开发, 部署方式等。本人学识有限不便多谈。