前言:为什么网络优化比别人慢?优化那些还不够?应该加强哪里?1.Android应用为什么需要考虑网络优化,主要基于以下几个原因:
- 流量:App的移动网络流量消耗对用户来说是比较敏感的;
- 电量:网络请求对电量的消耗是比较大的,影响手机的待机时间;
- 用户体验:网络请求是耗时操作,如果App请求等待时间长,会给用户网络卡, 应用反应慢的感觉 。
2.网络性能优化主要从如下几个方面着手:
- 流量消耗
- 网络速度
- 获取数据优化
- 接口设计
- 弱网优化
1.使用本地缓存,减少网络请求分为几种情况:
- 基本数据:可以使用持久化技术,比如本地数据库,sharedPreference,本地文件,来记录之前请求下来的数据 。而且具有一定的过期时效来保证数据的可用性 。
- 图片:同样的,在本地缓存和此图片url映射的图片,可以避免图片的网络请求 。目前很多优秀的图片加载框架,如Glide,Picasso,Fresco都具备这种能力 。
- 文件:如一般的文件,webview里的js,css,html等,当然也要注意过期时效 。
比如有一种场景:App 本地数据库缓存有N个表,当老用户卸载重装时,首次检查需要把远端的数据一次性download到本地来,保证两端的一致性 。
【我的Android网络优化为什么不行?】由于之前必然为每个表设计了一个api,但是在这种场景下,如果还是继续使用这些api的话,就需要N次网络请求,结果不仅会造成N次网络I/O和磁盘写入I/O,还会使得服务端查找性能降低,用户等待时间较长,本地磁盘写入性能降低 。
针对这种场景,完全可以设计一个bulk sync api把这些api整合为一个,这样一来客户端只需一次网络I/O即可获取所有数据,服务端查找性能也提升了一个数量级,本地磁盘I/O也可以把此次返回的数据当成一次事务一次性插入数据库中,大大减少了用户等待时间,同时也提升了网络和本地磁盘写入性能 。
3.减少网络请求的数据量当网络请求不可避免的情况下,此时就要考虑如何减少网络请求携带的数据量 。
同样也分几种情况:
- 基本数据:使用数据压缩方式,比如protoBuff格式,okhttp开启gzip压缩,支持Http 2.0,使用其头部压缩,二进制格式替代Http 1.1 文本格式的特性 。
- 图片:当不得不获取一张本地缓存没有的图片时,就不得不请求服务端获取 。此时没有必要使用最高清的大尺寸的原始图片,完全可以针对客户端显示的图片尺寸和屏幕密度,向服务器请求较小的尺寸,和较低质量的图片,服务器通过图片处理,返回符合此参数的图片给客户端进行显示 。
- 文件:普通文件可以进行zip打包下发,而如webview需要加载的css,js,html还可以事先使用webpack压缩,然后再zip打包下发 。
另外,还有其他一些方式:
- 如okhttp中复用网络连接的方法,当网络请求等待队列中的host和之前的某个结束的请求连接host一致,此时可以直接让此请求复用此网络连接 。
- 使用http 2.0的多路复用特性,我们都知道在http 2.0中,使用了stream的概念,使得多个网络请求可以并行发送,不再需要等待上一次请求响应回来再发送下一个请求,从而有效避免了网络请求的排队,提升了整体网络请求速度 。
- 当有网络数据需要具备一定的实时性,可以使用长连接方式,比如websocket,http 2.0的方式进行推送,避免通过网络轮询的方式来达到,这样不仅实时性高,而且减少了网络请求次数,提升了用户体验 。
推荐阅读
- 网络基本功:http报文及TCP拥塞控制机制
- 笔记本配置两个网络同时上外网和内网
- 超大文件传输 | 网络直连与雷电网桥
- 同样是写作赚钱,写长篇网络小说和写自媒体文章哪个更容易变现?
- 在用 Android 软件摸鱼前,让我们先用 Windows 11 虚拟桌面提高生产力
- 中医治好了我的咽炎,我的鼻炎反反复复
- NaaS 网络即服务是未来的趋势
- 网络地址+端口转换,解决公网地址不足的方案
- 华为|关于6G华为发话了!2030年通信网络将有这六大特点
- 摩托罗拉|骁龙870千元神机升级!摩托罗拉edge s pro喜提Android 12