指标和测量
DNS 查找时间
- 最小化应用使用的专用域名数量
- 启动时不需要连接所有域名,对于后续子域名尝试 DNS 预热
DNS 解析流程:浏览器缓存-系统缓存-路由器缓存-ISP DNS缓存-DNS源服务器
SSL 握手
SSL 握手步骤
客户端 | 消息 | 服务器 |
---|---|---|
post | 问候消息 | receive |
receive | 问候消息 | post |
receive | 服务器证书 | post |
post | 共享密钥 | receive |
receive | 共享密钥回复 | post |
post | 客户端结束 | receive |
receive | 服务器结束 | post |
- 最大程度减少应用建立的连接,也需要减少独有域名的数目
- 请求结束后不要关闭 HTTP/S 连接,为所有 HTTPS 请求添加头 Connection:keep-alive,确保下次请求可以复用
- 使用域分片,这样即使连接的是不同的主机名,也可以使用同一个 socket,只要它们解析为相同的 IP
网络类型
- 设计时考虑不同的网络可用性,流媒体-HTTP Live Streaming,非流媒体自适应下载数据量
- 失败请求后在随机的、以指数增长的延迟后进行重试
- 设置强制刷新之间的最短时间,即使用户明确要求刷新,也要检查是否已经存在一个请求,并在时间间隔小于阈值时不发送此请求
- 不要缓存网络状态
- 基于网络类型下载内容
- WIFI 下预下载内容
- 支持离线存储,将网络和通信与 UI 解耦
延迟
统计传输延时和响应延时
- 连接超时
- 响应超时
- 载荷大小
应用部署
服务器
- 使用多个数据中心
- 使用 CDN 提供静态内容
- 使用接近的边缘服务器提供动态内容
- 避免使用多个域名
请求
- 合并请求,虽然可以并发请求资源,但是接入带宽优先,TCP 连接有限,同时建立连接耗费资源和时间
- 使用持续的 HTTP 连接,最大限度减少 TCP 和 SSL 握手消耗,同时减少网络拥塞
- 尽可能使用 HTTP/2,HTTP/2 支持 HTTP 请求的真正复用,如果请求解析为一个 IP 地址,那么 HTTP/2 将跨越了多个子域的请求聚集到一起
- 使用 HTTP 缓存头设置正确的缓存级别,Last-Modified、Expires、Etag、cache-control
数据格式
- 使用数据压缩
- 选择正确的数据格式 protocol buffers、Apache thrift、Apache Avro
网友评论