美文网首页
《高性能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