美文网首页
《高性能iOS应用开发》网络

《高性能iOS应用开发》网络

作者: Yasic | 来源:发表于2018-03-13 06:33 被阅读12次

指标和测量

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

相关文章

网友评论

      本文标题:《高性能iOS应用开发》网络

      本文链接:https://www.haomeiwen.com/subject/pragfftx.html