縮短開發人員工具的啟動時間

Maksim Sadym
Maksim Sadym

開發人員工具啟動速度比現在快 13% 🎉? (從 11.2 秒降至 10 秒)

TL;DR;移除多餘序列化即可達成。

總覽

當開發人員工具啟動時,需要對 V8 JavaScript 引擎進行一些呼叫。

開發人員工具啟動程序

Chromium 用來將開發人員工具指令傳送至 V8 (一般來說用於 IPC) 的機制稱為 mojo。我的團隊成員 Benedikt MeurerSigurd Schneider 發現另一項工作時效率不彰,決定把收發這些郵件的兩個多餘步驟移除,設法改善這個流程。

現在來看看 mojo 機制的運作方式!

mojo 機制

動機機制

有一個 mojo 指令 EvaluateScript,可執行 JS 指令。這個外掛程式會將整個 JS 指令 (包含 arguments) 序列化為可eval() 的 JavaScript 原始碼字串。正如您所想,這些字串可能會變得很長且昂貴。在 V8 接收指令後,這些 JavaScript 程式碼字串會在執行前反序列化。這種處理每則訊息的序列化與反序列化程序,會產生大量的負荷。

Benedikt Meurer 發現,arguments 的序列化和去序列化非常昂貴,且整個「將 JS 命令至 JS 字串」「去序列化 JS 字串」步驟都重複且可以略過。

技術詳細資料:RenderFrameHostImpl::ExecuteJavaScript

我們如何改善

改善機制

我們推出了另一個 mojo API 方法,讓我們可以傳遞物件名稱、要呼叫的方法以及直接引數清單,而無需建立 JavaScript 原始碼的字串。這可讓我們略過序列化和去序列化程序,省去剖析 JavaScript 程式碼的需求。

如需我們如何執行此最佳化措施的技術細節,請參考以下兩個修補程式:

  1. CL 2431864:[devtools] 減少前端中訊息分派的效能負擔
  2. CL 2442012:[devtools] 在開發人員工具中使用 ExecuteJavaScriptMethod

影響

為評估這項變更的成效,我們針對 Chromium 修訂版本 cb971089a0584f213b39d581 (變更前後) 的版本做了一些評估。

針對這兩個修訂版本,我們執行了以下情境 5 次:

  1. 使用 chrome://tracing 錄製追蹤記錄
  2. 開啟開發人員工具中的開發人員工具
  3. 取得記錄的 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 作業時間 (毫秒)

完整的追蹤指標比較表

因此,開發人員工具會開啟並在 CPU 使用率降低的情況下提高運作速度。🎉

下載預覽頻道

建議您使用 Chrome CanaryDevBeta 版做為預設的開發瀏覽器。透過這些預覽版本,您可以存取開發人員工具中的最新功能、測試最先進的網路平台 API,以及找出網站的問題,以免使用者發現問題。

與 Chrome 開發人員工具團隊聯絡

請使用下列選項,討論貼文中的新功能和異動,或與開發人員工具相關的其他事項。

  • 歡迎透過 crbug.com 提出建議或意見。
  • 在開發人員工具中,依序點選「更多選項」圖示 更多   >「說明」 >「回報開發人員工具問題」,回報開發人員工具問題。
  • 前往 @ChromeDevTools 張貼 Tweet。
  • 歡迎在「開發人員工具」推出「最新消息」YouTube 影片或「開發人員工具秘訣」YouTube 影片留言。