Network模塊用來對一個月程序運(yùn)行過程中的網(wǎng)絡(luò)訪問動作進(jìn)行捕獲帚桩,例如可以查看某個時間點(diǎn)設(shè)備的網(wǎng)絡(luò)訪問情況亿驾、數(shù)據(jù)傳輸量、網(wǎng)絡(luò)類型等账嚎。主要分為兩大類
HTTP Traffic:HTTP流量跟蹤
用于顯示所有HTTP活動莫瞬,每條記錄都是一個URL會話
還有兩個過濾器,如下所示
-
過濾器1:選擇是否在跟蹤中顯示任務(wù)(Tasks)或事務(wù)(HTTP Transactions)郭蕉,默認(rèn)選中task
-
過濾器2:選擇記錄的排列方式
-
Sumary: Task Durations:根據(jù)session的持續(xù)時間長短進(jìn)行展示
-
List: URLSession Tasks:以Session會話列表展示
-
List: HTTP Transactions:以HTTP事務(wù)列表展示
-
Sumary: Task Durations:根據(jù)session的持續(xù)時間長短進(jìn)行展示
Network Connections:網(wǎng)絡(luò)連接分析
主要用于分析網(wǎng)絡(luò)連接的數(shù)據(jù)傳輸量疼邀,
有一個過濾器,主要用于以何種方式排列網(wǎng)絡(luò)連接的記錄
-** Summary:By Process**:以進(jìn)程的統(tǒng)計排列捕獲的網(wǎng)絡(luò)連接
- Summary:By Interface:以網(wǎng)絡(luò)接口的類型統(tǒng)計展示
- History:主要查看現(xiàn)有的所有網(wǎng)絡(luò)連接的記錄
- Active Connections:目前正在使用的網(wǎng)絡(luò)連接
原理
Instrument中的Network依賴于Apple和新框架的底層網(wǎng)絡(luò)堆棧召锈,所以當(dāng)使用任何網(wǎng)絡(luò)API時旁振,都可以用其檢測所有的Apple設(shè)備和通過App的HTTP流量。
從上面的介紹可以看出涨岁,每次捕獲一個App拐袜,即一個進(jìn)程,進(jìn)程包含一個或多個NSURLSession任務(wù)卵惦,每個Task包含一組或者多個域名阻肿。所有的HTTP流量追蹤+進(jìn)程追蹤組合成一個聚合視圖,顯示了運(yùn)行時的任務(wù)或者處于活躍狀態(tài)的事務(wù)等
任務(wù) & 事務(wù)
- 任務(wù):是類似于URLSessionDataTask或URLSessionDownloadTask沮尿。通過調(diào)用resume開始丛塌,并在調(diào)用響應(yīng)完后結(jié)束。一個URLSession任務(wù)有時需要幾輪請求和響應(yīng)
- 事務(wù):是指與Web服務(wù)器通信的單個實(shí)例畜疾。簡單來說就是赴邻,請求+響應(yīng)就是一個事務(wù)。事務(wù)是在調(diào)用resume后開始啡捶,并在調(diào)用關(guān)聯(lián)完成時結(jié)束
一個事務(wù)有五種狀態(tài)姥敛,分別是:緩存查找、阻塞瞎暑、發(fā)送請求彤敛、等待響應(yīng)和接收響應(yīng),如下所示
分別對應(yīng)的步驟如下:
- 建立連接
- 執(zhí)行任何緩存查找
- 旋轉(zhuǎn)一個線程
- 發(fā)送HTTP請求
- 等待響應(yīng)時阻塞線程
- 接收響應(yīng)
在其他情況下了赌,一個task可能會對應(yīng)多個事務(wù)墨榄,例如有重定向或者URL轉(zhuǎn)發(fā)時
使用
- 啟動Product - Profile,選擇Network勿她,開始運(yùn)行程序進(jìn)行網(wǎng)絡(luò)分析
-
一般選擇HTTP Traffic進(jìn)行分析袄秩,并選擇URLSession Tasks排列
-
選中一個URLSession,并選擇其中一個事務(wù),查看其具體的展示(注:CMD + 加號 放大紅框區(qū)域)
從紅框部分可以看出一個事務(wù)對應(yīng)的幾種狀態(tài)之剧,最后在根據(jù)下面的請求相關(guān)數(shù)據(jù)來具體分析對應(yīng)的請求
參考文章
Monitoring HTTP Traffic with Instruments
Analyzing HTTP Traffic with Instruments - Apple
Choosing a Network Debugging Tool - Apple
Debugging HTTPS Problems with CFNetwork Diagnostic Logging - Apple
Advanced Network Debugging in Xcode