Flutter 的建構模式選擇

Flutter 支援三種模式編譯 app,也支援使用 headless 模式來測試。這篇文件解釋了這三種模式,並且告訴你什麼時候應該使用哪種模式。關於 headless 測試的更多資訊,可以檢視 單元測試

選擇哪種編譯模式取決於你處於哪個開發週期中。是除錯程式碼階段,還是需要效能最佳化分析,抑或是準備部署你的應用了呢?

快速簡要介紹下列三種建構模式:

  • 開發過程中,需要使用 熱重載 功能,請選擇 debug 建構模式;

  • 當你需要分析效能的時候,選擇使用 profile 建構模式;

  • 釋出應用的時候,需要選擇使用 release 建構模式。

下文詳細解釋了每種模式以及何時使用它,獲得更多資訊,或者瞭解無頭模式的測試,請參考 Flutter wiki 文件。

除錯模式

Debug 模式下,app 可以被安裝在物理裝置、模擬器或者模擬器上進行除錯。

Debug 模式意味著:

  • 斷點 是開啟的。

  • 服務擴充是開啟的。

  • 針對快速開發和執行週期進行了編譯最佳化(但不是針對執行速度、二進位制檔案大小或者部署)。

  • 除錯開啟,類似 開發者工具 等除錯工具可以連線到處理序裡。

在 Web 平臺下的除錯模式意味著:

  • 本次建構 沒有 最小化資源並且整個建構 沒有 最佳化效能。

  • 為了簡化除錯,這個 Web 應用使用了 dartdevc 編譯器。

預設情況下,執行 flutter run 會使用 Debug 模式。你的 IDE 也支援這些模式。例如,Android Studio 提供了 Run > Debug… 選單選項,而且在專案面板中還有一個三角形的綠色執行按鈕圖示(選單選項中會顯示相應圖示的圖片)。

Release 模式

當你想要最大的最佳化以及最小的佔用空間時,就使用 Release 模式來部署 app 吧。 release 模式是不支援模擬器或者模擬器的,使用 Release 模式意味著:

  • 斷點是不可用的。

  • 除錯資訊是不可見的。

  • 除錯是禁用的。

  • 編譯針對快速啟動、快速執行和小的 package 的大小進行了最佳化。

  • 服務擴充是禁用的。

在 Web 平台的 Release 模式意味著:

  • 這次建構資源已經被壓縮,並且效能得以最佳化。

  • 這個 Web 應用透過 dart2js 編譯器建構,以確保更優秀的效能。

flutter run --release 命令會使用 Release 模式來進行編譯。你的 IDE 同樣也支援這個模式。例如,Android Studio 提供了 Run > Run… 選單選項,而且在專案面板中還有一個被小三角覆蓋的綠色蟲子圖示。(選單選項中會顯示相應圖示的圖片)

你可以使用 flutter build <target> 針對特定目標編譯 release 模式。請使用 flutter help build 檢視支援的目標列表。

你也可以透過 flutter build --release 命令來使用 release 模式。

你也可以執行 flutter build 命令使用 Release 模式來編譯。更多詳細資訊,可以參閱釋出 iOSAndroid app 的文件。

Profile 模式

profile 模式下,一些除錯能力是被保留的—足夠分析你的 app 效能。在模擬器和模擬器上,Profile 模式是不可用的,因為他們的行為不能代表真實的效能。 profile 模式和 release 類似,但有以下不同:

  • 一些服務擴充是啟用的。例如,支援 performance overlay。

  • Tracing 是啟用的,一些除錯工具,比如 開發者工具 可以連線到處理序裡。

在 Web 平台的 Profile 模式意味著:

  • 資原始檔沒有被壓縮,但是整體效能已經最佳化

  • 這個 Web 應用透過 dart2js 編譯器建構

flutter run --profile 命令是使用 Profile 模式來編譯的。你的 IDE 也是支援這個模式的。例如,Android Studio 提供了 Run > Profile… 選單選項。

關於這些模式的更多資訊,可以檢視 Flutter wiki 中的 Flutter’s build modes 文件。