精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試官,我實現(xiàn)了一個 Chrome Devtools

網(wǎng)絡 通信技術
這種基于 websocket 的調(diào)試協(xié)議叫做 chrome devtools protocol。因為功能比較多,所以分了多個域(一般復雜的東西都會分域),包括 DOM、Debugger、Network、Page 等等,分別放不同的調(diào)試協(xié)議。

[[426371]]

網(wǎng)頁會加載資源、運行 JS、渲染界面、存儲數(shù)據(jù)等,我們開發(fā)時怎么看到執(zhí)行的狀態(tài)呢?用調(diào)試工具 chrome devtools。它支持 dom 調(diào)試、JS debugger、本地存儲的展示、運行時間的 profile 等。

Node.js 也是同樣,不過它只支持 JS debugger 和 profile。我們可以通過 chrome devtools 或者 vscode debugger 等來調(diào)試。

這些工具都是遠程 attach 到運行的程序上來調(diào)試的,之間怎么交互數(shù)據(jù)呢?通過 webSocket。而且還制定了 chrome devtools protocol 的協(xié)議,規(guī)定了有什么能力,如何通信。

這種基于 websocket 的調(diào)試協(xié)議叫做 chrome devtools protocol。因為功能比較多,所以分了多個域(一般復雜的東西都會分域),包括 DOM、Debugger、Network、Page 等等,分別放不同的調(diào)試協(xié)議。chrome devtools 就是通過這個協(xié)議實現(xiàn)的調(diào)試。

新版 chrome(金絲雀版)可以打開設置中的實驗特性的 Protocol Monitor 面板。

就可以看到傳輸?shù)?CDP 數(shù)據(jù):

這就是 chrome devtools 的原理。

理解了這個原理有什么用呢?

我們可以重新實現(xiàn)服務端,只要對接了調(diào)試協(xié)議,那么就能夠用 chrome devtools 來調(diào)試。

比如 kraken(把 css 渲染到 flutter)是怎么做到用 chrome devtools 調(diào)試 dom 和樣式的?就是對接了這個協(xié)議。

我們可以重新實現(xiàn)客戶端,只要對接了這個協(xié)議,那就可以用任何工具調(diào)試網(wǎng)頁/Node.js。

大家用 chrome devtools 可以調(diào)試 Node.js 和網(wǎng)頁,用 vscode debugger 也可以,用 webstorm debugger 也可以。為什么呢?因為它們都對接了這個協(xié)議。

那我們是不是可以對接這個協(xié)議實現(xiàn)一個類似 chrome devtools 的調(diào)試工具呢?

我們來實驗下:

我們啟動 chrome,通過 --remote-debugging-port 指定調(diào)試端口:

  1. /Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary --remote-debugging-port=9222 

然后連上它。

這里我們不用直接對接協(xié)議,chrome 提供了各種語言的 sdk,調(diào)用 api 就行:

我們先連接上 chrome:

  1. const CDP = require('chrome-remote-interface'); 
  2.  
  3. async function test() { 
  4.     let client; 
  5.     try { 
  6.         client = await CDP(); 
  7.         const { Page, DOM, Debugger } = client; 
  8.         //... 
  9.     } catch(err) { 
  10.         console.error(err); 
  11.     } 
  12. test(); 

然后打開 baidu.com,等 2s,做個截圖:

  1. const CDP = require('chrome-remote-interface'); 
  2. const fs = require('fs'); 
  3.  
  4. async function test() { 
  5.     let client; 
  6.     try { 
  7.         client = await CDP(); 
  8.         const { Page, DOM, Debugger } = client; 
  9.  
  10.         await Page.enable(); 
  11.         await Page.navigate({url: 'https://baidu.com'}); 
  12.  
  13.         await new Promise(resolve => setTimeout(resolve, 2000)); 
  14.   
  15.         const res = await Page.captureScreenshot(); 
  16.         fs.writeFileSync('./screenshot.jpg', res.data, { 
  17.             encoding: 'base64' 
  18.         }); 
  19.     } catch(err) { 
  20.         console.error(err); 
  21.     } 
  22. test(); 

查看下效果:

這樣,我們就跑通了 CDP 的第一段代碼。

其余的功能,包括 Network、Debugger、DOM 等等也能實現(xiàn),我們簡單試一下:

  1. await DOM.enable(); 
  2.  
  3. const { root } = await DOM.getDocument({ 
  4.     depth: -1 
  5. }); 

depth 為深度,設置為 -1 就是返回整個 dom:

有了這些數(shù)據(jù)我們是不是可以做 DOM 的瀏覽呢?

還有 DOM.setAttributeValue 可以設置屬性、DOM.getBoxModel 拿到盒模型大小等。

基于這些,我們做個 dom 編輯器沒問題吧。

還有網(wǎng)絡部分:

  1. await Network.enable(); 
  2. Network.on('responseReceived', async evt => { 
  3.     const res = await Network.getResponseBody({ 
  4.         requestId: evt.requestId 
  5.     }); 
  6.  
  7.     console.log(evt.response.url); 
  8.     console.log(res.body); 
  9. }); 

我們通過 responseReceived 事件監(jiān)聽每一個響應,然后再通過 Network.getResponseBody 拿到響應的內(nèi)容:

基于這些,我們實現(xiàn) Network 面板的功能沒問題吧。

還可以對接 profiler:

  1. await Profiler.start(); 
  2. await new Promise(resolve => setTimeout(resolve,2000)); 
  3. const { profile }  = await Profiler.stop(); 

有這些數(shù)據(jù),我們就可以通過 canvas 畫出個火焰圖出來。

理論上來說,chrome devtools 的所有功能我們都能實現(xiàn)。而且,一個網(wǎng)頁同時用多個調(diào)試工具調(diào)試是可以的,因為 websocket 本來就可以有多個客戶端。

可能你會說自己實現(xiàn) chrome devtools 有什么意義?

大家自己做開源前端項目的時候,一般都是寫個網(wǎng)易云音樂客戶端,因為有現(xiàn)成的數(shù)據(jù)可以用。那為什么不做個 chrome devtools 呢?也有現(xiàn)成的數(shù)據(jù)啊,啟動瀏覽器就行,而且這個逼格多高啊。

我們也不用實現(xiàn)完整的 chrome devtools,可以單把網(wǎng)絡部分、單把 DOM 部分、單把 debugger 部分實現(xiàn)了,可以做不同的 UI,可以做 chrome devtools 沒有的功能和交互。

比如你面試可視化崗位,你說你對接了 chrome devtools protocol 的 profiler 部分,用 canvas 畫了個火焰圖,會加分很多的。

總結(jié)

Chrome 的調(diào)試是通過 WebSocket 和調(diào)試客戶端通信,制定了 Chrome Devtools Protocol 的協(xié)議,Node.js 也是,不過協(xié)議叫做 V8 debugger protocol。我們可以通過 protocol monitor 的面板看到所有的 CDP 協(xié)議請求響應。

可以實現(xiàn) CDP 服務端,來對接 chrome devtools 的調(diào)試功能,調(diào)試不同的目標,比如 kraken 渲染引擎。

可以實現(xiàn) CDP 客戶端,來用不同的工具調(diào)試,比如 vscode debugger、webstorm debugger 等。

我們也可以通過 sdk 的 api 來和 CDP 服務端對接,拿到數(shù)據(jù),實現(xiàn)調(diào)試的功能。比如單獨實現(xiàn) DOM 編輯器、Network 查看器、JS Debugger、 Profiler 和火焰圖都可以,而且可以做到比 chrome devtools 更強的功能,更好的交互。

當大家想做開源項目沒有數(shù)據(jù)的時候,不妨考慮下做個 CDP 客戶端,這不比云音樂項目香么?

 

責任編輯:姜華 來源: 神光的編程秘籍
相關推薦

2020-05-13 14:35:47

HashMap面試官Java

2022-04-08 08:26:03

JavaHTTP請求

2025-10-20 04:00:00

2025-11-11 09:25:19

2017-03-16 15:27:10

面試官測試技術

2019-12-02 10:51:11

Redis存儲系統(tǒng)

2024-05-28 10:14:31

JavaScrip模板引擎

2021-06-09 07:55:19

NodeEventEmitte驅(qū)動

2021-12-02 08:19:06

MVCC面試數(shù)據(jù)庫

2020-09-08 06:43:53

B+樹面試索引

2023-07-31 08:26:09

2021-05-19 08:17:35

秒殺場景高并發(fā)

2022-01-10 11:04:41

單鏈表面試編程

2020-06-22 07:47:46

提交面試官訂單

2022-08-18 20:02:04

JSLRU緩存

2020-09-02 07:52:03

AOP測試環(huán)境

2024-04-09 08:39:16

本地緩存開發(fā)線程安全

2022-04-10 18:10:24

CURD鏈表

2020-09-17 17:53:12

面試ArrayList數(shù)組

2025-09-19 09:57:46

點贊
收藏

51CTO技術棧公眾號

欧美视频在线一区| 久久免费午夜影院| 欧美激情一级欧美精品| 99re这里只有| 桃花岛tv亚洲品质| 亚洲精品视频在线| 激情视频在线观看一区二区三区| 国产精品一区无码| 一区二区在线影院| 日韩精品极品在线观看| 国产日韩欧美久久| 91超碰在线播放| 国产精品网站导航| 国产伦精品一区二区三区在线 | 69久久久久| 国产精品18久久久久久久久 | 亚洲国产精品无码久久久| 久久久久美女| 亚洲人成电影网站色…| 佐佐木明希电影| yy6080久久伦理一区二区| 亚洲午夜精品在线| 中文字幕成人一区| 美女毛片在线看| 大白屁股一区二区视频| 成人黄色午夜影院| 日韩在线 中文字幕| 韩国在线视频一区| 久久精品久久久久久| 熟女少妇一区二区三区| 91成人在线精品视频| 欧美群妇大交群的观看方式| 日韩精品一区二区三区不卡| 久久亚洲资源| 一区二区三区四区激情| 在线看视频不卡| 高清性色生活片在线观看| 99久久婷婷国产| 3d动漫啪啪精品一区二区免费| 中文字幕+乱码+中文乱码91| 美女精品网站| 91黄色8090| 日韩精品无码一区二区| 禁久久精品乱码| 久久91亚洲人成电影网站 | 日韩电影一区| 亚洲嫩模很污视频| 日韩 中文字幕| 欧亚精品一区| 亚洲精品国产精品国自产在线| 中文字幕人妻一区| 最新精品在线| 欧美精品一区二区三区一线天视频| 宇都宫紫苑在线播放| 经典三级久久| 日韩三级免费观看| 91精品人妻一区二区三区四区| 国产午夜亚洲精品一级在线| 91精品国产综合久久香蕉麻豆| 欧美美女一级片| 亚洲精品伦理| 日韩欧美一二三| 久久无码专区国产精品s| 亚洲1区在线| 精品欧美久久久| 男人的天堂影院| 亚洲+小说+欧美+激情+另类 | 亚洲自拍偷拍色图| www.国产视频| 波多野结衣视频一区| 狠狠色噜噜狠狠色综合久| 同心难改在线观看| 国产亚洲欧美日韩俺去了| 亚洲国内在线| 最新黄网在线观看| 五月婷婷色综合| 啊啊啊一区二区| 成人性片免费| 日韩午夜精品电影| 亚洲久久久久久| 欧美丝袜一区| 欧美裸身视频免费观看| 久草国产精品视频| 日本特黄久久久高潮| 91九色国产视频| 欧美自拍第一页| 国产欧美精品国产国产专区| 亚洲免费视频播放| 午夜伦理福利在线| 欧美嫩在线观看| a级片在线观看视频| 精品国产一区二区三区久久久蜜臀| 日韩在线观看网址| 久久高清免费视频| 欧美aaaaaa午夜精品| 99九九视频| eeuss影院在线播放| 一级日本不卡的影视| 每日在线更新av| 国产 日韩 欧美| 亚洲精品有码在线| 成人免费视频国产免费观看| 一区二区三区精品视频在线观看| 国产精品视频永久免费播放| 亚洲奶汁xxxx哺乳期| 中文av一区二区| 怡红院av亚洲一区二区三区h| 亚州一区二区三区| 精品国产亚洲在线| 女性裸体视频网站| 噜噜噜躁狠狠躁狠狠精品视频 | 日本激情一区二区三区| 国产精品久久久久久久久久免费看 | 91精品国产自产在线观看永久∴| 4k岛国日韩精品**专区| 精品国产九九九| 国产精品久久久久毛片软件| 日韩少妇内射免费播放18禁裸乳| 亚洲日本va| 久久久精品国产| 亚洲永久精品一区| 久久综合久久久久88| 黄色激情在线视频| 精品国产亚洲一区二区在线观看| 亚洲天堂免费观看| 免费黄色网址在线| av高清不卡在线| 日本男女交配视频| 日韩黄色av| 久久亚洲精品小早川怜子66| 亚洲一级在线播放| 中文字幕免费一区| 久久精品一区二| 亚洲欧美日本伦理| 1769国产精品| 好吊色视频一区二区| 亚洲精品国久久99热| 欧美成人手机在线视频| 三区四区不卡| 国产九九精品视频| 一区二区高清不卡| 欧美色视频在线观看| 久久久久久国产免费a片| 久久久蜜桃一区二区人| 久久涩涩网站| 欧美一级大黄| 中文字幕免费精品一区高清| 波多野结衣绝顶大高潮| 中文字幕精品综合| 亚洲欧洲日本精品| 四季av一区二区凹凸精品| 国产精品久久久久久久久男 | 国产日韩欧美电影| 国产性生交xxxxx免费| 精品国产乱码| 国产日韩精品一区二区| 欧美18hd| 日韩一区二区三区免费观看| 妺妺窝人体色www聚色窝仙踪 | 男女视频在线| 亚洲白虎美女被爆操| 99热在线观看免费精品| 久久先锋影音av鲁色资源| 亚洲综合在线网站| 久久裸体网站| 国产福利久久精品| 亚洲第一av| 中文字幕亚洲精品| 国产av精国产传媒| 午夜视频一区二区| 91成人破解版| 国产在线精品免费av| 亚洲熟妇无码av在线播放| 日韩mv欧美mv国产网站| 国产精品高潮呻吟久久av野狼| 在线免费观看黄色| 精品成人私密视频| www.国产com| 亚洲天堂成人在线观看| 欧美日韩人妻精品一区在线| 日韩影院在线观看| 国产乱子伦精品视频| 亚洲影院天堂中文av色| 国产欧美韩国高清| 999av小视频在线| 国产一区二区三区免费视频| 99精品免费观看| 色一区在线观看| 久久国产波多野结衣| 北岛玲一区二区三区四区| 免费黄色特级片| 欧美日韩岛国| 日韩精品久久一区| 日韩一区二区三区色| 国产成+人+综合+亚洲欧洲| 国产在线高清视频| 亚洲精品视频在线播放| 精品人妻av一区二区三区| 91国内精品野花午夜精品| 国产精品白嫩白嫩大学美女| 国产日韩欧美精品在线| 国产国语老龄妇女a片| 免费的国产精品| 国产黄页在线观看| 欧美不卡视频| 亚欧精品在线| 少妇久久久久| 成人av中文| 亚洲美女色播| 国产精品视频不卡| 久久久男人天堂| 欧美国产视频一区二区| 91免费在线| 亚洲日本成人网| 欧美自拍第一页| 日韩一级黄色片| 夜夜狠狠擅视频| 色88888久久久久久影院按摩| 国产一级生活片| 亚洲视频免费在线| 一级片黄色录像| 久久久久久久一区| 中文在线永久免费观看| 成人激情文学综合网| 久久久九九九热| 精品中文字幕一区二区小辣椒| 日韩中文字幕组| 麻豆九一精品爱看视频在线观看免费| 成人免费性视频| 欧美午夜不卡| 成人免费a级片| 欧美激情亚洲| 欧美一区二区三区综合| 亚洲精品二区三区| 伊人久久青草| 国产精品7m凸凹视频分类| 天堂√在线观看一区二区| 教室别恋欧美无删减版| 日韩伦理一区二区三区av在线| 要久久电视剧全集免费| 欧美精品中文字幕一区二区| 一区二区导航| 欧美三日本三级少妇三99| 亚州综合一区| 免费日韩电影在线观看| 久久av影视| 日韩激情视频| 波多野结衣一区| 亚洲亚洲精品三区日韩精品在线视频| 国产成人黄色| 图片区小说区区亚洲五月| 清纯唯美亚洲综合一区| 亚洲精品一区二区三区av| 国产精品久久久久久久久妇女| 色噜噜狠狠一区二区三区| 成人情趣视频| 99亚洲精品视频| 亚洲精品91| 国产3p露脸普通话对白| 99视频精品| 热久久精品免费视频| 久久97超碰色| 在线播放第一页| 99国产欧美另类久久久精品| 人妻aⅴ无码一区二区三区 | 免费在线黄色片| 精品久久久久久久大神国产| 少妇高潮av久久久久久| 欧美日本精品一区二区三区| 成人激情四射网| 国产视频自拍一区| 91吃瓜网在线观看| 欧美高跟鞋交xxxxhd| 欧美激情网站| 国产这里只有精品| 6080亚洲理论片在线观看| 久久国产精品免费一区| 日本一区二区三区视频| 蜜臀在线免费观看| 亚洲在线一区| www.com久久久| bt7086福利一区国产| 黄大色黄女片18免费| 亚洲综合自拍偷拍| 狠狠狠狠狠狠狠| 日韩欧美在线影院| 欧美孕妇孕交xxⅹ孕妇交| 播播国产欧美激情| 欧美久久天堂| 91日本在线视频| 亚洲第一二三区| 日韩最新中文字幕| 玖玖视频精品| 最新国产精品自拍| 国产精品乱码一区二区三区软件 | 999福利在线视频| 国产日韩欧美成人| 欧美综合精品| 大陆极品少妇内射aaaaaa| 人人超碰91尤物精品国产| 91成人在线观看喷潮蘑菇| 国产精品欧美久久久久一区二区| 久久久久久久久久99| 欧美在线观看一区二区| 日韩一级片免费在线观看| 久久久国产精品x99av| 美女福利一区二区三区| 国产精品日韩一区二区| 久久一本综合| 免费观看成人网| www..com久久爱| 免费在线观看国产精品| 欧美福利视频一区| 九色在线播放| 91精品国产91久久久久久不卡| 国产精品欧美一区二区三区不卡 | 美女亚洲精品| 尤物在线精品| 国产麻豆剧传媒精品国产| 亚洲欧洲国产日韩| 亚洲一区中文字幕在线| 国产亚洲人成网站在线观看| 亚洲小少妇裸体bbw| 精品欧美一区二区久久久伦| 亚洲天堂成人| 人妻av一区二区三区| 亚洲天堂免费在线观看视频| 又骚又黄的视频| 亚洲深夜福利在线| 欧美大片1688| 欧美第一黄网| 久久狠狠一本精品综合网| 制服丝袜第一页在线观看| 亚洲香肠在线观看| www.黄色小说.com| 欧美日韩福利视频| 一本一道久久a久久| 国产在线观看欧美| 国产精品456| 精国产品一区二区三区a片| 制服丝袜亚洲播放| 黄色网址免费在线观看| 国产欧美日韩视频| 97精品视频| 国产高清999| 一区二区三区不卡视频| 亚洲第一黄色片| 97香蕉超级碰碰久久免费的优势| 狠狠久久伊人| 色欲av无码一区二区人妻| 久久男人中文字幕资源站| 人人妻人人爽人人澡人人精品 | 影音先锋中文在线视频| 产国精品偷在线| 亚洲美女毛片| 久久久精品人妻无码专区| 在线观看欧美黄色| 久热国产在线| 国产成人精品免费视频大全最热 | 992tv成人免费影院| 亚洲成在人线免费观看| the porn av| 亚洲男帅同性gay1069| 亚洲精品97久久中文字幕| 欧美亚洲国产精品| 成人激情在线| 三大队在线观看| 欧美日韩在线另类| 9色在线视频网站| 99久久国产免费免费| 亚洲一区二区三区高清不卡| 少妇人妻好深好紧精品无码| 欧美日本在线观看| 免费av不卡在线观看| 免费日韩电影在线观看| 美女爽到高潮91| 久久久全国免费视频| 亚洲欧美国产精品久久久久久久 | 久久99精品国产一区二区三区| 三级不卡在线观看| 清纯粉嫩极品夜夜嗨av| 精品视频www| 成人在线日韩| 亚洲熟妇av一区二区三区| 1024国产精品| 三级无遮挡在线观看| 国产日韩精品入口| 国产精品嫩草99av在线| 天天操天天摸天天舔| 亚洲成人性视频| 国产第一亚洲| 欧美精品自拍视频| 国产精品久久久久一区二区三区 | 久久久亚洲精品无码| 日本一区二区三区免费乱视频| 亚洲av色香蕉一区二区三区| 国产精品电影网| 亚洲人体偷拍| 神马久久精品综合| 亚洲欧洲第一视频|