跳至主要內容

更多關於效能的想法

什麼是效能?

#

效能是一組可量化的執行者屬性。

在此上下文中,效能本身不是指動作的執行;而是指某事物或某人表現得多好。因此,我們使用形容詞 performant(高效能的)。

雖然 表現得多好 這部分通常可以用自然語言來描述,但在我們有限的範圍內,重點是可量化為實數的事物。實數包括整數和 0/1 二元數作為特殊情況。自然語言描述仍然非常重要。例如,一篇新聞文章僅用文字而沒有任何數字(可量化的值)來嚴厲批評 Flutter 的效能,仍然可能是有意義的,並且可能會產生很大的影響。選擇有限的範圍僅是因為我們資源有限。

描述效能所需的數量通常稱為指標。

為了瀏覽無數的效能問題和指標,您可以根據執行者進行分類。

例如,本網站上的大部分內容是關於 Flutter 應用程式效能的,其中執行者是 Flutter 應用程式。基礎設施效能對於 Flutter 也很重要,其中執行者是建置機器人和 CI 任務執行器:它們會嚴重影響 Flutter 整合程式碼變更的速度,從而改善應用程式的效能。

在這裡,範圍故意擴大到包括應用程式效能問題以外的效能問題,因為它們可以共享許多工具,無論執行者是誰。例如,Flutter 應用程式效能和基礎設施效能可能共享相同的儀表板和類似的警示機制。

擴大範圍也允許包含傳統上容易被忽略的執行者。文件效能就是這樣一個例子。執行者可以是 SDK 的 API 文件,而指標可以是:覺得 API 文件有用的讀者百分比。

為什麼效能很重要?

#

回答這個問題不僅對於驗證效能方面的工作至關重要,而且對於引導效能工作,使其更有用也至關重要。「為什麼效能很重要?」的答案通常也是「效能如何有用?」的答案。

簡單來說,效能之所以重要且有用,是因為在該範圍內,效能必須具有可量化的屬性或指標。這意味著

  1. 效能報告容易理解。
  2. 效能較無歧義。
  3. 效能可比較且可轉換。
  4. 效能是公平的。

並非非效能或不可衡量的問題或描述不重要。它們旨在強調效能可以更有用的情況。

1. 效能報告容易理解

#

效能指標是數字。閱讀數字比閱讀一段文字容易得多。例如,工程師可能只需要 1 秒鐘就能理解效能評級為 1 到 5 的數字。工程師可能需要至少 1 分鐘才能閱讀完整的 500 字意見回饋摘要。

如果有許多數字,則很容易摘要或視覺化它們以供快速理解。例如,您可以透過查看其直方圖、平均值、分位數等來快速理解數百萬個數字。如果指標有數千個數據點的歷史記錄,那麼您可以輕鬆繪製時間軸來讀取其趨勢。

另一方面,擁有 n 個 500 字的文字幾乎可以保證需要 n 倍的時間來理解這些文字。分析數千個歷史描述(每個描述有 500 個字)將是一項艱鉅的任務。

2. 效能較無歧義

#

將效能作為一組數字的另一個優點是其明確性。當您希望動畫的效能為每幀 20 毫秒或 50 fps 時,對於這些數字的解釋幾乎沒有不同的空間。另一方面,要用文字描述相同的動畫,有人可能會說它很好,而其他人可能會抱怨它很差。同樣,同一個詞或詞組可能會被不同的人以不同的方式解釋。您可能會將 OK 的幀率解釋為 60 fps,而其他人可能會將其解釋為 30 fps。

數字仍然可能存在雜訊。例如,測量的每幀時間可能是該幀的真實計算時間,加上 CPU/GPU 花在一些不相關工作上的隨機時間量(雜訊)。因此,指標會波動。儘管如此,數字的含義沒有歧義。而且,還有嚴格的理論和測試工具來處理這種雜訊。例如,您可以進行多次測量來估計隨機變數的分配,或者您可以取多次測量的平均值,透過大數定律來消除雜訊。

3. 效能可比較且可轉換

#

效能數字不僅具有明確的含義,而且還具有明確的比較。例如,毫無疑問 5 大於 4。另一方面,要弄清楚優秀是比精湛好還是差可能很主觀。同樣地,您能弄清楚史詩是否比傳奇好嗎?實際上,在某些人的解釋中,遠遠超出預期 這個詞組可能比 精湛 更好。只有在將「遠遠超出預期」對應到 4,而將「精湛」對應到 5 的定義之後,它才會變得明確且可比較。

數字也容易使用公式和函數進行轉換。例如,60 fps 可以轉換為每幀 16.67 毫秒。幀的渲染時間 x (ms) 可以轉換為二進制指示器 isSmooth = [x <= 16] = (x <= 16 ? 1 :0)。這種轉換可以複合或鏈結,因此您可以使用單次測量獲得各種各樣的量,而不會增加任何雜訊或歧義。然後,轉換後的量可以用於進一步的比較和理解。如果您處理的是自然語言,則這種轉換幾乎是不可能的。

4. 效能是公平的

#

如果問題依賴冗長的文字來發現,那麼會給予那些更健談(更願意聊天或寫作)或那些更接近開發團隊的人不公平的優勢,他們有更大的頻寬和更低的聊天或面對面會議成本。

透過使用相同的指標來檢測問題,無論使用者有多遠或多安靜,我們都可以公平地處理所有問題。反過來,這使我們能夠專注於影響更大的正確問題。

如何使效能變得有用

#

以下總結了此處討論的 4 點,從稍微不同的角度來看

  1. 使效能指標易於理解。不要用大量的數字(或文字)淹沒讀者。如果有許多數字,請嘗試將它們摘要成一小組數字(例如,將許多數字摘要成一個平均數字)。僅當數字發生顯著變化時才通知讀者(例如,對峰值或回歸的自動警示)。

  2. 使效能指標盡可能明確。定義數字使用的單位。精確描述數字的測量方式。使數字易於重現。當有很多雜訊時,請嘗試顯示完整的分佈,或盡可能透過聚合許多有雜訊的測量來消除雜訊。

  3. 使其易於比較效能。例如,提供時間軸以將當前版本與舊版本進行比較。提供將一個指標轉換為另一個指標的方法和工具。例如,如果我們可以將記憶體增加和 fps 下降都轉換為美元表示的用戶減少或收入損失,那麼我們可以比較它們並做出明智的權衡。

  4. 使效能指標監視的群體盡可能廣泛,以便不遺漏任何人。