參加你附近的 ,瞭解 VS Code 中的 AI 輔助開發。

JavaScript 效能分析

Visual Studio Code 支援為 JavaScript 程式收集和檢視效能分析檔案。要開始使用,您首先需要為您的 Node.js 程式瀏覽器應用配置好偵錯程式。

分析檔案型別

根據您想要最佳化的內容,您可能需要採集不同型別的分析檔案。

  • CPU 分析檔案 (CPU Profile) - CPU 分析檔案可以告訴您程式在 JavaScript 中花費了多少時間。請記住,雖然您可以等待非同步的 promise 或回撥,但同一時間只有一個 JavaScript 表示式在執行。CPU 分析會以每秒約 10,000 次的頻率進行取樣,以告訴您在那個時刻哪個表示式(如果有的話)正在執行。
  • 堆分析檔案 (Heap Profile) - 堆分析檔案可以告訴您程式中的記憶體是如何隨時間分配的。分配記憶體的開銷可能很大,減少程式碼分配的記憶體量可以帶來效能上的提升。
  • 堆快照 (Heap Snapshot) - 堆快照是程式記憶體分配情況的一個瞬時檢視。如果您注意到程式佔用了大量 RAM,並想找出其來源,堆快照會很有用。請注意,對於更復雜的程式,收集堆快照可能需要幾分鐘時間,並且內建編輯器目前不支援檢視堆快照。

採集分析檔案

要採集分析檔案,您需要正在除錯您的程式。一旦開始除錯,您可以透過以下幾種方法來採集分析檔案:

  • 使用呼叫堆疊 (Call Stack) 檢視中的“錄製”按鈕。這允許您採集 CPU 分析檔案、堆分析檔案和堆快照。
  • 在您的程式中呼叫 console.profile()。這將採集一份 CPU 分析檔案。

使用錄製按鈕

開始除錯後,切換到“執行和除錯”檢視(⇧⌘D (Windows、Linux Ctrl+Shift+D)),並找到呼叫堆疊 (Call Stack) 檢視。將滑鼠懸停在您要除錯的會話上,然後選擇生成效能分析檔案 (Take Performance Profile) 按鈕。您也可以從命令面板(⇧⌘P (Windows、Linux Ctrl+Shift+P))執行此命令。

Screenshot showing the button

VS Code 隨後會詢問您想生成哪種型別的效能分析檔案;選擇與您需求相關的一種即可。

最後,VS Code 會詢問您希望在何時停止生成分析檔案。您可以選擇:

  • 持續生成分析檔案,直到您手動停止。
  • 生成指定時長的分析檔案。
  • 生成分析檔案,直到命中某個斷點。

如果您選擇了第一個選項,您可以透過點選除錯工具欄中顯示的紅色大“錄製”圖示來停止分析。分析檔案收集完畢後,分析檔案檢視器將自動開啟。

使用 console.profile

您可以在程式碼中手動插入 console.profile 呼叫來開始分析,並使用 console.profileEnd 來結束分析。在這兩個呼叫點之間,將採集一份 CPU 分析檔案。

console.profile();
doSomeVeryExpensiveWork();
console.profileEnd();

生成的 .cpuprofile 檔案將自動儲存在您的工作區資料夾中。您可以選擇該檔案,在內建的分析檔案檢視器中開啟它。

分析一份效能分析檔案

表格檢視

VS Code 有一個整合的視覺化工具,支援檢視 JavaScript 的 .cpuprofile.heapprofile 檔案。當您開啟其中一個檔案時,首先會看到一個類似這樣的表格檢視:

Screenshot showing the profile table

這是您程式的自下而上 (bottom-up) 檢視。每一行代表程式中的一個函式,預設情況下,它們按在該特定函式中花費的時間進行排序。這也被稱為“自身耗時 (Self Time)”。一個函式的“總耗時 (Total Time)”是該函式自身及其呼叫的所有函式所花費時間的總和。您可以展開每一行表格來檢視該函式是從哪裡被呼叫的。

例如,以下面這段程式碼為例:

function a() {
  doSomethingFor5Seconds();
  b();
}

function b() {
  doSomethingFor3Seconds();
}

a();

在這種情況下,a 的自身耗時為 5 秒,a 的總耗時為 8 秒。b 的自身耗時和總耗時均為 3 秒。堆分析檔案的工作方式相同,但使用“自身大小 (Self Size)”和“總大小 (Total Size)”來表示每個函式或其被呼叫者分配的記憶體量。

火焰圖檢視

表格檢視在某些情況下很方便,但通常您可能希望看到更直觀的分析檔案展示。您可以透過點選表格檢視右上角的火焰圖示 🔥 來實現。如果您尚未安裝,系統會提示您安裝一個提供火焰圖檢視編輯器的附加擴充套件。

Heap profile flame chart

這起初可能看起來令人困惑,但別擔心,我們會把它弄明白的!

對於 CPU 分析檔案,水平軸是分析的時間線,讓您可以看到程式在每個時刻在做什麼。對於堆分析檔案,水平軸是程式分配的總記憶體。

圖中的每個條形,或稱“火焰”,都是一個呼叫堆疊。最外層、最頂層的函式呼叫(即呼叫堆疊的“底部”)顯示在編輯器的頂部,而它呼叫的函式則顯示在下方。條形的寬度由其總耗時或總記憶體決定。

您可以點選火焰圖中的條目以檢視更多相關資訊,並使用滑鼠滾輪進行縮放。如果您已經放大,也可以在圖表上任意位置拖動來導航。

左偏檢視

如果您正在處理 CPU 分析檔案,您看到的火焰圖很可能不像上面那個那麼容易理解。您可能會有很多獨立的呼叫堆疊,看起來像這樣:

A noisy CPU profile

為了便於分析,VS Code 提供了“左偏 (left-heavy)”檢視,它將所有相似的呼叫堆疊分組到一起。

Toggle button

這將檢視從按時間順序排列切換到更類似於堆分析檔案的形式。水平軸仍然是總分析時長,但每個條形代表該函式呼叫在所有從該堆疊呼叫時的總耗時。

A nicer CPU profile

這種檢視對於某些應用(如伺服器)非常有用,因為單個呼叫可能相對較快,但您想找出在多次呼叫中總體上開銷最大的函式是哪些。