前端技術-調試工具(上)

頁面制作之調試工具

常用的調試工具有Chrome瀏覽器的調試工具,火狐瀏覽器的Firebug插件調試工具,IE的開發人員工具等。它們的功能與使用方法大致相似。Chrome瀏覽器簡潔快速,功能強大這里主要介紹Chrome瀏覽器的調試工具。

打開 Google Chrome 瀏覽器,通過下面任何一種方式進入開發人員工具:?
-點擊位于瀏覽器用戶界面右上角的“頁面”下拉菜單,“更多工具”→“開發人員工具”。?
-右鍵點擊網頁上的任一元素,在彈出菜單中選擇“審查元素”。?
-在 Windows操作系統上,使用 Ctrl+Shift+I 快捷鍵打開開發人員工具(或使用 Ctrl+Shift+J 直接進入 JavaScript 控制臺)。

Chrome一共有8個功能子集。如下圖:

image

每一個圖標點擊后都會打開相應的調試面板,幫助您獲取各種不同的信息,如 DOM 樹、資源占用情況、頁面相關的腳本等。通過 Ctrl+[ 和 Ctrl+] 鍵,可以在這些項之間進行切換。每個模塊及其主要功能為:

Element 標簽頁: 用于查看和編輯當前頁面中的 HTML 和 CSS 元素。
Network 標簽頁:用于查看 HTTP 請求的詳細信息,如請求頭、響應頭及返回內容等。
Source 標簽頁:用于查看和調試當前頁面所加載的腳本的源文件。
TimeLine 標簽頁: 用于查看腳本的執行時間、頁面元素渲染時間等信息。
Profiles 標簽頁:用于查看 CPU 執行時間與內存占用等信息。
Resource 標簽頁:用于查看當前頁面所請求的資源文件,如 HTML,CSS 樣式文件等。
Audits 標簽頁:分析頁面加載的過程,進而提供減少頁面加載時間、提升響應速度的方案,用于優化前端頁面,加速網頁加載速度等。
Console 標簽頁:用于顯示腳本中所輸出的調試信息,或運行測試腳本等。

學習這個章節,最主要的是多動手點點,左擊/右擊,先點看看,進而深入學習。

一.Elements:

在元素(Elements)面板中,可以看到整個頁面的 DOM 樹結構和每個元素的所有屬性(即html和css),同時也可以實時地修改這些元素及其屬性,并可以實時看到修改后的效果。

1.Styles

-點擊image,點擊頁面上的元素,顯示選中元素的HTML代碼和樣式;

-編輯HTML:在工具窗口左側是html代碼,可通過雙擊修改現有標簽的屬性值,也可選中html代碼片段右擊選擇“Edit as HTML”進行html代碼的修改;

-編輯屬性:在工具窗口右側顯示的是被選元素的樣式信息,可以通過雙擊現有屬性來修改該元素的 style 屬性或應用的某個選擇器中的屬性值,也可以通過取消勾選的方式去掉一些屬性,同時頁面實時變化。

-添加屬性:鼠標雙擊您所想修改的元素的選擇器的空白部分,即可添加屬性。添加任何屬性都必須以分號結束。你也可以直接點擊+號,添加新選擇器并進行屬性操作。

jdfw

-可以直接在盒模型上更改margin和padding。

-搜索功能:當工具面板獲得焦點后,快捷鍵ctrl+f會打開搜索框,鍵入元素關鍵字進行搜索。

-你還可以對某個元素進行監聽,在JS對元素的屬性或者HTML進行修改的時候,直接觸發斷點,跳轉到對改元素進行修改的JS代碼處:

image

-拖拽節點, 調整順序。拖拽節點到編輯器:

jdfw

注:像素大小,可以通過鼠標的滾輪調整,調整單位1px(百分比調整單位1%);按住ALt,調整單位0.1px;同時按住Shift+ALt,調整單位10px。

總之,把可以點的都點一遍。

2.Computed

顯示的是所選元素的最終樣式(對應JS中的getComputedStyle()方法),Computed Style中的屬性是只讀的,不能實時修改,所以主要用來查看元素的最終屬性值。

+Event Listeners

顯示了綁定到當前元素的事件監聽函數,而且會顯示事件冒泡或捕獲(即能夠響應此事件的所有元素)。

右擊標簽,審查元素;出現工具欄-》菜單 Elements,查看右側菜單-》EventListeners,查看元素上綁定了哪些事件:

image

默認會列出 All Nodes, 這些包括代理綁定在該節點的父/祖父節點上的事件, 因為在在冒泡或捕獲階段會經過該節點
Selected Node Only 只會列出當前節點上綁定的事件
每個事件會有對應的幾個屬性 handler, isAtribute, lineNumber, listenerBody, sourceName, type, useCapture

image

-handler是處理函數, 右鍵可以看到這個函數定義的位置, 一般 js 庫綁定事件會包一層, 所以這里很難找到對應handler
-isAtribute 表明事件是否通過 html 屬性(類似onClick)形式綁定的
-useCapture 是 addEventListener 的第三個參數, 說明事件是以冒泡還是捕 順序執行
-右擊handler選擇“Show function definition”可以進入Sources里js文件中。

+DOM Breakpoints

這個后面再細講。

+Properties

image

Properties:顯示當前元素的DOM屬性,按照類的繼承層級排列,越靠下層級越高。最上面是一個HTMLDivElement的實例,第二個是HTMLDivElement的類。第三個,是HTMLElement類,HTMLDivElement類繼承自HTMLDivElement類。接著分別是Element類,Node類,和Object類。如果選擇不同的節點類型,就會出現不同的繼承關系。

這個很有用,可以讓你看到元素具有的方法與屬性,比查API手冊要方便,但要注意某些方法和屬性在IE、FireFox等其他瀏覽器下面的支持情況。

二.Network

image

請求的每個資源在Network表格中顯示為一行,每個資源都有許多列的內容(如紅色區塊1),不過默認情況下不是所有列都顯示出來。

Name/Path: 資源名稱以及URL路徑;
Method: HTTP請求方法;
Status/Text: HTTP狀態碼/文字解釋;
Type: 請求資源的MIME類型;

Initiator解釋請求是怎么發起的,有四種可能的值:


Parser:請求是由頁面的HTML解析時發送的;
Redirect:請求是由頁面重定向發送的;
Script:請求是由script腳本處理發送的;
Other:請求是由其他過程發送的,比如頁面里的link鏈接點擊,在地址欄輸入URL地址。


Size/Content: Size是響應頭部和響應體結合起來的大小,Content是請求內容解碼后的大小。進一步了解可以看這里Chrome Dev Tools - “Size” vs “Content”;
Time/Latency: Time是從請求開始到接收到最后一個字節的總時長,Latency是從請求開始到接收到第一個字節的時間;
Timeline: 顯示網絡請求的可視化瀑布流,鼠標懸停在某一個時間線上,可以顯示整個請求各部分花費的時間。
以上是默認顯示的列,不過我們可以在瀑布流的頂部右鍵,這樣就可以選擇顯示或者隱藏更多的列,比如Cache-Control, Connection, Cookies, Domain等。

我們可以按照上面任意一項來給資源請求排序,只需要單擊相應的名字即可。Timeline排序比較復雜,單擊Timeline后,需要選擇根據Start Time、Response Time、End Time、Duration、Latency中的一項來排序。

紅色區塊2中,一共有6個小功能:

Record Network Log: 紅色表示此時正在記錄資源請求信息;
Clear: 清空所有的資源請求信息;
Filter: 過濾資源請求信息;
Use small resource raws: 每一行顯示更少的內容;
Perserve Log: 再次記錄請求的信息時不擦出之前的資源信息;
Disable cache: 不允許緩存的話,所有資源均重新加載。

選擇Filter后,就會出現如紅色區塊3所顯示的過濾條件,當我們點擊某一內容類型(可以是Documents, Stylesheets, Images, Scripts, XHR, Fonts, WebSockets, Other)后,只顯示該特定類型的資源。在XHR請求中,可以在一個請求上右鍵選擇“Replay XHR”來重新運行一個XHR請求。

有時候我們需要把Network里面內容傳給別人,這時候可以在資源請求行的空白處右鍵然后選擇Save as HAR with Content保存為一個HAR文件。然后可以在一些第三方工具網站,比如這里重現網絡請求信息。

選定某一資源后,我們還可以Copy as cURL,也就是復制網絡請求作為curl命令的參數,詳細內容看 Copying requests as cURL commands

此外,我們還可以查看網絡請求的請求頭,響應頭,已經返回的內容等信息,如下圖:

image

資源的詳細內容有以下幾個:

HTTP request and response headers
Resource preview: 可行時進行資源預覽;
HTTP response: 未處理過的資源內容;
Cookie names and values: HTTP請求以及返回中傳輸的所有Cookies;
WebSocket messages: 通過WebSocket發送和接收到的信息;
Resource network timing: 圖形化顯示資源加載過程中各階段花費的時間。

注:

XPath 是一門在 XML 文檔中查找信息的語言。XPath 用于在 XML 文檔中通過元素和屬性進行導航。比如,

<a href="https://github.com/NUKnightLab/TimelineJS">這里</a>

這里a標簽的Xpath為:/html/body/div[2]/p[1]/a,解讀為:html里面body標簽的第二個div標簽的第一個p標簽下的a標簽。

三.Sources

用于查看和調試當前頁面所加載的腳本的源文件。

image

-通過左邊的內容源,打開對應的 JavaScript 文件,鼠標點擊文件的行號就可以設置和刪除斷點。添加的每個斷點都會出現在右側調試區的 Breakpoints 列表中,點擊列表中斷點就會定位到內容區的斷點上。如果你有多個文件、多個斷點的話,利用 Breakpoints 列表中的斷點快速定位非常方便。

-對于每個已添加的斷點都有兩種狀態:激活和禁用。剛添加的斷點都是激活狀態,禁用狀態就是保留斷點但臨時取消該斷點功能。在 Breakpoints 列表中每個斷點前面都有一個復選框,取消選中就將禁用該斷點。斷點位置的右鍵菜單中也可以禁用斷點。也可以在右側功能區上面Chrome 斷點設置 - hanguokai - 韓國愷的博客按鈕臨時禁用所有已添加的斷點,再點一下恢復原狀態。

-條件斷點:在斷點位置的右鍵菜單中選擇“Edit Breakpoint...”可以設置觸發斷點的條件,就是寫一個表達式,表達式為 true 時才觸發斷點。

-很多代碼是壓縮/混淆過的,點擊“{}”可以格式化代碼,再點一下就取消格式化。。

-在斷點調試時,可以用鼠標選擇想要查看的變量或表達式,然后右鍵菜單執行“Evaluate in Console”,就可以看到該表達式的當前的值了。

1.代碼斷點

設置斷點:在 Sources 面板 js 文件行號處設置斷點, 這里除了常規斷點外, 還有個條件斷點(右鍵 conditional breakpoint), 在設置的條件為 true 時才會斷電, 在循環中需要斷點時比較有用.
斷點后可以查看 堆棧, 變量 信息:

chrome調試工具常用功能整理

在調用堆棧這里可以切換到堆棧中的任何地方重新執行(右鍵restart frame), 如果想查看斷點前的信息時比較有用.

chrome調試工具常用功能整理

斷點后的變量保存到全局
選中變量, 右鍵 Evalute in console
在 console 中選中輸出的內容, 右鍵 store as global variable

chrome調試工具常用功能整理

2.事件斷點

元素上事件斷點:某一事件/某類事件
devtools 可以查看某一個元素上綁定了哪些事件: Elements > Event Listeners

chrome調試工具常用功能整理

3.DOM 斷點

一般是 dom 結構改變時觸發。 有時候我們需要監聽某個 DOM 被修改情況,而不關心是哪行代碼做的修改(也可能有多處都會對其做修改)。那么我們可以直接在 DOM 上設置斷點。

image

如圖所見,在元素審查的 Elements Panel 中在某個元素上右鍵菜單里可以設置三種不同情況的斷點:


子節點修改
自身屬性修改
自身節點被刪除

選中之后,Sources Panel 中右側的 DOM Breakpoints 列表中就會出現該 DOM 斷點。一旦執行到要對該 DOM 做相應修改時,代碼就會在那里停下來。

對上面元素上事件斷點(mouseover) 后不容易找到業務代碼, 使用 mutation 斷點, 斷點后配合 call stack 就可以找到業務代碼了, 如下圖

這種情況使用全局搜索(ctrl + shift + f) 代碼中 css classname 也能找到業務代碼, 然后直接斷點也可以。

4.XHR 斷點

右側調試區有一個 XHR Breakpoints,點擊+ 并輸入 URL 包含的字符串即可監聽該 URL 的 Ajax 請求,輸入內容就相當于 URL 的過濾器。如果什么都不填,那么就監聽所有 XHR 請求。一旦 XHR 調用觸發時就會在 request.send() 的地方中斷。

5.全局事件斷點

devtools 還可以對事件發生時斷點, 比如 click 發生時斷點, 這個跟 元素上事件斷點 不同, 不會限定在元素上, 只要是事件發生, 并且有 handler 就斷點; 還可以對 resize, ajax, setTimeout/setInterval 斷點.

下面這個圖是 resize 時中斷, 因為庫都代理了, 還需要在斷點處一步一步跟下去才能走到業務代碼中.

//@ sourceURL 給 eval 出來的代碼命名

有時候一些非常動態的代碼是以字符串的形式通過 eval() 函數在當前 Javascript context 中創建出來,而不是作為一個獨立的 js 文件加載的。這樣你在左邊的內容區就找不到這個文件,因此很難調試。其實我們只要在 eval 創建的代碼末尾添加一行 “//@ sourceURL=name“ 就可以給這段代碼命名(瀏覽器會特殊對待這種特殊形式的注釋),這樣它就會出現在左側的內容區了,就好像你加載了一個指定名字的 js 文件一樣,可以設置斷點和調試了。下圖中,我們通過 eval 執行了一段代碼,并利用 sourceURL 將它命名為 dynamicScript.js ,執行后左側內容區就出現了這個“文件”,而它的內容就是 eval 的中的內容。

Chrome 斷點設置 - hanguokai - 韓國愷的博客

還可以看看這個給動態編譯出來的 CoffeeScript 代碼命名的示例:

var coffee = CoffeeScript.compile(code.value)+ "//@ sourceURL=" + (evalName.value || "Coffeeeeeeee!");
eval(coffee);

實際上,//@ sourceURL 不僅僅可以用在 eval 的代碼中,任何 js 文件、甚至是 Javascript Console 輸入的代碼都可以用,效果一樣!

幾個常用的斷點快捷鍵:


F8: 繼續執行
F10: step over, 單步執行, 不進入函數
F11: step into, 單步執行, 進入函數
shift + F11: step out, 跳出函數
ctrl + o: 打開文件
ctrl + shit + o: 跳到函數定義位置
ctrl + shift + f: 所有腳本中搜索

四.TimeLine

用于查看腳本的執行時間、頁面元素渲染時間等信息。

jdfw

可結合Profiles進行JavaScript性能分析。

在開始做性能優化的時候要設置一個基線,來明確這個頁面的速度到底怎樣。在時間線(timeline)標簽下開始記錄,載入頁面然后停止記錄,這樣就設置了一個基線。(打開chrome開發者工具,點擊“時間線”標簽,然后點擊窗口底部圓形的黑色“記錄”圖標開始記錄)。chrome是智能的,只有頁面開始載入的時候才會開始記錄。一般多記錄幾次(約三次)然后取了平均值。

作者:jingwhale

轉自:http://www.cnblogs.com/jingwhale/p/4508774.html

轉載于:https://www.cnblogs.com/yuqlblog/p/4765577.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/258441.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258441.shtml
英文地址,請注明出處:http://en.pswp.cn/news/258441.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

新版Microsoft Edge支持跨平臺跨設備瀏覽

之前一直使用Google Chrome瀏覽器&#xff0c;可以隨意安裝插件擴展程序&#xff0c;無廣告&#xff0c;這是我鐘愛她的原因。但是之后不能登錄Google賬號&#xff0c;不能實現跨設備應用&#xff0c;就想找一款好用的替代品&#xff0c;近期發現了新版的Microsoft Edge&#x…

BZOJ1050 [HAOI2006]旅行

Description 給你一個無向圖&#xff0c;N(N<500)個頂點, M(M<5000)條邊&#xff0c;每條邊有一個權值Vi(Vi<30000)。給你兩個頂點S和T &#xff0c;求一條路徑&#xff0c;使得路徑上最大邊和最小邊的比值最小。如果S和T之間沒有路徑&#xff0c;輸出”IMPOSSIBLE”&…

biosrecovery什么意思_BIOS中的每個中文是什么意思

BIOS中的每個中文是什么意思&#xff0c;請對照的翻譯一下Time/System Time時間/系統時間Date/System Date日期/系統日期Level 2 Cache二級緩存System Memory系統內存Video Controller視頻控制器Panel Type液晶屏型號Audio Controller音頻控制器Modem Controller調制解調器(Mod…

百度網盤7.3.1.10版本增加工作空間功能,可實現百度網盤與電腦文件夾同步

百度網盤新增的工作空間是一款文件同步的產品&#xff0c;支持電腦本地與云端之間的文件同步&#xff0c;多設備間文件自動保持同步、支持查看文件每次都修改的歷史版本。功能類似于onedrive。如果有同步需求的小伙伴可以嘗試下載最新版的百度網盤試用該功能哦。下載網址&#…

ubuntu+idea intellij配置android開發環境

最近對移動開發產生興趣&#xff0c;決定在未來幾年內利用空余時間開發一些app或游戲什么的&#xff0c;鑒于ios開發成本較高&#xff0c;且自身對java相對熟悉&#xff0c;因此選擇了學習android。都說android市場不很很好&#xff0c;收益較難&#xff0c;但是仍覺得只要功夫…

typeof的用法

typeof可以返回變量的類型&#xff0c;返回值為字符串&#xff0c;其值有 "undefined" "boolean" "string" "number" "object" "function" 而 typeof(null)會返回object 轉載于:https://www.cnblogs.com/lhyhappy…

opencv 最大連通域_opencv 查找連通區域 最大面積實例

今天在弄一個查找連通的最大面積的問題。要把圖像弄成黑底&#xff0c;白字&#xff0c;這樣才可以正確找到。然后調用下邊的方法&#xff1a;RETR_CCOMP:提取所有輪廓&#xff0c;并將輪廓組織成雙層結構(two-level hierarchy),頂層為連通域的外圍邊界&#xff0c;次層位內層邊…

JS 函數柯里化

在計算機科學中&#xff0c;柯里化是把接受多個參數的函數變換成接受一個單一參數&#xff08;最初函數的第一個參數&#xff09;的函數&#xff0c;并且返回接受余下的參數而且返回結果的新函數的技術。——詳見 維基百科柯里化就是預先將某些參數傳入&#xff0c;得到一個簡單…

LTI系統的物理可實現性與希爾伯特變換

產品的設計一般為線性時不變系統&#xff0c;要求系統具有物理可實現性&#xff0c;從時域上看&#xff0c;h(t)具有因果性&#xff1b;從頻域上看&#xff0c;|H(jw)|符合佩利—維納準則。任何具有因果性的系統&#xff0c;|H(jw)|的實部R(w)滿足希爾伯特變換&#xff0c;|H(j…

垂死掙扎還是涅槃重生 -- Delphi XE5 公布會歸來感想

Delphi 是一個基本上被我遺忘的工具&#xff0c; 要不是在使用RapidSql , 我是收不到Embarcadero 公司發出的邀請來參加Delphi XE5的公布會的。 有人可能要問為什么是Embarcadero &#xff08;名稱很拗口&#xff09;而不是Borland 開Delphi 公布會&#xff0c; 這是由于Borla…

iOS Appstore 版本更新

1&#xff0c;版本更新 通過比較構建號/版本號 檢查更新 /// 構建號 50 // NSString * currentVersion [NSBundle mainBundle].infoDictionary["CFBundleVersion"];/// 版本號 2.2.0//CFBundleShortVersionStringNSString * currentVersion [NSBundle mainBund…

ubuntu下安裝國際版QQ

在網上看到了好多的ubuntu下安裝QQ的方法 好多 下面是看別人的文章 來測試的一篇 ubuntu下 安裝國際版QQhttp://www.ubuntukylin.com/applications/showimg.php?langcn&id23下載 地址網盤:http://yun.baidu.com/share/link?shareid2983202140&uk202032639下載好以后 …

傅里葉變換應用——信號調制與解調

傅里葉變換的典型應用主要用于通信的信號調制與解調&#xff0c;信號調制的目的是將信號進行變換&#xff0c;使其便于傳輸。頻率調制是將低頻信號調制到高頻載波信號上。同步信號解調是接受系統產生同步的高頻載波信號進行解調&#xff0c;從調制信號中恢復原信號的過程。調制…

cocos2d-x返回Android游戲黑屏解決辦法

返回Android游戲黑屏解決辦法這幾天逛cocos2d-x.org論壇&#xff0c;發現cocos2d-x的作者放出來一個帖子&#xff0c;用來解決返回Android游戲加載資源時黑屏的問題。帖子過些日子估計就沉了&#xff0c;所以轉出來&#xff0c;以供后面查詢。需要修改三個文件&#xff1a;1) c…

vue重要特性

重要特性 自定義input組件動態組件遞歸組件slot作用域slot異步組件內聯模板子組件索引進階 自定義指令狀態管理vuex單文件組件生產部署路由xxx

連續時間系統與離散時間系統的時域分析對比

通過學習離散時間系統的時域分析&#xff0c;發現其與連續時間系統的時域分析有很多相似之處&#xff0c;自己做了一個專題拓展&#xff0c;從數學模型描述到時域分析方法對兩大系統進行橫向對比&#xff0c;總結兩者之間的聯系和異同點。

python獲取當前時間的源代碼_Python獲取時間戳代碼實例

1、獲取秒級時間戳與毫秒級時間戳、微秒級時間戳import timeimport datetimet time.time()print (t) #原始時間數據print (int(t)) #秒級時間戳print (int(round(t * 1000))) #毫秒級時間戳print (int(round(t * 1000000))) #微秒級時間戳返回1499825149.257892 #原始時間數據…

AutoLayout bug集合

NSInternalInconsistencyException, reason: <NSISEngine: 0x16d5ef10>... http://stackoverflow.com/questions/28111635/ios-aspect-ratio-constraint-breaks-on-ios7-works-on-ios8 這好像是ios7.1的bug,對浮點數計算有誤,一般添加按鈕比例約束的時候multiplier值都是…

[SQL Server]重命名數據庫【轉】

原文鏈接&#xff1a;http://www.cnblogs.com/Ryan_j/archive/2011/04/03/2004428.html 重命名數據庫很簡單&#xff0c;選擇數據庫--右鍵--重命名數據庫 或者 sp_renamedb oldDB ,newDB 但是你再新建的相同名字的數據庫就會報錯&#xff0c;提示數據庫已經存在 比如test數據庫…

DCOS實踐分享(4):如何基于DC/OS整合SMACK(Spark, Mesos, Akka, Cassandra, Kafka)

這篇文章入選CSDN極客頭條 http://geek.csdn.net/news/detail/71572 當前&#xff0c;要保證業務的市場競爭力&#xff0c;僅靠設計一個可用并且好看的產品&#xff0c;已經完全不能滿足要求。全球消費者都希望產品能夠足夠的智能化&#xff0c;通過大數據分析來改善他們的用戶…