Forguncyアプリケーションの実行時において、ページ表示時間を大きく左右する要素には以下のようなものが存在します。
多量の数式を設定している
非常に多くの数式がページに設定されている場合、それらの数式の計算はページの表示時に一斉に行われるため、ページ表示の時間に大きく影響します。
Forguncy で作成したアプリケーションは、サーバーサイドでページを作成してそのページをクライアント側に 送信するのではなく、サーバーから渡ってきたテーブルなどの情報を元にクライアント上でページを生成して 描画の処理を行います。セルに「=」から始まる数式を直接記載していると、クライアントのページ生成時にこの計算処理が行われます。このため、セル上に大量の数式が存在した場合、パフォーマンスが低下する可能性があります。
なお「=」から始まる数式の1つとして「=OData(〜」といった ODATA 関数があります。この関数は Excelに存在する関数ではなく、Forguncy 独自の関数です。ODATA 関数を使用すると、ODATA 関数は直接データベースのテーブルを参照して値を取得することができます。このため、ODATA 関数による数式を記載した場合は、ページを最初に表示する際に、計算で必要となるデータを取得するためにサーバーとの通信が発生しま す。一度クライアント側にデータを取り込んでしまえば、ページがリロードされない限り、サーバーとの通信は発生しません。「=」で始まる数式はクライアント側で処理されると前述していますが、ODATA 関数の場合 はページを初めて表示する場合やリロードする場合にサーバーアクセスが発生するため、これによるパフォーマンスの影響があります。
日付やコンボボックスなどのセル型を多用している
日付型セルは、ページの表示時にカレンダーを内部で作成します。この処理は他のセル型とくらべて大幅に時間のかかるものであるため、日付型セルが5個以上存在するページの場合、体感的に分かるくらいにページの表示に時間がかかります。同様にコンボボックス型セルも高機能で、内部の構造が複雑になっています。
このため、セル型を指定する必要のない箇所(例えば入力項目の見出しといった文字)は、セル型を使用せずに直接セルに文字を書き込むといったように、セル型の使用を最小にすることで表示速度を改善できる可能性があります。
また、コンボボックス型セルのリスト項目は、設定方法によって動作に次のような差異があります。
・コンボボックス:テーブルからデータを取得する場合
ドロップダウンのデータは、ページを表示後、最初にドロップダウンを表示するときに読み込みが行われます。このため、ページ表示時のスピードが早く、その反面、最初にドロップダウンを表示する際に若干の読み込み時間が発生します。同じテーブルからデータを取得するコンボボックスが複数存在する場合、内部的なデータソースが共有されるため、ダウンロードサイズも節約できます。
・コンボボックス:直接リスト項目を作成する場合
ドロップダウンのデータはページ表示時に読み込みが行われます。このため、ページ表示までのスピードが若干遅くなります。 また、同じ内容のドロップダウンを持つコンボボックスが複数ある場合でも、内部的なデータソースは全て個別に管理されます。このため、ページ表示時のダウンロードサイズが増大します。
リストビューを複数指定している
リストビューも高機能で複雑な構造のため負荷がかかります。 このため、同一ページ上に多くのリストビューが 存在すると、その分表示に時間がかかります。
ページ上で行うデータ処理や計算が多い
外部データベースを使用している場合には、ページで最終的に表示が必要となるデータをForguncyのページ上の数式を使用して算出するのではなく、データベース側でストアドプロシージャやビューなどを使用してあらかじめ必要なデータを用意するように変更します。こうすることで、ページで行う処理や計算を大幅に削減できるため、ページの表示にかかる時間を短縮できます。
内蔵データベースを使用している場合には、1つのページで行っている内容を複数ページに分割し、1つのページで行う処理や計算を少なくすることで、ページの表示速度を早くすることができます。
ページでクエリーを何度も行っている
レコードを絞り込むクエリーをどこで指定するかによって、速度を改善できる可能性があります。例えば、ページで使用するレコードを絞り込むには、リストビューをクリックして選択し、画面上部のデザインタブにある「クエリー条件」から指定することで、最初にページを表示する際に膨大なレコードからそのページで使用するレコードのみをクライアントに抽出できます。その状態で、「ページロード時のコマンド」やボタンを配置しそのコマンドで「クエリー」を指定すると、最初に渡されたデータの中から検索が行われるようになります。膨大なデータを都度、サーバーに問い合わせるということがなくなるため、速度を改善できる可能性があります。
「繰り返し」コマンド内で「テーブルデータの更新」コマンドを行っている
「繰り返し」コマンド内で「テーブルデータの更新」コマンドを呼び出した場合、1レコード単位にサーバーに更新用のSQL文を発行することになるので、繰り返し回数が増える都度その速度は遅くなります。
一度に複数件のレコードを処理する場合は、「繰り返し」コマンドを使わず、サーバーサイドで実行するカスタムWeb APIを作成してサーバー側で更新処理を完結するようにするか、クライアントサイドのJavaScriptで実行するWebAPIを使う方が処理時間は早くなります。参考までに繰り返しコマンドとJavaScriptでWeb APIを使った場合の処理を比較できるサンプルプロジェクト(Forguncy 6.0.5.0で作成)を本ナレッジに添付しています。
なお、Forguncyの提供するWeb APIの詳細は、以下を参照してください。
Forguncy Javascript API リファレンス
レコード件数が膨大でリストビューのロードオンデマンド(必要な時に読み込む)がOFFになっている
「ロードオンデマンド」とは、ユーザーよりレコードを読み込みたいとのリクエストがあった時に読み込みを行うことをいいます。リストビューをクリックして選択し、画面上部のデザインタブに「ロードンデマンド」ボタンがあります。
ロードオンデマンドがOFF(白表示)の時、最初にブラウザに読み込まれるレコードは「ページロード時の取得レコード数」で定義してある件数を読み込みます。既定値が「制限なし」になっているため、レコード数が膨大な時の初期表示に時間がかかります。
ロードオンデマンドが ON(グレー表示)の時に、ロードオンデマンド機能が有効に働きます。 この場合、テーブルに1000レコードあったとして、最初にブラウザに読み込まれるレコードを50件にしたい場合は、「ページロード時の取得レコード数」で50と定義してください。そしてユーザーがスクロールした時、自動的に必要に応じて追加でレコードを読み込みます。 追加で読み込む件数は、「追加の読み込みレコード数」で指定します。これにより、最初の画面表示が早くなります。
リストビューで行列の自動調整をするように指定している
リストビューを右クリックし[リストビュー設定]の「その他の動作」タブで「行の高さを自動調整する」や「列幅を自動調整する」のチェックボックスがチェックされていると、リストビューの表示に時間がかかります。
リストビューに画像を一覧表示している
リストビューの一覧で画像を表示すると時間がかかります。画像を一覧に表示したい場合は、画像サイズが小さくなるように設定することで通信量を減らすことができます。
画像サイズを小さくするには、画像アップロード型セルから画像をアップロードする際に格納するテーブルをForguncyの内部テーブルにするか、あるいはリンクテーブルならば接続元のデータベースのテーブルのフィールドはテキスト型のフィールドに画像を格納させるようにしてください。Forguncyで画像アップロード型セルから画像をアップロードすると、DBとフィールド型に応じて、以下の違いがあります。
(1)リンクテーブルのバイナリ型のフィールドに保存
画像そのままがDBのフィールドに格納されます。この時、「画面の自動縮小」を指定していたら、そのサイズのファイルがDBに格納されます。指定していない場合、そのままのサイズがDBに格納されます。
これは一覧ページの表示の際、DBに格納されている画像をダウンロードする通信量に影響を及ぼします。「画面の自動縮小」で圧縮して小さくなるように指定すると、小さくなったサイズの通信量になりますので速度は早くなります。
ここで問題になるのは一覧表示時には、小さいサイズの画像は適していますが、詳細ページで画像を大きく表示したいとき、DBには圧縮した小さなサイズの画像しか格納されていないので、大きな表示には適さなくなります。
「画面の自動縮小」オプションを使用しなかった場合は、画像オリジナルのサイズでDBに格納されているので、一覧表示時には通信量が大きくなり速度が遅くなります。しかし、詳細ページで画像を大きく表示したときは、小さく表示されることはなくオリジナルのサイズで表示できます。
(2)リンクテーブルのテキスト型のフィールド、あるいはForguncyの内部テーブルに保存
画像がそのままDBのフィールドに格納されるわけではなく、サーバーに格納された画像ファイルのパスを文字列としてDBのフィールドに保存します。画像ファイルの実態は別の場所に格納されます。格納場所は以下を参照してください。
[保存フォルダー]-[ファイルアップロードパス]
https://docs.forguncy.com/v6/#savedfolder.html
この場合、画像をアップロードすると、「画面の自動縮小」の設定の有無に関わらず、150ピクセル、400ピクセル、オリジナル画像の3パターンが格納されます。
「画面の自動縮小」を設定すると、そのサイズの画像が格納されます。
サーバーに格納された画像をクライアントで表示する際、Forguncyはページで最適な画像サイズを判断しそのファイルがダウンロードされるようにします。このため、一覧表示時には小さなサイズの画像を、詳細ページでは大きなサイズの画像を自動的にダウンロードされるように返します。
一概には言えませんが、このようなことから、一覧と詳細がある場合は、DBの画像フィールドをテキストにされた方が、一覧表示時の通信量削減と、詳細ページ表示時の画質の維持を期待できる可能性があります。
内部データベースと外部データベースの結合が多い
データベース構造が複雑で結合が多い場合、パフォーマンスにも影響がでます。 例えば内部データベースと外 部データベースを結合していたり、外部データベースでも異なる SQL Server と Oracle を結合していたりする 場合、Forguncy 内部にて結合の処理が行われるため、単純にデータベース側で結合処理が行われる場合に比べ てパフォーマンスが低下します。このような場合、表示形式に合わせた View などを作成し、データベース側で 結合処理が行われるようにすることで改善が期待できます。
使用しているWebブラウザーのJavaScriptの実行速度
Forguncyアプリケーションは、各クライアントのWebブラウザー上でJavaScriptを用いて多くの処理を行います。そのため、JavaScriptの実行速度がForguncyアプリケーションでページを表示する際の時間に大きく影響します。
JavaScriptコードの実行速度が高速なWebブラウザーであるGoogle Chromeを使用することで、表示時間が改善されます。以下は、同一環境における各Webブラウザーの性能計測結果です。
Kraken JavaScript Benchmark
Mozilla社が開発したJavaScriptベンチマーク、数値が小さいほど高速
ユーザーが使用するパソコンのハードウェアスペック
基本的にはJavaScriptコードの実行速度はそのパソコンのハードウェアスペックに比例し、特にCPUの処理能力が大きく影響します。クライアントとして使用するハードウェアをより性能の良いものへ変更することでページの表示速度を改善できる可能性があります。
検索キーワード: fgcinfo fgcdevelopment