什麼是效能?

#

效能是執行者一系列可量化屬性的集合。

在此上下文中,效能不是執行行為本身;而是某事物或某人執行得有多好。因此,我們使用形容詞 performant

雖然 執行得有多好 的部分通常可以用自然語言來描述,但在我們有限的範圍內,重點關注的是可以量化為實數的內容。實數包括整數以及作為特殊情況的 0/1 二進位制數。自然語言描述仍然非常重要。例如,一篇僅用詞語而非數字(可量化值)來嚴重批評 Flutter 效能的新聞文章仍然可能有意義,並可能產生巨大影響。選擇有限的範圍僅僅是因為我們資源有限。

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

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

例如,本網站上的大部分內容都與 Flutter 應用效能相關,其中執行者是 Flutter 應用。基礎架構效能對 Flutter 也很重要,其中執行者是構建機器人和 CI 任務執行器:它們極大地影響 Flutter 整合程式碼更改的速度,從而提高應用的效能。

在此,範圍被故意擴大,以包含應用效能問題以外的效能問題,因為它們可以共享許多工具,而不管執行者是誰。例如,Flutter 應用效能和基礎架構效能可能共享相同的儀表板和類似的警報機制。

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

為什麼效能很重要?

#

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

簡單來說,效能很重要且有用,因為在相關範圍內,效能必須具有可量化的屬性或指標。這意味著:

  1. 效能報告易於理解。
  2. 效能幾乎沒有歧義。
  3. 效能可比且可轉換。
  4. 效能公平。

並不是說非效能、不可衡量的問題或描述不重要。它們旨在突出效能可以更有用的場景。

1. 效能報告易於理解

#

效能指標是數字。讀取數字比閱讀段落容易得多。例如,工程師可能需要 1 秒鐘來理解 1 到 5 的效能評級。而閱讀一篇 500 字的完整反饋摘要,可能需要同一位工程師至少 1 分鐘。

如果有很多數字,很容易對其進行彙總或視覺化以供快速理解。例如,可以透過直方圖、平均值、分位數等快速理解數百萬個數字。如果一個指標有數千個數據點,那麼可以輕鬆繪製時間線來讀取其趨勢。

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

2. 效能幾乎沒有歧義

#

將效能作為一組數字的另一個優點是其明確性。當你希望動畫每幀效能達到 20 毫秒或 50 幀/秒時,數字的解釋幾乎沒有不同。另一方面,用文字描述同一個動畫,有人可能會說它很好,而另一些人可能會抱怨它不好。同樣,同一個詞或短語可能被不同的人以不同的方式解釋。你可能認為還可以的幀率是 60 幀/秒,而另一些人可能認為它只有 30 幀/秒。

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

3. 效能可比且可轉換

#

效能數字不僅意義明確,而且比較也明確。例如,毫無疑問 5 大於 4。另一方面,要弄清楚“優秀”比“絕佳”好還是差,可能是主觀的。同樣,你能弄清楚“史詩級”是否比“傳奇級”更好嗎?實際上,在某些人的解釋中,“遠超預期”可能比“絕佳”更好。只有在定義將“遠超預期”對映到 4,將“絕佳”對映到 5 後,它才會變得明確且可比。

數字還可以使用公式和函式輕鬆轉換。例如,60 幀/秒可以轉換為每幀 16.67 毫秒。一幀的渲染時間 x (ms) 可以轉換為一個二進位制指示符 isSmooth = [x <= 16] = (x <= 16 ? 1 :0)。這種轉換可以複合或連結,因此你可以使用單個測量值獲得各種數量,而不會增加任何噪聲或歧義。轉換後的數量可以用於進一步的比較和理解。如果你處理的是自然語言,這種轉換幾乎是不可能的。

4. 效能公平

#

如果問題依賴於冗長的詞語來發現,那麼那些更健談(更願意聊天或寫作)的人,或者那些更接近開發團隊、溝通頻寬更大、聊天或面對面會議成本更低的人,就會獲得不公平的優勢。

透過擁有相同的指標來檢測問題,無論使用者距離多遠或有多沉默,我們都可以公平地對待所有問題。反過來,這使我們能夠專注於真正有更大影響的問題。

如何使效能變得有用

#

以下從稍有不同的角度總結了此處討論的 4 個要點:

  1. 使效能指標易於理解。不要讓讀者被大量數字(或文字)淹沒。如果有很多數字,則嘗試將其彙總為一小組數字(例如,將許多數字彙總為單個平均數字)。僅在數字發生顯著變化時通知讀者(例如,自動警報關於高峰或迴歸)。

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

  3. 方便比較效能。例如,提供時間線以比較當前版本與舊版本。提供方法和工具將一個指標轉換為另一個指標。例如,如果我們能將記憶體增加和幀率下降都轉換為使用者流失數量或以美元計的收入損失,那麼我們就可以進行比較並做出明智的權衡。

  4. 使效能指標監控儘可能廣泛的人群,以免任何人被落下。