開發人員工具啟動速度比現在快 13% 🎉? (從 11.2 秒降至 10 秒)
TL;DR;移除多餘序列化即可達成。
總覽
當開發人員工具啟動時,需要對 V8 JavaScript 引擎進行一些呼叫。
Chromium 用來將開發人員工具指令傳送至 V8 (一般來說用於 IPC) 的機制稱為 mojo
。我的團隊成員 Benedikt Meurer 和 Sigurd Schneider 發現另一項工作時效率不彰,決定把收發這些郵件的兩個多餘步驟移除,設法改善這個流程。
現在來看看 mojo
機制的運作方式!
mojo
機制
有一個 mojo 指令 EvaluateScript
,可執行 JS 指令。這個外掛程式會將整個 JS 指令 (包含 arguments
) 序列化為可eval()
的 JavaScript 原始碼字串。正如您所想,這些字串可能會變得很長且昂貴。在 V8 接收指令後,這些 JavaScript 程式碼字串會在執行前反序列化。這種處理每則訊息的序列化與反序列化程序,會產生大量的負荷。
Benedikt Meurer 發現,arguments
的序列化和去序列化非常昂貴,且整個「將 JS 命令至 JS 字串」和「去序列化 JS 字串」步驟都重複且可以略過。
技術詳細資料:RenderFrameHostImpl::ExecuteJavaScript
我們如何改善
我們推出了另一個 mojo API 方法,讓我們可以傳遞物件名稱、要呼叫的方法以及直接引數清單,而無需建立 JavaScript 原始碼的字串。這可讓我們略過序列化和去序列化程序,省去剖析 JavaScript 程式碼的需求。
如需我們如何執行此最佳化措施的技術細節,請參考以下兩個修補程式:
影響
為評估這項變更的成效,我們針對 Chromium 修訂版本 cb971089a058 和 4f213b39d581 (變更前後) 的版本做了一些評估。
針對這兩個修訂版本,我們執行了以下情境 5 次:
- 使用
chrome://tracing
錄製追蹤記錄 - 開啟開發人員工具中的開發人員工具
- 取得記錄的
CrRendererMain
追蹤記錄,並比較 V8 專屬指標。
根據這些實驗結果,開發人員工具開啟後開啟速度提升約 13% (從 11.2 秒降至 10 秒)。
重點資訊、CPU 持續時間
方法名稱 | 未最佳化 (毫秒) | 最佳化 (毫秒) | 差異 (毫秒) | 速度提升 (%) |
總計 | 11,213.19 個 | 9,953.99 美元 | -1,259.20 | 12.65% |
v8.run | 499.67 | 3.61 | -496.06 | 12.65% |
V8.Execute | 1,654.87 人 | 1,349.61 人 | -305:25 | 3.07% |
v8.callFunction | 1,171.84 人 | 1,339.77 人 | 西元 167.94 年 | -1.69% |
v8.compile | 西元 133.93 個 | 3.56 | 130.37 | 1.31% |
因此,開發人員工具會開啟並在 CPU 使用率降低的情況下提高運作速度。🎉
下載預覽頻道
建議您使用 Chrome Canary、Dev 或 Beta 版做為預設的開發瀏覽器。透過這些預覽版本,您可以存取開發人員工具中的最新功能、測試最先進的網路平台 API,以及找出網站的問題,以免使用者發現問題。
與 Chrome 開發人員工具團隊聯絡
請使用下列選項,討論貼文中的新功能和異動,或與開發人員工具相關的其他事項。
- 歡迎透過 crbug.com 提出建議或意見。
- 在開發人員工具中,依序點選「更多選項」圖示 >「說明」 >「回報開發人員工具問題」,回報開發人員工具問題。
- 前往 @ChromeDevTools 張貼 Tweet。
- 歡迎在「開發人員工具」推出「最新消息」YouTube 影片或「開發人員工具秘訣」YouTube 影片留言。