前陣子一直斷斷續續地讀,直到最近終於把你所不知道的必學前端Debug技巧給讀完了。作為前端,我原本是一個不怎麼會有效率地使用 Devtool 的人,這本書讓我對它有了更進一步的了解,也將許多書中提及的技巧運用在了工作上,而它們也確實大幅提升了我除蟲及開發的效率,透過這篇文和大家分享一些非常簡單易用的小技巧。
$0
我們在畫面上抓取元素時,通常會使用 Elements 的 Inspect 功能:
如果需要切換到 Console 透過 JS 對元素進行操作時,以往我可能會下 querySelector 去取得:
document.querySelector('.col:first-child .card')
然而,其實在 Inspect 到元素時,就能在 Console 直接透過 $0
取得該元素:
Force state
在開發時,我們可能會透過虛擬類別(pseudo class)讓元素在特殊狀態下呈現不同的樣式。例如:
<style>
.my-button {
background-color: blue;
color: #fff;
}
.my-button:hover {
background-color: navy;
}
</style><button class="my-button">Hover Me!</button>
以往我會直接到 CSS 裡改,並確認是否調整為預期的樣式(你沒看錯,以往我是這樣做的…),而在 Elements 中其實可以對元素進行 Force state,例如:
選擇 Force state > :hover 後,就能看到元素 hover 後的樣式:
便可直接在 devtool 對其進行調整及測試。
console.table
以往需要在 console 輸出 array of objects 的資料時,我可能會使用 console.log:
console.log(myArray);
這樣在 console 上跑出的會是一個需要我們手動去展開的資料:
一個個去展開他們自然沒什麼問題。但如果使用 console.table:
就會發現它很貼心地都幫我們把資料整理好了!
Breakpoint
以往針對 JS 除蟲時,我最常使用的是「將疑似有問題的資料一一 log 出來」,這會導致除蟲時的效率低落。在 Source 面板中,有一個非常好用的功能:斷點。
白話地講,當我們對特定一行程式碼下斷點後,瀏覽器在執行到該行時會直接暫停,讓我們能快速還原事發現場。下面是一段有問題的程式碼:
let filteredData = [];
fetch("https://jsonplaceholder.typicode.com/posts")
.then((res) => {
return res.json();
})
.then((data) => {
filteredData = data.filter((item) => item.user.id === 1);
});
在發現問題後,可以直接對該行下斷點:
重整後,程式碼在執行到斷點時便會暫停,便能在 scope 中找到該變數:
也可以直接 hover 到程式碼區塊的變數,看見它的值:
便可快速找到問題進行修正。
模擬低網速
還記得以前曾經有個純 CSR 透過 API 取資料的專案,當時有個問題回報的使用者是在網路不好的情況才會碰到,當時我的做法是透過一些外部條件讓電腦的網路變得非常慢。但其實 Devtool 本身就有限速的功能:
Copy as fetch
有時候在 API 串接上可能因為一些原因失效,這時候如果想要快速測試已經串接的 API,可以在 Networks 找到該 API,並選擇 Copy as fetch:
將其貼到 Console,會是一個可以直接發送的 fetch 程式碼,便可透過修改其參數快速進行測試。
結語
以上就是一些我以前不會,現在常用、也都能很有效幫助到我的Devtool 小技巧,其實還有非常多好用的的小技巧,礙於篇幅就不一一列出。希望這個簡短的分享可以幫助到路過的你,如果內文有任何錯誤,也請不吝指出,謝謝大家。
References:
https://ithelp.ithome.com.tw/users/20129636/ironman/3382?sc=iThelpR