网络优化

2020-04-26 09:26:01 浏览数 (2)

缓存

说道网络优化,不得不谈一谈缓存,各大网络开源框架中普遍使用到了缓存。

数据缓存

如何进行数据缓存,我们可以在返回上加上过期时间,避免重新获取。这种做法节约了流量,且大幅提高数据访问的速度,增强了用户体验。在OKHTTPVolley等一些网络框架中都有很好的实践。 下面进行OKHTTP,在无网络的情况下使用cache进行缓存

增量数据更新

除了使用缓存,我们也可以采用增量数据更新的方式 比如: 1. 加上版本,当数据有明显变化的时候进行传输变化的数据,那些没有变化的就不进行传输,避免消耗网络流量 2. 或者在配置信息,省市,区这些地址信息的时候进行更新

数据压缩

数据压缩在网络优化中也进行普遍的使用 如何进行数据压缩呢,通常在post 请求体中加入gzip等压缩字段。浏览器在发送请求时都会带着Accept-Encoding头字段,里面是浏览器支持的压缩格式列表,例如 gzip、deflate、br 等,这样服务器就可以从中选择一种压缩算法,放进Content-Encoding响应头里,再把原数据压缩后发给浏览器。 一些媒体资源传输的时候也可以进行压缩,比如图片上传前进行压缩,我们可以通过luban库将本地的图片进行压缩,压缩后图片质量不变,加载压缩后的图片,再进行上传。 implementation 'top.zibin:Luban:1.1.8'

以下代码是为了演示Luban这个库对图片压缩对流量方面的影响 Luban.with(holder.imageView.getContext()) //加载需要压缩图片的位置 .load(Environment.getExternalStorageDirectory() "/Android/1.jpg") //将压缩为完的图片进行保存的位置,压缩完后的图片质量不变 .setTargetDir(Environment.getExternalStorageDirectory() "/Android") .launch();

图片除了压缩,还可以优先加载缩略图,使用webp格式的图片减少图片的大小

DNS 优化

由于进行网络请求,可能会遇到DNS被劫持和DNS解析缓慢,造成网络请求过于耗时。 这里就可以采用HTTPDNS来绕过运营商服务器解析过程,从而降低平均访问时长,提高连接率,进而提高网络访问的速度。 这里的HTTPDNS 不是使用传统的DNS协议向服务器的53端口发送请求,而是使用Http协议向服务器的80端口发送请求。

监控网络请求的质量

可以进行网络请求质量的监控,比如接口请求耗时,成功率或者错误码,图片的每一步加载的耗时

客户端进行请求耗时监控

public class OkHttpEvent { public long dnsStartTime; public long dnsEndTime; public long responseBodySize; public boolean apiSuccess; public String errorReason; }

Fresco框架 监控图片每一步加载耗时

facebook 的图片加载框架中通过继承RequestListener监控图片请求加载流程,拿到图片加载的每一步 implementation 'com.facebook.fresco:fresco:1.11.0'

其他方案

除了以上常用的方案,我们也可以为进行进一步的网络优化,采取以下方案: 1. 采取CDN 加速,提高服务器带宽,动静资源分离(更新后清理缓存) 2. 根据时机不同,以及请求的频率减少传输量,降低服务器压力,增加网络传输速度

0 人点赞