前言
说到APP优化,我们也可以从很多方面进行优化,从包大小、页面流畅度、内存占用、数据缓存、网络数据安全等等来优化加固我们的APP,每一个点展开又有很多需要将的,我以前也专门写了一篇关于APP性能优化的博文,如下:
《iOS-性能优化的那些事》
在移动端APP网络优化也是APP性能优化的一个非常重要的一个点,而且99.99%的APP都会伴随着网络交互; 在此,我将对APP网络优化和网络安全做一个详细的总结,主要从流量、质量、安全方面去说,如要结构点如下:
流量消耗
先说一个亲身经历过得事情,以前在一家公司开发了一款APP,有一点客服反馈有个上海老大爷打电话过来骂人,手机装了我们的APP,一个晚上用掉人家一两个G;后来公司也主动帮人家承担了这部分的流量资费,关键是15年流量资费还很高的,这个APP当然不是我写的,是安卓的小伙伴!
即使流量现在价格不是很贵了,但是尽可能的帮用户节省流浪也是非常应该的!
检测流量消耗
相信大家在开发APP的时候肯定会做一些埋点和日志上报的功能,我们也可以把网络请求的监控也做进去,我们可以检测用户在一段时间内的流量消耗,计算流量的均值和峰值等等,并上报流量接口,这些我们在日志或者埋点系统里面都可以记录,然后上传给服务端,然后进行数据分析,找出流量消耗的不足之处。
数据缓存
说到缓存,这也是一个非常大的一个点,有时间也可以展开说,我平时的博客关于缓存也讲到很多,缓存的一个非常重要的好处就是提好了页面加载速度,提高用户的使用体验;但是缓存也可以替用户节省流量的消耗。 APP数据的缓存无非是列表接口的缓存、WebView的缓存,关于WebView的缓存我也单独写过,如下:
《iOS-WKWebView缓存并保证实时性》
《iOS-UIWebView缓存并保证实时性》
我们还可以做资源包下发预制加载等,这里也不展开了!
数据压缩
关于数据压缩,这边主要想讲的就是资源文件的数据压缩了,主要在网络上传和网络下载方面;
1.数据上传 比如上传图片数据的时候是不是需要原图高清图,现在相机的像素都高,我们是不是可以搞了压缩一下图片或者视频再上传,就像微信发送图片的时候,用户可以选择压缩或者原图;
2.数据下载 下载目前也是APP的大头了,一般APP都是请求下载的数据比较多;我们在加载资源的时候可以选择加载压缩资源,比如微信的朋友圈,小图的时候我们可以加载缩略图,要是点击查看大图的时候才考虑加载大图原图;
交互频率
数据交互如果比较频繁会消耗用户的流量,而且用户体验不好,还有一个非常重要的原因就是频繁的网络请求也会比较损耗手机的电量;所以我们可以合并一些能合并的网络请求,比如日志上报的时候。
请求释放
在APP开发的过程中,一般就是一进入页面就进行网络请求,然后等待结束加载数据,但是比如网络请求比较缓慢(可能是数据量比较大,也有可能是网络状况不好),用户不想等了,直接返回页面销毁了,但是我们的大部分网络请求是单独封装的,但是网络请求还在继续请求中,这里数据、性能、内存、电量的问题就出来了,所以大家在封装网络请求的时候要把页面销毁就取消网络请求的场景考虑进去!
网络质量
请求速度
网络请求的速度是影响用户体验的一个非常重要的原因,所以服务端也要想着来提高api的交互速度,为此我们可以通过下面的几个方案来优化交互速度,如下:
a.域名合并,减少了DNS调用次数,降低了DNS劫持风险;
b.ip直连,去除DNS的解析步骤;
c.api缓存,比如redis缓存;
d.数据资源压缩上传;
请求质量
监控网络请求质量和请求速度,然后记录日志进行上报,监控完整的网络请求链路;
服务器压力
api的设计也要考虑到api的压力以及服务器的压力,防止因为压力太大导致接口挂掉,从而影响用户的体验;
数据处理
服务端在给APP端提供数据的时候,避免让APP端进行数据处理或者运算,比较APP的内存资源和运算资源有限,不要过度消耗浪费APP资源; 比如,我上家公司的用户信息里面有用户的年龄,但是服务端给的不是直接的年龄数据,而是给的生日时间戳,需要APP端自己去计算年龄,但是我们知道 NSDateFormatter又是重大内存开销对象,在列表处理的时候又比较消耗内存,所以建议关于运算的一些东西最好在服务端计算好,这种不仅仅保证APP的性能问题,还是一种安全问题!
网络安全
我们在APP端的网络安全问题一般是APP抓包、DNS劫持、服务器安全,详细如下:
APP抓包
说到抓包,侵入者可以选择抓取数据来窃密APP的关键数据,然后模拟请求,做一些APP不好控制的事情,在此我们可以使用Https进行网络请求,还可以禁止网络请求设置代码; 还可以把请求头和请求体进行加密传输,多一次保证! 但是需要说明一点的是,没用绝对的安全,只要是人设计的加密就有人设计解密,窥视心里在作怪!
DNS劫持
DNS劫持,由于域名解析为IP这个过程中,其解析是基于UDP 协议实现,所以报文是明文状态,可能会在请求过程中被监测,然后攻击者做一些自己的处理,比如返回假的IP地址或者什么都不做使请求失去响应,其效果就是对特定的网络不能反应或访问的是假网址。根本原因就是以下两点:
a.恶意攻击,拦截运营商的解析过程,把自己的非法东西嵌入其中。
b.运营商为了利益或者一些其他的因素,允许一些第三方在自己的链接里打打广告之类的。
如何防止DNS劫持? 可以通过上面我说的IP直连,自己在APP解析! 推荐一篇写的比较详细的关于DNS的,如下:
《APP网络优化之DNS优化实践》
服务器安全
服务器安全可以从物理安全和网络安全来说 a.物理安全,服务器要考虑比如断电、断网等情况下导致的安全问题; b.网络安全,防止服务器被攻击、被爬虫等问题; 所以,服务器的备份机制和数据备份机制和重要,还要限制同一IP的请求次数和间隔等;
本文链接:https://juejin.im/post/5e256ef76fb9a02ffa6a90a1