高速計算

Power Fx 式は強力で、多くの計算を自動的にバックグラウンドで実行します。 Power Fx は多くの作業を自動化するため、計算を微調整してできるだけ速く実行することができます。

データ取得

明示的な列の選択を使用する

明示的な列の選択 (ECS) 機能は、すべての新しいアプリで既定で有効になっています。 アプリ用に有効になっていない場合は、有効にする必要があります。 ECS は、取得される列の数を自動的にアプリケーションで使用される列のみに減らします。 ECS が有効になっていない場合、必要以上のデータを取得し、パフォーマンスに影響を与える可能性があります。 場合によっては、アプリがコレクションを通じてデータをプルするとき、列の元の系統やソースが失われることがあります。 使用されているかどうかは分からないので、ECS を使用してドロップします。 通常、コレクションの参照の後かコントロール内で PowerFx 式 ShowColumns を使用することにより、欠落している列に対して ECS を強制的に動作させることができます。

ギャラリー、テーブル、およびフォームで、慎重に画像を使用する

ギャラリーおよびテーブル用の画像の Dataverse サムネイル バージョンを使用します。 Dataverse サムネイルは約 1 キロバイトで小さく、レコードの一部としてインラインで保存され、コレクションを表示するコントロールに表示するのに便利で高速です。 すべての SharePoint の画像を含め、他のすべての画像は個別に呼び出すことが必要で、ギャラリーやテーブルに配置できません。 個別の呼び出しが必要な画像は詳細フォームに配置します。 既定でフル イメージを表示しないことを検討してください。 詳細なフル イメージはユーザーにとって便利で、重要です。 しかし、ボタンや別のページへのナビゲーションなど、明示的なユーザー アクションを通じてユーザーがこれらの画像を利用できるようにすることができます。 SharePoint には、フル イメージを下回るフォームで使用できる、幅広い中間サイズの画像が含まれています。 Dataverse には 2 つのサイズだけです: サムネイルおよびフル。

計算

App.formula で数式を分割する

App.formulas と名前付き数式を使用すると、Power Fx が数式を評価するときを決定できるため、アプリの読み込みとページ ナビゲーションの速度が向上します。 つまり、OnStart 時に評価する必要はありません。 さらに、通常、名前付き数式は速度の向上にも役立ちます。 特に長いスクリプトがある場合、名前付き数式に分割すると、Power Fx は作業をスケジュールし、再利用が有効になるため、より効率的な計算ができます。 詳細については、アプリの数式を参照してください。

同時実行を使用する

Concurrent 関数を使用すると、数式を同時に実行できるようになります。 同時実行の使用は慎重に選択してください。 ある程度速度は向上しますが、相互に依存するアイテムを実行している場合、タイミングや調整の問題が発生する可能性があります。

ノンブロッキング UI ステップへの重要な更新を延期する

データ ソースへの大規模な更新は、完了するまでに時間がかかることがあります。 しかし、ユーザーは UI がすばやく制御を返してくれることを期待します。 タスクは、ユーザーが別のアクションを実行できるようになる前に更新を完了する必要がある逐次タスクか、非同期タスク (ユーザーのアクションとは別に更新を完了できる) のいずれかです。

時間のかかる同期タスクの例として、コンサートの座席の確認があります。 このような時間のかかる同期タスクの場合、一般的に進行状況バーを表示します。 この UI は実際にはユーザーをブロックしますが、他の UI 要素が更新される前にタスクが完了することを保証します。 このアプローチは、アプリケーションでは機能しないことがあります。 通常、ビジネスでは、一連の長いステップを 1 つの明示的なビジネスのステップとして処理します。 ビジネス プロセスのシグナルを通して次のステップに進むことが承認されました。 承認が 1 つの例です。 承認は迅速に行われることもあれば、遅れることもあります。 UI では、プロセスが完了したことをいくつかの方法で通知できます。 ボタンを有効にしたり、メッセージを表示したり、電子メールを送信したり、またはメニュー アイテムなどの UI の一部を有効にしたりできます。

非同期タスクの例には、受注の完了があります。 顧客が注文バスケットを更新し、注文を完了して、注文が実行されます。 しかし、顧客に確認出荷日が通知されるまで、いくつかの更新が必要です。 この例では、出荷日はすぐに簡単に提供できるものではありません。 、更新のこの部分を、後で顧客に送信する電子メールに延期することができます。

同期タスクについて、多くの場合、UI ブロック タスクの Power Apps コードを使用します。 たとえば、コードは戻り値を取得するまで待機し、その後進行状況バーをリリースします。 このような種類の状況を最小限にすることが最善です。 しかし、明示的なビジネス ステップを使用するタスクや非同期タスクの場合、外部サービスを使用して Dataverse アクション、ストアド プロシージャ、または Power Automate フローなどのタスクを完了するのが一般的です。

ForAll を適切に配置する

このような ForAll と collect を使用した式がある場合:

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

次に、これを切り替えると

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

最初のパターンでは、変更についてコレクション y の依存ルールが通知され、x の反復ごとに評価されます。 2 つ目のパターンでは、これらのルールは 1 回だけ評価されます。

Gallery.AllItems への参照を回避することを検討する

Power Apps を操作するとき、ユーザー値を必要とする場合を除き、Gallery.AllItems の参照を回避するのが最善です。 これは、AllItems を読み取るたびに、新しい出力テーブルが生成されるためです。 読み込まれる項目の数を知りたいだけの場合は、代わりに Gallery.AllItemsCount を使用してください。

Gallery.TemplateSize を慎重に使用する

高さ調節可能なギャラリーが正しくレンダリングされるようにするには、妥当な既定サイズを設定することが重要です。 最初に、この値に基づいてできるだけ多くの行をレンダリングしようとします。 既定のサイズを 0 に設定すると、いくつかの特定のエッジ ケースを除いて、すべてをレンダリングしようとします。 数式を使用している場合は、必ず数式が 0 と評価する可能性がある最小値を設定してください。 たとえば、Max (20, varFoo + rectBar.Height) を使用できます。 このように、varFooと rectBar.Height がまだ使用可能でない場合、少なくとも妥当な値の 20 を使用します。

変更が検出されるまでに 1 秒の遅延があるため、入力のたびに変更を検出する代わりに、入力を完了することができます。