0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[ODC]On InitializeやOn Readyでサーバー処理を呼ぶことの影響

Posted at

この前の、OSUG Tokyoイベント (2025/08/26) でも質問があった件。
ScreenのOn InitializeやOn Readyでサーバー処理を呼ぶのは良くないというが実際何が問題なのか。

環境情報

ODC Studio (Version 1.5.36)

Eventの説明

画面とブロックのライフサイクルイベント > ライフサイクルイベントハンドラのドキュメントから引用する。

On Initialize

On Initializeイベントハンドラは、ユーザーの画面へのアクセス権限を確認した後、画面に移動してデータの取り出しを開始する前に実行されます。

画面遷移開始前に動作する、ライフサイクルの最初に来るイベント。

On Ready

On Readyイベントハンドラは、画面またはブロックの準備が完了したとき、つまり、DOMの準備が完了したとき、最初のレンダリング後に実行されます。

On Initializeに続き、画面のDOMの準備ができてから発生するイベント。

実装例(問題が起きる実装の例)

Screen構成:
image.png

  • SlowOnInitializeTest: On Initialize Eventで5秒間かかるServer Actionを呼ぶ
  • SlowOnReadyTest: On Ready Eventで5秒間かかるServer Actionを呼ぶ
  • LifeCycleEventTest: ↑2つのScreenへ画面遷移するLinkを配置

LifeCycleEventTestから画面遷移することで、On InitializeやOn ReadyでServer Actionを呼ぶことがどのような影響を与えるか確認する。

5秒間かかるServer Acitonは、(System)/Sleep ActionをTimeパラメータ=5000で呼ぶと実現できる。

動作確認結果

  • SlowOnInitializeTest: Server Action呼び出しが終わってから画面遷移が発生する
  • SlowOnReadyTest: Server Action呼び出しを待たずに画面遷移が発生する

ODC Studioの警告

上記の実装例では、SlowOnInitializeTestにだけ警告が発生する。

Performance Warning
'OnInitialize' contains accesses to the local storage or server, which delays the screen's render. To avoid performance issues, use Aggregates or Data Actions instead.

On Initializeで時間がかかる処理(この場合はServer Action呼び出し)を行うと、画面の描画を遅らせるので避けるべき、という内容。動作確認結果と整合する。
On Readyにはこの指摘は挙がらないようだ。

Code qualityの指摘

Code qualityはODCの静的解析機能。
使い方は以下の記事を参照。

上記の実装例では、それぞれ以下の指摘が挙がる。
(Severity: Medium、Category: Performance)

Server requests in client events on OnInitialize

もしくは

Server requests in client events on OnReady

クライアントイベントでのサーバーリクエストにドキュメントがあるので詳細はこちらを参照。

画面とブロックのライフサイクルイベント(On Initialize、Ready、Render、After Fetch)はリクエスト時にシリアル化されるため、サーバー呼び出しでのレスポンス取得に時間がかかり、画面の描画時間に影響します。

ライフサイクルイベント内のリクエストはシリアル化されて実行されるので、最終結果が画面描画されるまで時間がかかる可能性がある、という指摘と思われる。
この意味であれば、On ReadyでServer Action呼び出しを行った時にCode qualityの指摘が挙がるのも理解できる。

単独のServer Action呼び出しのみが配置されている場合は関係ない気もするが、Server Action呼び出し後にその結果を利用するロジックを置いていたりすると影響があるのかもしれない。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?