Power Appsに色々な処理を実装すると、アプリの読み込み時間や処理時間が長くなって待ち時間が増えることがある。
Power Appsの高速化には色々な方法があるけれど、今回はその中の1つConcurrent関数で色々遊んでみた。
Concurrent関数
Concurrent関数は複数の数式を同時に評価してくれる関数で、手軽にアプリを高速化できる。
真っ先に思い浮かぶ使い道は、アプリのOnStartプロパティの中でたくさんのデータを読み込むとき。
様々なデータをConcurrent関数で同時に読み込み始めることでアプリの起動時間を短縮することができる。
使い方
Concurrent関数は使い方も簡単で、括弧の中に複数の処理を入れるだけ。
Concurrent( 処理A, 処理B, 処理C )
のような感じ。
この処理Aや処理BがDataverseやらSharePointやらからデータを持ってくる処理の場合、アプリをかなり高速化することができる。
ただConcurrent関数には注意点があって、処理の実行の順番が保証されないということ。
例えば処理Bが処理Aの計算結果を使用する場合、↑の書き方だとうまく動かないことがある。
※もちろんうまく動くときもある。
その場合は、
Concurrent( 処理A;処理B, 処理C );
こんな感じで書くと、処理A→処理Bは順番が保証される。
実験してみた
信じてないわけじゃないけど、ちょっと実験。
まずはPower Automateで簡易waitを用意。第1引数の秒数waitしたのち、第2引数の文字列をそのまま返すだけの関数。
そしたらPower AppsでこんなUIを作って
ボタンのOnSelectをこんな感じで書く。
ごちゃごちゃ書いているけど、Power Automateで2秒待って終わったときの時間をラベルに表示する処理が3つ書いてあるだけ。
ごちゃごちゃ書いているけど、Power Automateで2秒待って終わったときの時間をラベルに表示する処理が3つ書いてあるだけ。
実行するとこんな感じ。大体2秒ごとに処理が終わっていく。
続いてConcurrentありバージョン。
実行するとこんな感じ。ほぼ同時に終了する。
ただ、実行順序は保証されないのでこんな感じになることもある。
最後に上の2つの処理だけセミコロンで区切ってみると
少なくとも上の2つの処理の実行順序は保証される。
最後にもう1つ注意点
公式情報にも書いてあるけれど、アプリを実行するデバイスやブラウザーによっては処理がすべて同時に実行されないことがある。
これはそのデバイスやブラウザーのパワー不足と思って諦めるしかない。
コメント