Best practices

サービスの生存期間を管理する

リクエスト固有・共有・バックグラウンド処理のリソースについて、所有者と解放する時点を決めます。

1 件のリクエストで使うリソースは、Effront に管理させます。 共有リソースとバックグラウンド処理には、別の所有者を設けてください。

リソースの所有者を決める

リソースの用途所有者解放する時点
1 件のリクエストリクエストの Scopeストリーミングする本文の完了、失敗、キャンセル時
接続プールなど、複数のリクエストで共有アプリケーションの Layer 外にあるホスト側の所有者利用するすべてのレスポンスが終了した後
レスポンス終了後も続ける処理ホストが対応するバックグラウンド処理その処理が終了した時点

共有の接続プールを使う場合は、借りた接続の返却処理をリクエストの Scope に登録します。 プールの破棄はホスト側の所有者に任せてください。 ホストから提供するサービスについては、外部サービスの所有権の契約を参照してください。

リクエストのリソースをアプリケーションの Layer で取得する

Effront は、EFFRONT.make({ routes, layer }) に渡す Layer をリクエストごとに構築します。 リクエスト固有の取得処理は Layer.effect に置き、Effect.acquireRelease で解放処理を登録します。 サービスの宣言と Layer の登録方法はサービスの設定例を参照してください。

レスポンス本文の終了までリソースを維持する

遅れてレンダーされるコンポーネントは、ハンドラーが Response を返した後も、リクエストのサービスを利用できます。 登録した解放処理は、ストリーミングする本文の終了時にリクエストの Scope に実行させます。 バッファリング済みのレスポンス、本文のないレスポンス、レスポンス生成の失敗では、本文の消費を待たずに Effront が取得済みのリソースを解放します。