<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      vivo 前端三劍客發展歷程及原理揭秘

      作者: vivo 互聯網前端團隊- Han Xuejian、Zhang Hao

      異地協作模式,給開發和測試間的問題溝通及定位帶來了諸多挑戰。本文從前端開發視角出發, 闡述在這過程中遇到的痛點,探索解決的思路,并在過程中成功孵化出技術工具“前端三劍客”,文章深入解析了“前端三劍客”技術的實現原理及應用場景。

      1分鐘看圖掌握核心觀點??

      圖片

      一、背景

      隨著公司業務的不斷發展,異地協作成為一種常態,距離無疑給我們的溝通帶來了很多不便,尤其是給問題反饋及解決增加了更多的成本,在這過程中我們遇到了很多痛點

      痛點一:溝通效率低

      開發和測試只能通過消息或者電話進行溝通,為了將問題描述清晰,雙方需要反復交流,有時還需提供錄屏、截圖以及抓包等信息,整個過程耗時長、效率低。

       

      痛點二:復現難、定位難

      經常會出現一些問題,開發在本地無法復現,需要使用特定的手機進行復現、解決。

       

      痛點三:抓包協作難

      分析問題時,經常需要抓包,但是目前主流的抓包工具都是1對1,對于異地實時抓包不是很方便,而且分享抓包內容也比較繁瑣,無法在線實時查看。

       

      為解決這些問題,我們基于開源工具與自研技術棧,孵化出前端三劍客

      • 利劍一:錄制回放工具 - 讓溝通更簡單

      • 利劍二:遠程調試工具 - 像本地調試一樣調試遠程機器

      • 利劍三:WEB多人抓包代理工具 - 在線抓包,更簡單、更實時、更便捷

      這是一套覆蓋問題復現、遠程調試、便捷抓包的一整套解決方案,助力開發人員快速、精準地分享解決問題。

       

      二、利劍一:錄制回放工具

      2.1 工具介紹

      對于前端開發而言,和測試溝通問題時,問的最多的幾個問題:

      • 你是怎么操作的?

      • 控制臺有什么報錯嗎?

      • 抓個包給我看下接口請求數據吧?

       

      總結歸納起來就是以下三點:

      圖片

       

      基于以上的述求,我們基于開源框架rrweb,實現了從前臺接入管理、后臺回放管理及權限管控的一站式錄制回放平臺,接入簡單,一鍵便可錄制宿主信息、操作過程、接口信息、日志信息等數據。

       

      錄制過程

      接入錄制回放工具后,頁面會出現一個懸浮球,用于開啟和提交錄制信息,錄制完成后,會生成在線回放地址。錄制過程如下圖所示:

      圖片

       

      回放過程

      錄制成功后,后臺管理系統中便能查詢到該條錄制信息,點擊回放,可以看到該問題的操作過程,以及瀏覽器信息、接口信息、日志信息等數據,如下圖所示:

      圖片

       

      整個操作的流程如下圖:

       

      2.2 接入方式

      我們提供了一個在線sdk,用戶只需引入該js文件,進行初始化即可使用:

      圖片

       

      2.3 實現原理

      記錄頁面 DOM 變化

      錄制過程:

      在初始化時使用document.cloneNode(true) 方獲取頁面的全量 DOM 快照,之后通過 Mutation-

      Observer 監聽器監控頁面的各種變化,如 DOM 的增刪改、鼠標移動、滾動以及頁面大小調整等,當這些變化發生時,會將變化信息序列化為 JSON 格式的數據并存儲起來。

       

      回放過程:讀取記錄的 JSON 數據,解析出頁面的初始快照以及各個操作事件的時間序列,根據初始快照重建頁面的 DOM 樹,然后按照事件的時間順序逐步應用每個操作事件。

      圖片

       

      接口錄制

      通過對全局XMLHttpRequest進行重寫進行接口的攔截處理。

      圖片

       

      日志錄制

      通過對全局console.log進行重寫

      圖片

       

      2.4 遇到的問題

      問題1:跨頁面錄制

      我們是通過在index.html中引入sdk,對于單頁應用,切換路由時,錄制可以連貫的銜接上,但是當遇到多頁面的應用時,切換頁面,會重新加載sdk,這樣數據就會丟失,無法進行銜接,所以我們需要在切換頁面時將錄制數據存在本地,進入下一個頁面時,獲取這些數據進行合并,如下圖:

      圖片

       

      問題2:iframe頁面無法錄制

      對于很多后臺的項目,可能存在很多iframe嵌入的子項目,如果iframe中的內容與父頁面不在同一個域下,為了能夠正常錄制iframe中的內容,需要進行跨域處理,在iframe的頁面中也嵌入sdk,并設置相應的跨域屬性,記錄數據,并通過iframe.content-

      Window.postMessage來同步數據到主頁面中。

       

      三、利劍二:遠程調試工具

      3.1 工具介紹

      遠程調試工具是基于開源工具chii進行二次封裝,相較于vConsole,chii讓跨設備、跨網絡的Web應用調試變得簡單便捷。通過遠程連接的方式,像本地數據線連接手機一樣,在本地的chrome Devtools中進行問題定位,實現和在chrome://inspect中一樣的設備調試效果。遠程調試工具很好的解決了開發因為本地無法復現,需要測試同學手上特定機器才能復現的問題,同時可以在遠程看到頁面實時運行的日志、接口等信息,大大提升問題定位效率。

       

      下面是整個操作步驟

      第一步:如下圖,點擊頁面中的懸浮球,出現遠程調試按鈕,點擊可以開啟遠程調試。

      圖片

       

      第二步:在管理平臺的遠程列表中可以看到所有連接的設備。

      圖片

       

      第三步:遠程查看,點擊上一步驟中的inspect按鈕,可以進入如下調試頁面。

      圖片

       

      第四步:雙向操作同步

      在手機執行操作,遠程界面同步發生變化,實時顯示請求和日志,同樣如果遠程修改樣式或者執行操作,手機端也會同步執行相同操作。

       

      3.2 接入方式

      圖片

       

      3.3 實現原理

      遠程調試工具主要包括三個部分:客戶端中轉服務遠程調試端(devtools)

      它們的運轉模式如下圖:

      圖片

       

      第一步:啟動一個node服務作為中轉服務器,然后創建webSocket服務用來連接客戶端和遠程調試端。

      圖片

       

      第二步:在客戶端需要調試的網頁中注入target.js 腳本,該腳本會創建 WebSocket 連接,通過訂閱發布來監聽DOM、Log、Network、Css、Storage、Debug等相關操作指令。

      圖片

       

      第三步:遠程調試界面通過CDP(Chrome DevTools Protocol)協議來和服務進行通信,當執行控制模板某項操作時,比如點擊DevTools中的“Elements”面板來檢查頁面元素,DevTools會通過CDP向服務發送一個命令,請求DOM樹信息,服務接收到這個命令后,通過渲染進程查詢具體的DOM信息,并將結果返回給DevTools,DevTools前端再將這些信息可視化呈現給開發者。

       

      四、利劍三:WEB多人抓包代理工具

      4.1 工具介紹

      工作中經常需要抓包、代理等操作,主流的抓包工具有:Charles、Fiddler等,這些工具都必須安裝客戶端,且都是1對1的,對多人協助不是很友好。比如:開發需要獲取測試同學的的抓包信息分析問題時,目前都是測試同學把報文導出來,發給開發,開發再去導入到工具里面進行分析。

       

      在此背景下,我們就在思考,能否實現一個在線的抓包、代理平臺,讓大家使用方便、分享方便,降低門檻。于是就有了這款工具的誕生,工具是基于mitmproxy進行了二次開發,容器化部署了一套在線代理服務,只需通過瀏覽器就能實現抓包、代理等操作。

       

      該在線抓包工具具備如下優勢

      • 簡單: 無需安裝客戶端,有瀏覽器就能使用,易上手。

      • 方便: 直接在瀏覽器中進行抓包,而且可通過鏈接分享給他人。

      • 易用: 支持斷點、修改報文,集成了錄制回放工具、遠程調試工具,且支持開發、測試、線上環境任意切換。

       

      4.2 使用簡介

      設置代理

      用戶可以通過手機安裝的App掃描頁面上二維碼,建立連接,也可以直接在手機WIFI代理設置中輸入固定的代理IP和端口號。

      圖片

       

      抓包、代理

      代理成功后,自動跳轉到抓包頁面,頁面中會顯示當前設備,也支持新增設備,可以同時對多個設備進行抓包、代理。并且支持對報文的篡改及環境的代理。

      圖片

       

      工具注入

      我們還在抓包工具中集成了上面的錄制回放工具和遠程調試工具,只需要打開開關,便會去識別入口html,動態注入工具的sdk,并進行初始化,這樣用戶再次刷新頁面時,頁面中便會出現工具的懸浮球。

      圖片

       

      環境切換

      工作中還涉及到一個場景,在產品和UI驗收時,由于驗收環境都是在測試環境,需要配置host,對于產品和UI同學來講,環境的配置其實是比較陌生的,為了方便驗收,我們提供了一鍵切換環境的能力。用戶只需要在頁面上選擇自己的項目,然后開啟對應的環境,這樣手機環境便能切換過來。

      圖片

       

      4.3 實現原理

      在mitmproxy基礎上,根據設備ip對攔截的請求進行分類,當用戶查看抓包數據時,通過ip進行過濾,這樣就可以只看到自己ip的抓包數據。

      圖片

       

      4.4 問題解決

      4.4.1 如何實現1對N

      既然是在線抓包服務,那每個人肯定都是獨立的,不能相互影響,如何讓1個代理服務支持多人操作就成了問題。

       

      解決方案:

      • 用戶連接代理后,代理服務器可以獲取到用戶的IP地址,根據IP地址分別進行分發及報文存儲。

      • 前臺查詢時,終端ip地址作為入參,便只會查詢當前ip相關的抓包信息。

      • 前臺修改報文、環境等信息時,代理服務器會根據ip分別存儲修改后的信息。

       

      4.4.2 性能問題

      多人在線抓包時,報文數據量非常大,幾十萬甚至上百萬條,而且單條報文數據量也非常的大,包括:請求頭、響應頭、響應內容等等,所以如何快速查詢及展示就成了問題。

       

      解決方案:

      • 采用虛擬滾動列表,提升頁面流暢性。

      • 優化報文結構,列表只返回固定的幾個字段,等點擊時再去查詢報文詳情。

      • 優化后,即使上萬條報文也能很快返回,用戶操作也不會卡頓。

      // 報文結構
      [{
          "id": "ccae12b0-a4f9-4379-98df-03360b6a3912",
          "s": 200,
          "m": "POST",
          "u": "https://bbs.vivo.com.cn/",
          "z": 649,
          "b": 1742888674.46417,
          "e": 1742888674.51759
        },
        ...
      ]

       

      五、總結

      整體回顧下,本文主要介紹了開發同學在項目中遇到的問題定位、溝通等痛點,通過對痛點的拆解和思考,孵化出三個在前端項目中提升效率的工具:

      • 錄制回放:精準還原問題出現的場景,提供分析問題所需的必要數據(環境、日志、抓包、操作過程等),提升解決問題的效率。

      • 遠程調試:遠程直連真機進行調試,快速解決特定機型的問題。

      • 多人抓包:讓抓包變的更加便捷,在線即可完成,極大地提高了團隊在抓包調試工作中的協作效率。

       

      希望本文采取的方案以及解決問題的思路對你能有所幫助,也歡迎在評論區一起交流討論。

      posted @ 2025-10-23 10:58  vivo互聯網技術  閱讀(116)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 一区一区三区产品乱码| 亚洲国产在一区二区三区| 91久久天天躁狠狠躁夜夜 | 久激情内射婷内射蜜桃| 久久精品女人天堂av免费观看| 粉嫩一区二区三区粉嫩视频| 美女黄网站人色视频免费国产 | 日本东京热不卡一区二区| 国产尤物精品自在拍视频首页| 一日本道伊人久久综合影| 亚欧洲乱码视频在线观看| 漂亮的保姆hd完整版免费韩国| 国产在线观看网址不卡一区| 永久免费无码av在线网站| 国产精品免费观在线| 老子午夜精品888无码不卡 | 国产精品国产高清国产一区| 四虎国产精品免费久久| 无码国内精品久久人妻蜜桃| 汉源县| 成人一区二区三区在线午夜| 青青草无码免费一二三区| 国产精品理论片| 2021av在线天堂网| 香蕉在线精品一区二区| 久久婷婷五月综合色国产免费观看| 97视频精品全国免费观看 | 久久久久久久久久久免费精品| 国产亚洲精品成人aa片新蒲金| 国精品91人妻无码一区二区三区| 久久综合给合久久狠狠狠| 亚洲男人天堂2018| 亚洲精品中文字幕无码蜜桃 | 亚洲av天堂天天天堂色| 国产成人综合色视频精品| 高清一区二区三区不卡视频| 日韩人妻无码精品系列| 福利一区二区在线播放| 成人特黄特色毛片免费看| 97色伦97色伦国产| 成A人片亚洲日本久久|