URL Loading System
概念
iOS中用标准的或自定义的协议和server进行通信的一套API
基本概念是URLSession,一个session实例可以创建多个task
,用于get/post/download/upload。
配置session的config对象可以支持default、ephemeral、background三种模式。
- default 共享全局证书、缓存、cookie
- ephemeral 证书、缓存、cookie都是临时的,不落盘
- background 支持后台任务,退到后台时,任务由系统托管。
下面官方图片,显示了default合ephemeral的区别。
image.png
组成部分
- URLSession
- 协议支持(protocol support)
- 认证和证书(authentication and credentials)
- cookie 存储(cookie storage)
- 请求配置(configuration management)
- 缓存管理(cache management)
性能指标
概念
iOS10之后,苹果推出了NSURLSessionTaskTransactionMetrics类,是由URL Loading System封装的,对task整个执行生命周期的监控。
组成
- request
- response
- 一些时间指标
- 协议名
- resourceType A value that indicates whether the resource was loaded, pushed, or retrieved from the local cache.
网络性能统计主要是通过监控请求的创建、建立连接、建立安全连接、查找域名、解析域名、请求数据、完成请求数据等各个关键时间节点,来判断哪个部分有瓶颈,进而进行优化。
Metrics中的时间指标,正是做这个事的。
image.png
Metrics把请求分为了6个阶段
- 任务开始
- nds解析
- tcp连接建立
- ssl建立
- http请求发起
- http响应
这几个阶段中,除了第一个比较特殊,只有开始。其他都是开始/结束对应。当一个阶段开始后,如果阶段没有完成,不管是任何原因,endTime都会为nil。
一个注意的点:http2,由于支持长连接,它的tcp ssl相关的值都是空。
网友评论