Chrome Dev Tools 是每一位前端工程師開發除錯的必備利器,稱之為FE的瑞士軍刀也毫不為過。然而,每每當發現一些自己不知道的用法時,我們經常會覺得,自己只是掌握了其強大功能的九牛一毛。為了能夠讓她發揮出最大功效,首先,我們應當瞭解她更多的使用方法;然後,在開發中合適的場景下,刻意練習使用;最後,熟練掌握那些之前不瞭解的功能,併為我所為用,最大提升效率。
本文翻譯自谷歌官方文件,主要介紹了Elements, Console, Sources, Network四個Tab頁面下的功能。敬請期待
Chrome Dev Tools 效能篇
Elements
- 進入:
Cmd + Alt + c
inspect,點選想觀察的節點- console中
inspect(DOM)
,DOM
為想觀察的節點。
- 遍歷節點:
- 滑鼠點選
- 在DOM節點中,上下箭頭跳轉,向右箭頭,展開摺疊的節點。向左箭頭,摺疊開啟的節點。
- 編輯節點
F2
-> Edit as HTML.ctrl+enter
儲存更改,Esc
退出更改,不儲存. - 編輯 DOM 節點名稱或屬性
- 直接在節點名或屬性上雙擊
- 選中突出節點,
Enter
,然後Tab
選擇. - 右鍵,
Edit/Add Attribute
.
- 點選並拖動,可以移動DOM節點.
- 右鍵->
Scroll into view
,滾動頁面使節點在視口中顯示. 斷點除錯
- 右鍵節點->
break on
,可以對該節點的子樹修改、屬性修改、節點移除三種事件新增斷點 - 右側
DOM Breakpoints
,管理DOM斷點. - Event Listener
- Ancestors 顯示祖先節點的事件偵聽器。
- 每個Event Listener包含兩個屬性
- handler,
右鍵
->Show Function Definition
- useCapture, addEventListener函式中
useCapture
的值(bool). - Framework listeners, 框架事件監聽器.
- handler,
- 右鍵節點->
Styles,位於皮膚左側,主要是樣式相關內容
- 頁面底端的Computed 可以編輯,修改。
- 點選
Styles
中的檔名->跳轉到Source->右鍵,Local Modifications. Inherited from <NODE>
,點選<NODE>
可以跳轉到該DOM節點。- 灰色條目不是已定義規則,而是在執行時計算的規則。
- 滑鼠懸停在 CSS 選擇器上可以檢視受該選擇器影響的所有元素。
- 點選右上角
.cls
,可以檢視、增加、刪除class。 - 點選(並長按)右上角
+
按鈕,(選擇要向哪一個樣式表)新增一個新的 CSS 規則。 - 點選右上角
:hov
,或在元素上點選右鍵,啟用/刪除偽類。 - 點選css屬性進行修改,tab跳轉;Alt/ /Shift/Shift+Fn + 上/下,增減0.1,1,10,100。
- 滑鼠懸停到樣式表上面,此時右下角出現三個點,移動過去,此時有
color
,background-color
等快捷方式。 - 點選
color
宣告左側帶顏色的小正方形,開啟color-picker
。
Console
- 進入:
Cmd + Alt + J
- 編輯時,輸入
Shift + Enter
實現換行,而不會直接執行。 - Settings -> General -> Console ->
- Hide network messages/ Log XMLHttpRequests/ Preserve log / Enable custom formatters
- Show timestamps 展開訊息堆疊.
Console API
- Ctrl + L/
clear()
/console.clear()
清空console. - 右鍵 -> Save As 儲存console輸出.
- 日誌組按組輸出,可巢狀:
console.group("Group Name") console.groupCollapsed("Group Name")//預設摺疊 console.groupEnd()複製程式碼
- 計時器,時間戳,在Timeline上有標註
console.time("name"); console.timeEnd("name"); // 向Timeline新增一個標記 console.timeStamp("Adding result");複製程式碼
- 斷言,在console中可跳轉到程式碼對應位置.
console.assert(a < 500, "a > 500!");複製程式碼
- 堆疊追蹤&&錯誤處理
// 追蹤堆疊 try { // some code here } cache(e) { console.log(e.stack); } // 列印跟蹤呼叫棧 console.trace(); // 處理執行時異常 window.onerror = function(message, url, line){ console.log("window.onerror was invoked with message = " + message + ", url = " + url + ", line = " + line); }複製程式碼
- 字串替換
%s %d %f %o(DOM節點) %O(js物件) %c 樣式
。不過有了ES6以後,推薦使用更加方便、靈活的模板字串 - 新增cpu配置檔案.將會新增到
Profiles
皮膚中console.profile("label"); console.profileEnd();複製程式碼
其他特殊用法
// DOM元素格式化為JS物件 console.dir(document.body); // 輸出object子級元素xml console.dirxml(object); // 將Object,Array輸出 console.table([{a:1, b:2, c:3}, {a:"foo", b:false, c:undefined}]); console.table([[1,2,3], [2,3,4]]); console.table(family, ["firstName", "lastName", "age"]); // 記錄相同字串傳入的次數(多用於統計函式呼叫次數) console.count("Login called for user " + user);複製程式碼
Command Line API
↑ / ↓切換檢視錶達式
選擇元素
$('code') // document.querySelector() $$('figure') // document.querySelectorAll() $x('html/body/p') // 返回與指定xpath匹配的陣列元素 $0 - 4 // 返回最近訪問過的5個元素,$0為最新的一個複製程式碼
監聽事件, 檢視時間監聽器(
Elements
->Event Listener
中也可以檢視)monitorEvents(document.body, "click"); // 監聽事件 unmonitorEvents(document.body); // 取消監聽 getEventListeners(document); // 返回在指定物件上註冊的事件偵聽器複製程式碼
複製:將指定物件的字串表示形式複製到剪貼簿.
copy(object); copy($0);複製程式碼
除錯函式
debug(fn); // 呼叫fn時開始除錯 undebug(fn); // 停止除錯 monitor(function); // console中將輸出函式呼叫,以及傳入的引數 unmonitor(function); // 停止監控複製程式碼
- 在
Elements
中開啟指定元素/物件/函式.inspect(DOM); inspect(object/function);複製程式碼
- 檢視物件
keys(object); values(object);複製程式碼
Sources
- 新增斷點
- 新增
Event
斷點:Source標籤
->右側Event Listener Breakpoints
->Mouse
->click
DOM
斷點.Elements 皮膚中,對DOM節點右鍵,Break On...XHR
斷點- 異常斷點:右上角
Pause on exceptions
- 條件斷點
// 當DOM元素滿足某個條件進行斷點,同時檢視這個元素 elem.hasAttribute('class') && inspect(elem);複製程式碼
- 新增
- 在編輯器中行首右鍵,
continue to here
- 檢測變數值
Watch
->+
,新增希望檢測的表示式,比如,a,typeof aScope
窗格,在指令碼暫停時,會顯示當前變數
- 右上角
Deactivate breakpoints
,啟動/忽略全部斷點 Call Stack
呼叫堆疊- 在
Call Stack
中右鍵,Restart Frame
Async
,提高完整的非同步函式呼叫堆疊的可視性- 使用非匿名函式,提高堆疊可讀性
- 在
- 將第三方指令碼新增入黑箱:
- 在已開啟的檔案中,右鍵->
Blackbox Script
- 在
Call Stack
中,右鍵->Blackbox Script
Settings
->Blockboxing
->add pattern
,下拉選單中,Blackbox
黑箱,Disabled
阻止執行
- 在已開啟的檔案中,右鍵->
- 實時編輯:編輯器中修改程式碼->
Cmd + s
,繼續執行程式碼 Threads
,切換執行緒Source Map
,Settings
中開啟Snippets
編寫程式碼,執行結果輸出到console
Network
- 皮膚中,藍線標誌
DOMContentLoaded
事件,紅線標誌load
事件。 Http1.0/1.1
下,chrome
最多支援對同一個domain
6個TCP
請求- Shift + 游標移動到request上面,此時綠色標誌該請求的發起者,紅色標誌該請求的依賴項。
- 攝像機按鈕,
Capture Screenshots
,再次重新整理頁面時,可以在時間軸上方看到對應螢幕狀態。 disable cache
,throttle
,Offline
,hide data urls
- 右鍵->
clear browser cache
- 右鍵表格header -> 新增/移除顯示列
header
:Use large request rows
,Show overview
- 右鍵request->
copy response
->console中copy({})
->得到格式化的JSON - 右鍵request->
block request
在drawer中,檢視被block的request
- 右鍵request->
- 右鍵
XHR request
->reply XHR
Summary
: request數量,大小,時間- Filter
- 空格隔開:並
domain
,has-response-header
,is
(is:running),larger-than
,method
,mime-type
,mixed-content
,scheme
,set-cookie-domain
,set-cookie-name
,set-cookie-value
,status-code
- Timing含義:
Queuing: 排隊時間.
Stalled: http請求建立到發出去.
Proxy Negotiation、DNS Lookup
Initial Connection/Connecting: 建立連結花費時間。TCP握手移機重試.
SSL: 建立SSL連結花費時間.
Request sent: 發起請求的時間.
Waiting (Time to first byte (TTFB)): 發起請求到接受第一個位元組資料.
Content Download: 獲取響應資料的時間.