共用方式為


快速計算

Power Fx 運算式功能強大,會自動為您執行許多背景計算。 雖然 Power Fx 能自動為您處理許多事項,但您仍可微調計算,使其效能達到最佳化。

資料擷取

使用顯式欄位選取

預設情況下,所有新應用程式都會啟用顯式欄選擇 (ECS) 功能。 如果您的應用程式未啟用它,您應該啟用它。 ECS 會自動將擷取的資料行數目減少為僅應用程式中使用的資料行數目。 如果未啟用 ECS,您可能會擷取比所需更多的資料,這可能會影響效能。 有時候,當應用程式透過集合提取資料時,資料行的原始譜系或來源可能會遺失。 我們不知道它是否正在被使用,我們使用 ECS 將其刪除。 您通常可以使用 PowerFx 運算式 ShowColumns,在集合引用之後或在控制項中使用它,強制 ECS 處理缺少的行。

請小心使用圖庫、表格和表單上的影像

將影像的 Dataverse 縮圖版本用於圖庫和表格。 Dataverse 縮圖約為 1 KB,並作為記錄的一部分內嵌儲存,適合快速顯示於顯示集合的控制項上。 所有其他影像參考,包括所有 SharePoint 影像,都需要個別呼叫,而且不應該放在資源庫或資料表上。 將需要單獨調用的圖像放置在詳細表單上。 考慮在預設情況下永遠不要顯示完整圖像。 完整的詳細圖像對用戶來說可能有用且重要。 不過,您可以透過明確的使用者動作 (例如按鈕或導覽至個別頁面) 讓使用者可以使用這些影像。 SharePoint 提供了一系列中等大小的圖片,您可以用在不需要完整圖片的表單上。 Dataverse 只有兩種大小:縮圖和完整。

計算

使用 App.formula 來拆分公式

使用 App.formulas 和具名公式有助於提高應用程式載入和頁面導覽的速度,因為它可讓 Power Fx 決定何時評估公式。 這表示它不一定要在 OnStart 中評估它。 此外,命名公式通常也有助於提高速度。 特別是,如果您有很長的指令碼,將其分解為具名公式可以進行更有效率的計算,因為 Power Fx 可以排程工作並啟用重複使用。 如需詳細資訊,請參閱 應用程式公式

執行並行運算

使用 Concurrent 函數允許同時執行公式。 仔細選擇並行使用的位置。 它可以稍微適度加速,但如果您正在執行相互依賴的項目,則可能會導致計時和節流問題。

延遲對非阻塞 UI 步驟的重大更新

資料來源的大型更新可能需要一段時間才能完成。 但使用者希望 UI 能夠快速將控制權歸還給他們。 工作可以是循序的,其中更新必須先完成,使用者才能採取其他動作,也可以是非同步的 (更新可以單獨完成使用者動作。

耗時的同步任務的一個例子是確認音樂會的座位。 對於大多數像這樣耗時的同步任務,通常會設置進度條。 此 UI 實際上會封鎖使用者,但可確保工作在更新其他 UI 元素之前完成。 此方法可能不適用於您的應用程式。 企業通常會將較長的循序步驟作為明確的業務步驟來處理。 您已獲准透過業務流程通知進入下一步驟。 一個例子是批准。 批准可能會很快到來,也可能延遲。 在 UI 中,您可以透過多種方式表示程式已完成。 您可以啟用按鈕、顯示訊息、傳送電子郵件,或啟用 UI 的一部分,例如功能表項目。

非同步工作的一個範例是訂單的完成。 客戶更新訂單購物車,處理其訂單,然後下訂單。 但是,在向客戶提供確認的發貨日期之前,必須進行一些更新。 在此範例中,您無法立即輕鬆提供「出貨日期」。 ,您可以將此部分更新延遲到稍後傳送給客戶的電子郵件。

對於同步工作,您通常會使用 Power Apps 中的程式碼來進行 UI 封鎖工作。 例如,程式碼會等待,直到取得傳回值,然後釋放進度列。 最好盡量減少這些類型的情況。 但對於使用明確商務步驟或非同步工作的工作,通常會使用外部服務來完成工作,例如 Dataverse 動作、預存程序或 Power Automate 流程。

適當地放置「ForAll」

如果您有一個包含 ForAll 和集合的運算式,如下所示:

ForAll(x, Collect(y, { … }))

然後,將其反轉為

Collect(y, ForAll(x, { … }))

在第一種模式中,集合 y 上的任何相依規則都會收到變更通知,並針對 x 的每個反覆專案進行評估。 在第二種模式中,這些規則只會評估一次。

考慮避免引用 Gallery.AllItems

使用 Power Apps 時,最好避免引用 Gallery.AllItems,除非您需要輸出使用者的值。 這是因為每次讀取 AllItems 時,都會產生新的輸出資料表。 相反地,如果您只想知道載入了多少個項目,請使用 Gallery.AllItemsCount。

請謹慎使用 Gallery.TemplateSize

為了確保彈性高度圖庫能正確呈現,設定合理的預設大小是很重要的。 最初,我們嘗試根據此值渲染盡可能多的行。 如果您將預設大小設定為 0,我們會嘗試渲染所有內容,但少數邊緣情況除外。 如果您使用公式,請務必設定當公式計算結果可能為 0 時的最小值。 例如,您可以使用 Max (20, varFoo + rectBar.Height)。 這樣,如果 varFoo 和 rectBar.Height 尚不可用,我們至少使用合理的值 20。

在偵測到變更之前有一秒鐘的延遲,這可讓您完成輸入,而不是偵測每次輸入的變更。