天天看点

移动端网络优化

一个网络请求可以简单分为连接服务器 -> 获取数据两个部分。

其中连接服务器前还包括 dns 解析的过程;获取数据后可能会对数据进行缓存。

1. 不用域名,用 ip 直连

首次域名解析一般需要几百毫秒,可通过直接向 ip 而非域名请求,节省掉这部分时间,同时可以预防域名劫持等带来的风险。

当然为了安全和扩展考虑,这个 ip 可能是一个动态更新的 ip 列表,并在 ip 不可用情况下通过域名访问。

2. 服务器合理部署

服务器多运营商多地部署,一般至少含三大运营商、南中北三地部署。

配合上面说到的动态 ip 列表,支持优先级,每次根据地域、网络类型等选择最优的服务器 ip 进行连接。

对于服务器端还可以调优服务器的 tcp 拥塞窗口大小、重传超时时间(rto)、最大传输单元(mtu)等。

1. 连接复用

节省连接建立时间,如开启 keep-alive。

2. 请求合并

即将多个请求合并为一个进行请求,比较常见的就是网页中的 css image sprites。 如果某个页面内请求过多,也可以考虑做一定的请求合并。

3. 减小请求数据大小

(1) 对于 post 请求,body 可以做 gzip 压缩,如日志。

(2) 对请求头进行压缩

这个 http 1.1 不支持,spdy 及 http 2.0 支持。 http 1.1 可以通过服务端对前一个请求的请求头进行缓存,后面相同请求头用 md5 之类的 id 来表示即可。

4. cdn 缓存静态资源

缓存常见的图片、js、css 等静态资源。

5. 减小返回数据大小

(1) 压缩

一般 api 数据使用 gzip 压缩,下图是之前测试的 gzip 压缩前后对比图。

移动端网络优化

(2) 精简数据格式

如 json 代替 xml,webp 代替其他图片格式。关注公众号 codekk,回复 20 查看关于 webp 的介绍。

(3) 对于不同的设备不同网络返回不同的内容 如不同分辨率图片大小。

(4) 增量更新

需要数据更新时,可考虑增量更新。如常见的服务端进行 bsdiff,客户端进行 bspatch。

(5) 大文件下载

支持断点续传,并缓存 http resonse 的 etag 标识,下次请求时带上,从而确定是否数据改变过,未改变则直接返回 304。

6. 数据缓存

缓存获取到的数据,在一定的有效时间内再次请求可以直接从缓存读取数据。

1. 预取

包括预连接、预取数据。

2. 分优先级、延迟部分请求

将不重要的请求延迟,这样既可以削峰减少并发、又可以和后面类似的请求做合并。

3. 多连接

对于较大文件,如大图片、文件下载可考虑多连接。 需要控制请求的最大并发量,毕竟移动端网络受限。

优化需要通过数据对比才能看出效果,所以监控系统必不可少,通过前后端的数据监控确定调优效果。

注:服务器部署方面的优化有参考手 q 和 qzone 去年的技术分享。

继续阅读