国产av一二三区|日本不卡动作网站|黄色天天久久影片|99草成人免费在线视频|AV三级片成人电影在线|成年人aV不卡免费播放|日韩无码成人一级片视频|人人看人人玩开心色AV|人妻系列在线观看|亚洲av无码一区二区三区在线播放

網(wǎng)易首頁 > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

用Playwright打造你的專屬Web性能監(jiān)控腳本

0
分享至

在Web應(yīng)用開發(fā)過程中,前端性能測(cè)試是不可或缺的一環(huán)。隨著頁面復(fù)雜度與用戶體驗(yàn)要求越來越高,傳統(tǒng)的性能測(cè)試手段已難以滿足現(xiàn)代Web的精細(xì)化需求。Playwright 作為新一代自動(dòng)化測(cè)試框架,不僅支持多瀏覽器、多平臺(tái),還能深度集成性能指標(biāo)采集,成為Web性能測(cè)試領(lǐng)域的新寵。

本文將以一個(gè) Playwright性能測(cè)試腳本為例,深入剖析其設(shè)計(jì)思路、實(shí)現(xiàn)細(xì)節(jié)、關(guān)鍵指標(biāo)、實(shí)戰(zhàn)操作與優(yōu)化建議,幫助你從0到1構(gòu)建屬于自己的Web性能測(cè)試工具。



一、為什么選擇Playwright做性能測(cè)試?

1.1 傳統(tǒng)工具的局限

Lighthouse:適合單頁面、單次分析,自動(dòng)化批量測(cè)試不便。

Selenium:雖可自動(dòng)化,但性能指標(biāo)采集能力有限。

WebPageTest:更偏向于黑盒、網(wǎng)絡(luò)層面,難以細(xì)粒度采集前端關(guān)鍵指標(biāo)。

1.2 Playwright的優(yōu)勢(shì)

多瀏覽器支持:一套腳本可在Chromium、Firefox、WebKit上運(yùn)行。

異步API:高并發(fā)、低延遲,適合批量測(cè)試。

CDP協(xié)議集成:可直接獲取瀏覽器底層性能數(shù)據(jù)。

靈活的頁面操作:可模擬真實(shí)用戶行為,支持復(fù)雜交互。

易于擴(kuò)展:Python/Node.js等多語言支持,生態(tài)活躍。

二、腳本結(jié)構(gòu)與核心實(shí)現(xiàn)詳解

2.1 功能總覽



主要功能:

自動(dòng)化打開指定URL

多次迭代采集性能數(shù)據(jù)

統(tǒng)計(jì)并輸出關(guān)鍵性能指標(biāo)

生成詳細(xì)JSON報(bào)告與頁面截圖

2.2 主要流程

1. 參數(shù)解析:支持命令行傳入U(xiǎn)RL和迭代次數(shù)

2. 瀏覽器環(huán)境初始化:設(shè)置分辨率、User-Agent、時(shí)區(qū)等

3. 頁面加載與事件監(jiān)聽:采集控制臺(tái)、JS錯(cuò)誤、請(qǐng)求失敗等

4. 性能指標(biāo)采集:通過CDP和Performance API獲取各類指標(biāo)

5. 結(jié)果統(tǒng)計(jì)與評(píng)級(jí):多次迭代后輸出均值與Web Vitals評(píng)級(jí)

6. 報(bào)告與截圖輸出:保存JSON報(bào)告和頁面截圖

三、關(guān)鍵性能指標(biāo)全解

3.1 Web Vitals核心指標(biāo)

FCP(First Contentful Paint):首次內(nèi)容繪制時(shí)間,衡量頁面可見速度

LCP(Largest Contentful Paint):最大內(nèi)容繪制時(shí)間,衡量主內(nèi)容加載速度

CLS(Cumulative Layout Shift):累積布局偏移,衡量頁面視覺穩(wěn)定性

FID(First Input Delay):首次輸入延遲,衡量交互響應(yīng)速度

INP(Interaction to Next Paint):交互到下一幀,衡量復(fù)雜交互流暢性

3.2 其他重要指標(biāo)

TTFB(Time To First Byte):首字節(jié)到達(dá)時(shí)間,反映后端響應(yīng)速度

Speed Index:頁面內(nèi)容可見速度的綜合評(píng)分

TTI(Time To Interactive):可交互時(shí)間,衡量頁面完全可用的時(shí)機(jī)

主線程阻塞時(shí)間:反映JS執(zhí)行對(duì)主線程的占用

資源計(jì)數(shù)與大小:頁面加載的資源數(shù)量與體積

緩存命中率、圖片壓縮率:衡量資源優(yōu)化效果

四、核心代碼實(shí)現(xiàn)剖析

4.1 瀏覽器與上下文初始化



@font-face{font-family:"Times New Roman";}@font-face{font-family:"宋體";}@font-face{font-family:"Calibri";}p.MsoNormal{mso-style-name:正文;mso-style-parent:"";margin:0pt;margin-bottom:.0001pt;mso-pagination:none;text-align:justify;text-justify:inter-ideograph;font-family:Calibri;mso-fareast-font-family:宋體;mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;}span.msoIns{mso-style-type:export-only;mso-style-name:"";text-decoration:underline;text-underline:single;color:blue;}span.msoDel{mso-style-type:export-only;mso-style-name:"";text-decoration:line-through;color:red;}@page{mso-page-border-surround-header:no;mso-page-border-surround-footer:no;}@page Section0{}div.Section0{page:Section0;}```pythonasync with async_playwright() as p: browser = await p.chromium.launch(headless=True) context = await browser.new_context( viewport={'width': 1920, 'height': 1080}, user_agent='Mozilla/5.0 ...', locale='zh-CN', timezone_id='Asia/Shanghai', ) page = await context.new_page()```

headless模式:保證測(cè)試結(jié)果不受UI渲染干擾

分辨率/UA/時(shí)區(qū):模擬真實(shí)用戶環(huán)境,提升測(cè)試準(zhǔn)確性

4.2 事件監(jiān)聽與異常捕獲



@font-face{font-family:"Times New Roman";}@font-face{font-family:"宋體";}@font-face{font-family:"Calibri";}p.MsoNormal{mso-style-name:正文;mso-style-parent:"";margin:0pt;margin-bottom:.0001pt;mso-pagination:none;text-align:justify;text-justify:inter-ideograph;font-family:Calibri;mso-fareast-font-family:宋體;mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;}span.msoIns{mso-style-type:export-only;mso-style-name:"";text-decoration:underline;text-underline:single;color:blue;}span.msoDel{mso-style-type:export-only;mso-style-name:"";text-decoration:line-through;color:red;}@page{mso-page-border-surround-header:no;mso-page-border-surround-footer:no;}@page Section0{}div.Section0{page:Section0;}```pythonpage.on('console', lambda msg: console_messages.append(msg.text))page.on('pageerror', lambda err: js_errors.append(str(err)))page.on('requestfailed', lambda request: failed_requests.append({ 'url': request.url, 'error': request.failure.get('errorText', '')}))```

控制臺(tái)消息:捕獲JS日志與錯(cuò)誤

請(qǐng)求失?。憾ㄎ毁Y源加載異常

頁面錯(cuò)誤:收集未捕獲的JS異常

4.3 性能指標(biāo)采集

4.3.1 CDP協(xié)議獲取底層指標(biāo)



@font-face{font-family:"Times New Roman";}@font-face{font-family:"宋體";}@font-face{font-family:"Calibri";}p.MsoNormal{mso-style-name:正文;mso-style-parent:"";margin:0pt;margin-bottom:.0001pt;mso-pagination:none;text-align:justify;text-justify:inter-ideograph;font-family:Calibri;mso-fareast-font-family:宋體;mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;}span.msoIns{mso-style-type:export-only;mso-style-name:"";text-decoration:underline;text-underline:single;color:blue;}span.msoDel{mso-style-type:export-only;mso-style-name:"";text-decoration:line-through;color:red;}@page{mso-page-border-surround-header:no;mso-page-border-surround-footer:no;}@page Section0{}div.Section0{page:Section0;}```pythoncdp_session = await context.new_cdp_session(page)await cdp_session.send('Performance.enable')performance_metrics = await cdp_session.send('Performance.getMetrics')```

JS堆內(nèi)存、節(jié)點(diǎn)數(shù)等底層數(shù)據(jù),有助于分析內(nèi)存泄漏與DOM復(fù)雜度

4.3.2 Performance API獲取Web Vitals



@font-face{font-family:"Times New Roman";}@font-face{font-family:"宋體";}@font-face{font-family:"Calibri";}p.MsoNormal{mso-style-name:正文;mso-style-parent:"";margin:0pt;margin-bottom:.0001pt;mso-pagination:none;text-align:justify;text-justify:inter-ideograph;font-family:Calibri;mso-fareast-font-family:宋體;mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;}span.msoIns{mso-style-type:export-only;mso-style-name:"";text-decoration:underline;text-underline:single;color:blue;}span.msoDel{mso-style-type:export-only;mso-style-name:"";text-decoration:line-through;color:red;}@page{mso-page-border-surround-header:no;mso-page-border-surround-footer:no;}@page Section0{}div.Section0{page:Section0;}```pythonperformance_timing = await page.evaluate('''() => { const timing = performance.getEntriesByType('navigation')[0]; // ... return { domContentLoaded: timing.domContentLoadedEventEnd - timing.startTime, load: timing.loadEventEnd - timing.startTime, firstContentfulPaint: fcp, ttfb: ttfb, // ... };}''')```

導(dǎo)航、資源、繪制等多維度指標(biāo),全面反映頁面性能

4.3.3 復(fù)雜指標(biāo)異步采集

如 FID、INP、LCP、CLS、TTI 等需通過 `PerformanceObserver` 異步監(jiān)聽:







異步監(jiān)聽:保證捕獲到頁面生命周期內(nèi)的關(guān)鍵事件

超時(shí)兜底:防止頁面無交互時(shí)腳本卡死

4.4 結(jié)果統(tǒng)計(jì)與評(píng)級(jí)



多次迭代取均值,規(guī)避偶發(fā)波動(dòng)

Web Vitals分級(jí),一目了然定位性能短板

4.5 報(bào)告與可視化

JSON報(bào)告:結(jié)構(gòu)化存儲(chǔ),便于后續(xù)分析與可視化

頁面截圖:直觀記錄頁面狀態(tài),輔助問題定位





五、實(shí)戰(zhàn)操作指南

5.1 環(huán)境準(zhǔn)備

5.1.1 安裝依賴

@font-face{font-family:"Times New Roman";}@font-face{font-family:"宋體";}@font-face{font-family:"Calibri";}p.MsoNormal{mso-style-name:正文;mso-style-parent:"";margin:0pt;margin-bottom:.0001pt;mso-pagination:none;text-align:justify;text-justify:inter-ideograph;font-family:Calibri;mso-fareast-font-family:宋體;mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;}span.msoIns{mso-style-type:export-only;mso-style-name:"";text-decoration:underline;text-underline:single;color:blue;}span.msoDel{mso-style-type:export-only;mso-style-name:"";text-decoration:line-through;color:red;}@page{mso-page-border-surround-header:no;mso-page-border-surround-footer:no;}@page Section0{}div.Section0{page:Section0;}```bashpip install playwrightplaywright install```

5.1.2 運(yùn)行腳本

@font-face{font-family:"Times New Roman";}@font-face{font-family:"宋體";}@font-face{font-family:"Calibri";}p.MsoNormal{mso-style-name:正文;mso-style-parent:"";margin:0pt;margin-bottom:.0001pt;mso-pagination:none;text-align:justify;text-justify:inter-ideograph;font-family:Calibri;mso-fareast-font-family:宋體;mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;mso-font-kerning:1.0000pt;}span.msoIns{mso-style-type:export-only;mso-style-name:"";text-decoration:underline;text-underline:single;color:blue;}span.msoDel{mso-style-type:export-only;mso-style-name:"";text-decoration:line-through;color:red;}@page{mso-page-border-surround-header:no;mso-page-border-surround-footer:no;}@page Section0{}div.Section0{page:Section0;}```bashpython xxx.py https://your-website.com 5```

第一個(gè)參數(shù)為待測(cè)URL

第二個(gè)參數(shù)為迭代次數(shù)(可選,默認(rèn)3次)

5.2 結(jié)果解讀

運(yùn)行結(jié)束后,終端會(huì)輸出如下信息:



單次與均值對(duì)比:可發(fā)現(xiàn)性能波動(dòng)與趨勢(shì)

評(píng)級(jí)直觀:快速定位需優(yōu)化的指標(biāo)

JSON報(bào)告:可用于后續(xù)數(shù)據(jù)分析、趨勢(shì)監(jiān)控

5.3 報(bào)告結(jié)構(gòu)說明

JSON報(bào)告主要包含:

`individualResults`:每次迭代的詳細(xì)指標(biāo)

`averages`:各項(xiàng)指標(biāo)均值

`ratings`:Web Vitals評(píng)級(jí)

可結(jié)合Excel、BI工具或自定義腳本進(jìn)行可視化分析。



??轉(zhuǎn)崗軟件測(cè)試/野路子技能提升

??想了解更多漲薪技能提升方法

??可以到我的個(gè)人號(hào):atstudy-js

即可加入領(lǐng)取 ??????

轉(zhuǎn)行、入門、提升、需要的各種干貨資料

內(nèi)含AI測(cè)試、 車載測(cè)試、AI大模型開發(fā)、BI數(shù)據(jù)分析、銀行測(cè)試、游戲測(cè)試、AIGC

六、進(jìn)階與擴(kuò)展建議

6.1 多端/多瀏覽器測(cè)試

可通過參數(shù)化 `p.chromium` 為 `p.firefox` 或 `p.webkit`,實(shí)現(xiàn)多瀏覽器對(duì)比

可批量測(cè)試PC、移動(dòng)端不同分辨率與UA

6.2 CI/CD集成

可將腳本集成至Jenkins、GitHub Actions等CI流程

自動(dòng)化回歸測(cè)試,及時(shí)發(fā)現(xiàn)性能回退

6.3 指標(biāo)擴(kuò)展

可采集自定義業(yè)務(wù)指標(biāo),如首屏渲染、關(guān)鍵元素可見等

可集成APM、日志系統(tǒng),關(guān)聯(lián)后端性能

6.4 可視化與告警

可將JSON結(jié)果推送至Prometheus、Grafana等監(jiān)控平臺(tái)

設(shè)定閾值自動(dòng)告警,保障用戶體驗(yàn)

6.5 代碼優(yōu)化建議

異步并發(fā):可批量并發(fā)測(cè)試多個(gè)URL,提升效率

異常處理:完善異常捕獲與重試機(jī)制,提升健壯性

參數(shù)配置:支持通過配置文件批量管理測(cè)試用例

七、常見問題與排查

7.1 頁面未加載或超時(shí)

檢查URL是否可訪問

增大 `timeout` 參數(shù)

檢查網(wǎng)絡(luò)代理、防火墻設(shè)置

7.2 指標(biāo)異?;?yàn)?

某些指標(biāo)需頁面有真實(shí)交互或特定內(nèi)容

檢查頁面是否有FCP/LCP等事件

檢查腳本是否有權(quán)限訪問Performance API

7.3 結(jié)果波動(dòng)大

建議多次迭代取均值

避免測(cè)試期間網(wǎng)絡(luò)波動(dòng)、服務(wù)器重啟等外部干擾

八、結(jié)語

Playwright為Web性能測(cè)試帶來了前所未有的靈活性與深度。通過本文詳解的實(shí)戰(zhàn)腳本與原理剖析,你可以輕松搭建起一套專業(yè)級(jí)的性能測(cè)試體系,實(shí)現(xiàn)從單頁到全站、從本地到CI的全流程自動(dòng)化性能監(jiān)控。

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關(guān)推薦
熱點(diǎn)推薦
上海醫(yī)院最好的“眼耳鼻喉”科室排名,建議先收藏

上海醫(yī)院最好的“眼耳鼻喉”科室排名,建議先收藏

華庭講美食
2026-02-28 19:54:50
“聯(lián)系大使館!必須派飛機(jī)!”

“聯(lián)系大使館!必須派飛機(jī)!”

百態(tài)人間
2026-02-05 15:35:32
周扒皮都怕!女兒替父請(qǐng)假2小時(shí)遭辭退,店已關(guān)門,老板底褲被扒

周扒皮都怕!女兒替父請(qǐng)假2小時(shí)遭辭退,店已關(guān)門,老板底褲被扒

千言娛樂記
2026-02-28 14:42:55
千萬網(wǎng)紅“一栗小莎子”確診癌癥,不良惡習(xí)害了她,兒子不到兩歲

千萬網(wǎng)紅“一栗小莎子”確診癌癥,不良惡習(xí)害了她,兒子不到兩歲

溫讀史
2026-01-24 07:39:28
霍爾木茲陷入停滯?券商策略會(huì)火爆!國際暗金飆至5500?張憶東研判

霍爾木茲陷入停滯?券商策略會(huì)火爆!國際暗金飆至5500?張憶東研判

金石隨筆
2026-03-01 00:10:48
陳幸同意難平,不僅因?yàn)?:4慘敗陳熠,更多在于以下這四點(diǎn):

陳幸同意難平,不僅因?yàn)?:4慘敗陳熠,更多在于以下這四點(diǎn):

林子說事
2026-02-28 19:37:05
慌了!東莞南城要跌破1字頭了……

慌了!東莞南城要跌破1字頭了……

樓市滅霸
2026-02-28 22:56:28
丈夫影院暴打男小三,妻子帶娃出軌視頻曝光,真容被扒后續(xù)更炸裂

丈夫影院暴打男小三,妻子帶娃出軌視頻曝光,真容被扒后續(xù)更炸裂

壹月情感
2026-02-28 14:02:30
官宣在即!阿森納 5100 萬敲定后防新核,巴薩趁機(jī)挖角!

官宣在即!阿森納 5100 萬敲定后防新核,巴薩趁機(jī)挖角!

瀾歸序
2026-03-01 06:17:05
人可以狠心到什么程度?看網(wǎng)友講述,發(fā)現(xiàn)我真做不到這般絕

人可以狠心到什么程度?看網(wǎng)友講述,發(fā)現(xiàn)我真做不到這般絕

侃神評(píng)故事
2026-02-27 07:40:03
CP感真玄學(xué),25歲陳飛宇和38歲陳曉,同演孫千愛人,但差距太明顯

CP感真玄學(xué),25歲陳飛宇和38歲陳曉,同演孫千愛人,但差距太明顯

亦暖追劇隨筆
2026-02-28 17:24:22
2-0進(jìn)四強(qiáng)!中國女網(wǎng)15歲天才新星閃耀成人賽:追趕鄭欽文王欣瑜

2-0進(jìn)四強(qiáng)!中國女網(wǎng)15歲天才新星閃耀成人賽:追趕鄭欽文王欣瑜

李喜林籃球絕殺
2026-02-28 10:09:14
汪小菲吐槽小汪寶心眼太多,回應(yīng)玥箖上學(xué)問題,筱梅或成了導(dǎo)火索

汪小菲吐槽小汪寶心眼太多,回應(yīng)玥箖上學(xué)問題,筱梅或成了導(dǎo)火索

查爾菲的筆記
2026-02-28 13:39:27
美以宣布哈梅內(nèi)伊已身亡,伊朗否認(rèn);伊朗關(guān)閉霍爾木茲海峽;多家航司出臺(tái)中東航線退改方案;伯克希爾哈撒韋去年凈利潤669億美元丨每經(jīng)早參

美以宣布哈梅內(nèi)伊已身亡,伊朗否認(rèn);伊朗關(guān)閉霍爾木茲海峽;多家航司出臺(tái)中東航線退改方案;伯克希爾哈撒韋去年凈利潤669億美元丨每經(jīng)早參

每日經(jīng)濟(jì)新聞
2026-03-01 07:07:07
一句臟話葬送22年努力!看著滿頭白發(fā)的周煒,郭冬臨效應(yīng)還在繼續(xù)

一句臟話葬送22年努力!看著滿頭白發(fā)的周煒,郭冬臨效應(yīng)還在繼續(xù)

姩姩有娛
2026-02-26 14:48:49
你聞過最難聞的味道是什么?網(wǎng)友:分手多年,依然忘不了她的味道

你聞過最難聞的味道是什么?網(wǎng)友:分手多年,依然忘不了她的味道

另子維愛讀史
2026-01-03 21:33:36
壽命延長40倍?Cell:高劑量維生素B3(NR),逆轉(zhuǎn)致死性代謝缺陷

壽命延長40倍?Cell:高劑量維生素B3(NR),逆轉(zhuǎn)致死性代謝缺陷

時(shí)光派健康抗衰
2026-02-27 17:52:58
伊朗宣布啟動(dòng)“誠實(shí)承諾4號(hào)”大規(guī)模軍事行動(dòng)

伊朗宣布啟動(dòng)“誠實(shí)承諾4號(hào)”大規(guī)模軍事行動(dòng)

每日經(jīng)濟(jì)新聞
2026-02-28 18:47:10
曼聯(lián)更衣室呼吁轉(zhuǎn)正卡里克,三大佬力挺!索斯蓋特明確拒執(zhí)教紅魔

曼聯(lián)更衣室呼吁轉(zhuǎn)正卡里克,三大佬力挺!索斯蓋特明確拒執(zhí)教紅魔

羅米的曼聯(lián)博客
2026-03-01 09:53:10
美國關(guān)閉GPS,導(dǎo)彈依舊精準(zhǔn)轟炸以色列,誰干的?中國還是俄羅斯

美國關(guān)閉GPS,導(dǎo)彈依舊精準(zhǔn)轟炸以色列,誰干的?中國還是俄羅斯

高山非凡創(chuàng)作
2024-05-09 05:48:13
2026-03-01 10:27:00
51Testing軟件測(cè)試網(wǎng) incentive-icons
51Testing軟件測(cè)試網(wǎng)
中國軟件測(cè)試人的精神家園
1528文章數(shù) 13252關(guān)注度
往期回顧 全部

科技要聞

狂攬1100億美元!OpenAI再創(chuàng)融資神話

頭條要聞

牛彈琴:中東大戰(zhàn)開始 有三個(gè)可怕的后果

頭條要聞

牛彈琴:中東大戰(zhàn)開始 有三個(gè)可怕的后果

體育要聞

球隊(duì)主力全報(bào)銷?頂風(fēng)擺爛演都不演了

娛樂要聞

周杰倫兒子正面照曝光,與父親好像

財(cái)經(jīng)要聞

沖突爆發(fā) 市場(chǎng)變天?

汽車要聞

嵐圖泰山黑武士版3月上市 搭載華為四激光智駕方案

態(tài)度原創(chuàng)

藝術(shù)
本地
房產(chǎn)
手機(jī)
教育

藝術(shù)要聞

這9個(gè)字讓你懷舊,能全認(rèn)出就是真正的書法家!

本地新聞

津南好·四時(shí)總相宜

房產(chǎn)要聞

濱江九小也來了!集齊海僑北+哈羅、寰島...江東教育要炸了!

手機(jī)要聞

更新包超10GB:華為鴻蒙HarmonyOS 6.0.0.328花粉Beta版開推

教育要聞

專業(yè)排名百分比揭秘!別再理解錯(cuò)了

無障礙瀏覽 進(jìn)入關(guān)懷版