Power Apps アプリ起動時に表示する画面を指定するApp.StartScreen|アプリの起動時間の高速化

Power AppsキャンバスのApp.OnStart内の処理はどうしても重くなりがちで、その解決にむけて少しずつAppに機能を追加していくとのこと。

今回はその機能の1つ、起動画面を指定するApp.StartScreenについて。

※今回の記事のソースはこちら。
https://powerapps.microsoft.com/ja-jp/blog/app-startscreen-a-new-declarative-alternative-to-navigate-in-app-onstart/

スポンサーリンク

App.OnStartでNavigateするのはパフォーマンスに影響する

今回の記事のソースによると、App.OnStartでNavigate関数を使用して最初に表示する画面を指定する方法にはパフォーマンス上の問題があるらしい。

それは、アプリの最初の画面を表示する前にApp.OnStartの実行を完了する必要があること。

つまり、App.OnStartの処理が重ければ重いほど最初の画面を表示するのが遅くなる、というのが問題だった。

App.StartScreen

App.StartScreenはそんな問題を解決するための新しいプロパティで、アプリに表示する最初の画面を指定できる。

なぜこのStartScreen導入でアプリの起動が早くなるかというと、

App.OnStartで

  • 色々な処理
  • 最初の画面を指定(Navigate関数呼び出し)

の2つを実施するより、

App.OnStartで

  • 色々な処理

App.StartScreenで

  • 最初の画面を指定

と処理を分離した方が、アプリの起動は早くなるらしい。

App.StartScreenを使うとどのように起動が変わるか実験

言葉で聞くより見た方が早いかなと思ったので、StartScreenのあるときとないときの違いをサンプルアプリで実験。

事前準備

まずは疑似的な重い処理としてこんなPower Automateを用意。
指定秒数だけ待って「終わったよ」テキストを返すだけの単純なフロー。
そしたらPower Appsに移ってこんな画面を作成。
で、OnStartでさっきのPower Automateで5秒待つように呼び出して、
その結果(今回は「終わったよ」テキスト)をラベルに表示するだけの単純なつくり。
そして全く同じ画面をもう1つ作成して、準備完了!

今までのやり方:OnStartでNavigate関数呼び出し

まずは今までのやり方として、OnStartでNavigate関数を使用しアプリ起動時にScreen2を表示してみる。

※2021/10/21現在、OnStartにNavigate関数を置くことは禁止されているようなので、

以下の設定を変えてOnStartでNavigate関数を呼び出せるようにしておく。

OnStartでPowerAutomateを呼び出した後にNavigate関数でScreen2を表示するよう設定。
そしたら、アプリ一覧画面からアプリを起動!
するとアプリ起動中の表示が5秒くらい続いて、
アプリが立ち上がる。このとき当然PowerAutomateは終了しているので、「終わったよ」テキストはラベルに表示されている。

これが従来の動作で、起動するまで(PowerAutomateが完了し、アプリが操作できるまで)5秒もかかるので、正直ちょっと遅いなと感じてしまうw

StartScreenを使ってみる

そしたら今度はStartScreenプロパティを使ってみる。

まずはOnStartからさっきのNavigate関数を消して、
StartScreenにScreen2を設定。
そしたらさっき同様アプリ一覧から起動してみると、
このアプリ起動中の画面は一瞬で消えて(スクショ取るのが大変w)、
Screen2がすぐに表示される。
※このとき「終わったよ」テキストは表示されておらず、よく見てみると画面左上にOnStart処理実施中の「・」が確認できる
そしてアプリ起動から5秒ほど経ってようやく「終わったよ」テキストが表示され、OnStartの処理(PowerAutomate)が終了したことがわかる。

これが今回実装されたStartScreenを使うことによる効果!

OnStart処理中も画面UIに触ることができる

さらにすごいのがOnStart処理中も画面コントロールに触ることができて、

例えばこんな感じでボタンに処理を書いてアプリを起動すると、
アプリを起動してScreen2が表示されると、OnStartが終わっていなくてもボタンを押すことができる!

OnStartに重い処理があってもすぐにユーザーは操作を開始できるので、とても便利!

StartScreenではグローバル変数は使えない

とは言え、OnStartが終わるまでは触ってほしくないコントロールは触れないようにしておかなきゃいけないし、

その一環としてか、StartScreenではグローバル変数(OnStartで設定できる変数)を参照することはできない

これは、StartScreenでグローバル変数を参照する際にその変数に必要な値がちゃんと設定されているか?を意識させたくないんだと思う。

なので、StartScreenではParam関数やLookUp関数、User関数とかを使って、起動画面を切り替えることになるんじゃないかな~。

コメント

タイトルとURLをコピーしました