前言
在測試Web頁面加載時間時,可能會是這樣的:
- 打開chrome瀏覽器。
- 按F12打開開發者工具。
- 在瀏覽器上打開要測試的頁面
- 查看開發者工具中Network面板的頁面性能數據並記錄
- 或者在開發者工具中Console面板運行
performance.timing
和performance.getEntries()
收集數據
performance相關信息看這里PerformanceTiming
幾十上百個頁面,每個版本都這樣來,估計瘋了,所以就想怎么把它做成自動化呢?
chrome devtools protocol
chrome devtools protocol允許第三方對基於chrome的web應用程序進行調試、分析等,它基於WebSocket,利用WebSocket建立連接DevTools和瀏覽器內核的快速數據通道。一句話,有了這個協議就可以自己開發工具獲取chrome的數據
協議詳細內容看這里chrome devtools protocol
目前已經有很多大神針對這個協議封裝出不同語言(nodejs,python,java...)的庫,詳細信息看這里awesome-chrome-devtools
這邊我選擇的是python的pychromegithub地址,使用方法很簡單,直接看github上它的Demo
這個庫依賴websocket-client
獲取performance api數據
這里使用Runtime Domain中運行JavaScript腳本的APIRuntime.evaluate
# 開始前先啟動chrome,啟動chrome必須帶上參數`--remote-debugging-port=9222`開啟遠程調試否則無法與chrome交互
browser = pychrome.Browser('http://127.0.0.1:%d' % 9222)
tab = browser.new_tab()
tab.start()
tab.Runtime.enable()
tab.Page.navigate(url={你的頁面地址})
# 設置等待頁面加載完成的時間
tab.wait(10)
# 運行js腳本
timing_remote_object = tab.Runtime.evaluate(
expression='performance.timing'
)
# 獲取performance.timing結果數據
timing_properties = tab.Runtime.getProperties(
objectId=timing_remote_object.get('result').get('objectId')
)
timing = {}
for item in timing_properties.get('result'):
if item.get('value', {}).get('type') == 'number':
timing[item.get('name')] = item.get('value').get('value')
# 獲取performance.getEntries()數據
entries_remote_object = tab.Runtime.evaluate(
expression='performance.getEntries()'
)
entries_properties = tab.Runtime.getProperties(
objectId=entries_remote_object.get('result').get('objectId')
)
entries_values = []
for item in entries_properties.get('result'):
if item.get('name').isdigit():
url_timing_properties