网络优化

208 阅读2分钟

核心:体积、网速 (易读性最高)xml->json->flutterbuffer(体积最小)

1. 协议优化

主流是http1.1 , 2.0已有复用功能。

http1.0协议: 链接复用: httpUrlconnection不能做复用,因为每次都会创建一个新链接 socket可以,模拟http请求

image.png

image.png

2. 域名改ip

向服务器请求最好用ip请求,用域名的话需要在相应dns解析成IP,再找到请求的服务器建立tcp连接。用域名的好处是可以动态切换ip。

3. 数据压缩

比如okhttp开启gzip

.header("Content-Encoding" , "gzip")

4. 内容协议

使用ProtoBuf方法序列化结构化数据。

ProtoBuf(Protocol Buffers)是一种跨平台、语言无关、可扩展的序列化结构数据的方法,可用于网络数 据交换及存储。 在序列化结构化数据的机制中,ProtoBuf是灵活、高效、自动化的,相对常见的XML、JSON,描述同样 的信息,ProtoBuf序列化后数据量更小、序列化/反序列化速度更快、更简单。

MMKV使用mmap与文件保持内存同步,使用protobuf对数值进行编码/解码,充分利用Android,实现最佳性能。

ProtoBuf的原理是压缩不需要的字节,使用Varint表示法,比如一个int的8,int占4个字节,前面三个字节都是无效数据,会舍弃掉,protoBuf每次会抽数据的7个字节,然后再自己添加第八个字节,用来标识后续是否有数据,没有数据就不再写入。

Varint 是一种紧凑的表示数字的方法。它用一个或多个字节来表示一个数字,值越小的数字使用越少的字节数。这能减少用来表示数字的字节数。比如对于 int32 类型的数字,一般需要 4 个 byte 来表示。但是采用 Varint,对于很小的 int32 类型的数字,则可以用 1 个 byte 来表示。当然凡事都有好的也有不好的一面,采用 Varint 表示法,大的数字则需要 5 个 byte 来表示。从统计的角度来说,一般不会所有的消息中的数字都是大数,因此大多数情况下,采用 Varint 后,可以用更少的字节数来表示数字信息。

基本流程: 创建proto文件->在文件中定义数据格式->pritoc处理->生成proto的java文件->在代码中和javaBean一样的使用。

在as中基本使用: 引入配置 待完善