效能

自 3.2.0 版(測試版)起提供。

效能分頁會測量公式求值所花的時間。它會記錄每一次求值,並以時間線與表格呈現:耗時、呼叫次數、呼叫鏈。您可以看出時間都花在哪裡——包括 Ninext 自己觸發的呼叫。

此分頁僅供管理員使用。它只顯示其圖示——一個碼錶——位於錯誤與程式碼搜尋分頁之間;滑鼠停在上面時會顯示其名稱。它可在 Ninext 設定的「腳本管理器」區段中停用:公式效能分析。

開始與停止測量

主按鈕開始測量會採用所選開始方式的名稱(首次求值時開始、下次點擊時開始);測量進行時,它會變成停止測量。旁邊的小按鈕顯示所選開始方式與停止方式的圖示,會開啟選擇啟動觸發方式選單,分為兩個部分。第一部分決定測量何時開始:

開始方式效果
立即開始點選時即開始測量。這是預設設定。
首次求值時測量從下一次公式求值開始,並以該次求值作為時間的起點。
下次點擊時測量從下一次在效能分頁以外的點擊開始。等待期間,按鈕會變成取消。

第二部分決定測量何時停止:

停止方式效果
手動停止透過停止測量按鈕。這是預設設定。
10、30 或 60 秒後停止倒數計時從測量開始時起算。
求值結束時與「首次求值時」搭配提供:該次求值結束時(包括其後續的非同步部分),測量即停止。
放開滑鼠按鍵時與「下次點擊時」搭配提供:放開滑鼠按鍵時,測量即停止。之後以非同步方式繼續進行的部分不會被測量。

如此一來,您就只會測量您關心的部分:開啟一筆記錄、點選一個按鈕、計算一個檢視。這些選擇在頁面重新載入之前都有效。

當測量在等待其觸發時,狀態列會顯示「已就緒——等待觸發…」。測量期間,它會顯示已進行的秒數、記錄到的求值次數,以及不同公式的數量。

須知

開始新的測量並不會清空先前的結果:求值會在多次測量之間累加——在表格、計數與時間線中皆然——直到您點選清空為止。每次測量都會在時間軸上從零開始:因此,連續兩次測量的橫條會在時間線的開頭重疊。若要單獨查看一次測量,請在開始之前點選清空。

時間線

每一次求值都是時間軸上的一條橫條。巢狀或同時進行的求值會堆疊成多行;每個公式都保有自己的顏色,半透明的橫條表示仍在進行中的求值。夠寬的橫條會標上其欄位名稱(「表格 ▸ 欄位」),外掛發出的呼叫則在前面加上「Ninext ▸」。畫面會即時填入。它最多保留 20,000 次求值:超過之後,會有一則註記顯示被捨棄的求值次數,這些求值只會在表格中繼續計算。

縮放方式:

  • 滑鼠滾輪,或在 Chrome 中以觸控板雙指捏合,會以指標所在位置為中心縮放(雙指滑動則會捲動);
  • 在橫條上按兩下,會選取它並放大到該橫條;
  • 三個按鈕:縮放至整個工作階段、縮小時間刻度與放大時間刻度。

表格

效能分析的表格檢視

表格會依公式彙整求值:

欄內容
公式被測量的公式。
呼叫次數求值的次數。
總計(毫秒)累計的時間。
平均(毫秒)一次求值的平均時間。
最大(毫秒)耗時最長的一次求值。

表格依總時間排序,由最耗時到最不耗時,並每秒更新一次;只顯示前 100 行,超過時會有一則註記提醒(「顯示 100 列,共 N 列——最耗時的在前。」)。超過 1,000 個不同的公式時,其餘的公式會歸入一行「……其他公式」。架構中的公式,其呈現方式與欄位與公式中相同——導覽路徑、「Fx」、修改按鈕——當同一個公式出現在多個位置時,會附上「+N」。「Ninext」標記表示由外掛發出的呼叫。

求值的詳細資訊

效能分析中某次求值的詳情

點選某條橫條或某一行,即可開啟詳細資訊:

  • 公式的完整程式碼;
  • 若為橫條:開始、時長、記錄,以及從根求值一直到這一次求值的呼叫鏈,其中每個環節都可以點選;若為表格中的一行:測量值(呼叫次數、總時間、平均時間與最長時間);
  • 來源,適用於由 Ninext 發出的呼叫;
  • 變數(檢查),適用於受檢查公式的求值(見下文);
  • 公式在架構中的位置,並附有前往程式碼的按鈕;
  • 底部有縮放到此次求值與檢查此公式。

檢查公式

在表格或時間線中選取一個公式,然後點選檢查此公式。測量期間,每當該公式被求值,效能分析器都會記錄每個以 var 或 let 宣告的變數的值:顯示值的預覽,滑鼠停留時則顯示其型別。

檢查分頁會列出這些求值,最新的在最上方;點選其中一筆,即可在時間線中找到它。一次只能檢查一個公式;停止檢查可結束檢查。

兩項限制:重新賦值與迴圈變數不會被記錄;而受檢查公式的時間僅供參考,因為記錄本身也會花費時間。

解讀數據

  • 時間為包含式:一個公式也會計入其所求值之公式的時間。
  • 對於非同步求值,時間會一直計算到其結束為止,包括資料載入。
  • 兩個具有完全相同公式的欄位,會共用表格中的同一行。
  • 受測量的有:公式、觸發器、檢視的欄、控制台的程式碼,以及 Ninext 的呼叫。Ninext 本身的 JavaScript 則不在測量之列。
  • 測量對每次求值只增加幾微秒的負擔,不測量時則完全沒有負擔。結果保存在記憶體中:重新載入頁面後便會消失。