一、常用JS 調(diào)試技巧
- 代碼格式化
可以將被壓縮的代碼自動(dòng)展開(kāi) - 實(shí)時(shí)代碼編輯
可以在運(yùn)行時(shí)動(dòng)態(tài)改變 JS 代碼,并且不需要刷新頁(yè)面就可以看到效果,一般用這個(gè)實(shí)時(shí)的在代碼里插 console.log - DOM 事件/XHR 斷點(diǎn)
可以針對(duì) DOM 結(jié)構(gòu)改變/屬性改變/鍵盤鼠標(biāo)事件 等下斷點(diǎn),直接斷到事件的第一個(gè) listener 函數(shù)上。還可以對(duì) XHR 請(qǐng)求下斷點(diǎn),斷到發(fā)起請(qǐng)求的那一行代碼上 - 調(diào)用棧分析
這個(gè)非常常用,Scripts 面板下右上角的那一部分 - 自動(dòng)異常斷點(diǎn)
當(dāng)代碼執(zhí)行出錯(cuò)時(shí),可以自動(dòng)斷到出錯(cuò)的代碼行上,直接分析出錯(cuò)時(shí)的運(yùn)行時(shí)環(huán)境 - 分析 HTTP 請(qǐng)求
Network 面板下列出了所有的 HTTP 請(qǐng)求,可以很方便的查看請(qǐng)求內(nèi)容、HTTP 頭、請(qǐng)求時(shí)間等信息
以線上代碼出 Bug 為例。一般上手第一步是使用代碼格式化功能將被壓縮的線上代碼展開(kāi),然后
開(kāi)啟自動(dòng)異常斷點(diǎn),嘗試重現(xiàn) Bug。當(dāng) Bug 出現(xiàn)時(shí)代碼會(huì)自動(dòng)斷到出錯(cuò)的那一行。然后通過(guò)調(diào)用棧分析結(jié)合
控制臺(tái)找到最開(kāi)始出錯(cuò)的那個(gè)函數(shù)上。一般的 Bug 到這里就算找出來(lái)了,但是如果這個(gè) Bug 是在事件回調(diào)函數(shù)或者 XHR 回調(diào)函數(shù)上,就得結(jié)合 DOM 事件斷點(diǎn)和 XHR 斷點(diǎn) 進(jìn)一步往上找哪個(gè)函數(shù)出錯(cuò)。另外,如果是發(fā)給服務(wù)器請(qǐng)求沒(méi)有得到正確的 response,可以通過(guò) Network 面板查看請(qǐng)求的參數(shù)、Cookie、HTTP 頭是否有誤。
另外,還可以通過(guò) Charles/Nginx/Fiddler 等工具將遠(yuǎn)程 js 代碼映射到自己的電腦上,免去了代碼格式化的麻煩,還可以直接編輯。
還有些比較小的 Tips:
- console.group/console.groupEnd 可以將 log 信息分組展示,看起來(lái)更舒服
- console.warn/console.error 可以輸出 warning 和 error log
- element 面板右側(cè)實(shí)時(shí)編輯的 css 樣式,可以在 resource 面板里保存起來(lái)
- 關(guān)于樣式還有個(gè)技巧,Elements 面板右上角的 styles 欄,右側(cè)有三個(gè)圖標(biāo),功能依次是:根據(jù)當(dāng)前元素創(chuàng)建一個(gè) css 樣式、模擬 :hover/:active 等偽類、顏色值類型選擇。實(shí)用
- resource 面板可以刪除和修改 cookie/localstorage
- scripts 面板下的 ctrl+o 可以快速跳轉(zhuǎn)腳本文件,ctrl+shift+o 快速跳轉(zhuǎn)函數(shù)
- 右下角的齒輪圖標(biāo)里有個(gè)選項(xiàng)是開(kāi)發(fā)者工具和網(wǎng)頁(yè)左右分屏(Dock to the right,默認(rèn)是上下分屏),寬屏必備
- 接上,還有個(gè)選項(xiàng)是禁用 Cookit,必點(diǎn)
- 接上,在選項(xiàng)面板里還可以手工編輯 user agent 和模擬觸摸事件
二、JS調(diào)試必備的5個(gè)debug技巧
1. debugger;
我以前也說(shuō)過(guò),你可以在JavaScript代碼中加入一句debugger;
來(lái)手工造成一個(gè)斷點(diǎn)效果。
需要帶有條件的斷點(diǎn)嗎?你只需要用if
語(yǔ)句包圍它:
代碼如下:
if (somethingHappens) {
但要記住在程序發(fā)布前刪掉它們。
2. 設(shè)置在DOM node發(fā)生變化時(shí)觸發(fā)斷點(diǎn)
有時(shí)候你會(huì)發(fā)現(xiàn)DOM不受你的控制,自己會(huì)發(fā)生一些奇怪的變化,讓你很難找出問(wèn)題的根源。
谷歌瀏覽器的開(kāi)發(fā)工具里有一個(gè)超級(jí)好用的功能,專門可以對(duì)付這種情況,叫做“Break on…”,你在DOM節(jié)點(diǎn)上右鍵,就能看到這個(gè)菜單項(xiàng)。
斷點(diǎn)的觸發(fā)條件可以設(shè)置成這個(gè)節(jié)點(diǎn)被刪除、節(jié)點(diǎn)的屬性有任何變化,或它的某個(gè)子節(jié)點(diǎn)有變化發(fā)生。
3. Ajax 斷點(diǎn)
XHR斷點(diǎn),或Ajax斷點(diǎn),就像它們的名字一樣,可以讓我們?cè)O(shè)置一個(gè)斷點(diǎn),在特點(diǎn)的Ajax調(diào)用發(fā)生時(shí)觸發(fā)它們。
當(dāng)你在調(diào)試Web應(yīng)用的網(wǎng)絡(luò)傳輸時(shí),這一招非常的有效。
4. 移動(dòng)設(shè)備模擬環(huán)境
谷歌瀏覽器里有一些非常有趣的模擬移動(dòng)設(shè)備的工具,幫助我們調(diào)試程序在移動(dòng)設(shè)備里的運(yùn)行情況。
找到它的方法是:按F12,調(diào)出開(kāi)發(fā)者工具,然后按ESC
鍵(當(dāng)前tab不能是Console),你就會(huì)看到第二層調(diào)試窗口出現(xiàn),里面的Emulation標(biāo)簽頁(yè)里有各種模擬設(shè)備可選。
當(dāng)然,這不會(huì)就變成了真正的iPhone,只是模擬了iPhone的尺寸,觸摸事件和瀏覽器User Agent值。
5. 使用Audits改進(jìn)你的網(wǎng)站
YSlow是一個(gè)非常棒的工具。谷歌瀏覽器的開(kāi)發(fā)者工具里也有一個(gè)非常類似的工具,叫Audits。
它可快速的審計(jì)你的網(wǎng)站,給你提出非常實(shí)際有效的優(yōu)化你的網(wǎng)站的建議和方法。
更多建議: