Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Octane で永続するシングルトンと永続しないシングルトンを区別するにはどうすればよいですか?


Octane で永続するシングルトンと永続しないシングルトンを区別するにはどうすればよいですか?


Laravel Octane で永続するシングルトンと永続しないシングルトンを区別するには、Octane がシングルトン インスタンスをどのように処理し、それらがどのように解決されるかを理解する必要があります。考慮すべき重要な点は次のとおりです。

存続するシングルトン

1. サービス プロバイダー内のシングルトン: サービス プロバイダー内、具体的には「boot」メソッドまたは「register」メソッド内で解決されるシングルトンは、リクエスト間で持続します。これは、これらのシングルトンがアプリケーションのブートストラップ中に解決され、コンテナー キャッシュに保存されるためです。

2. ウォーム サービス: Octane 構成ファイルの「warm」配列にシングルトンを追加すると、アプリケーションのブートストラップ中にシングルトンが解決され、永続化されるようになります。こうすることで、これらのシングルトンはすべてのリクエストで利用できるようになります。

永続しないシングルトン

1. リクエスト処理におけるシングルトン: リクエスト処理中に解決されたシングルトンは保持されません。これらはリクエストごとに構築され、コンテナーのキャッシュには保存されません。

2. サービスのフラッシュ: サービス プロバイダー内にシングルトンを登録して解決するパッケージがあり、すべてのリクエストの前にそのインスタンスをフラッシュしたい場合は、それを Octane 構成ファイルの `flush` 配列に追加できます。 。これにより、各リクエストの処理後にシングルトンがコンテナから確実に削除されます。

ベストプラクティス

1. コールバックを使用する: シングルトンを登録するときは、実際のインスタンスの代わりにコールバックを使用して、シングルトンが 1 回だけ解決されるようにします。

2. 静的プロパティを避ける: 静的プロパティはメモリ リークを引き起こし、リクエスト間で持続する可能性があるため、シングルトンでの使用は避けてください。

3. 定数を使用: 不変性を確保するために、可能な場合は静的プロパティの代わりに定数を使用します。

4. リクエスト インスタンス: シングルトンを解決するときは、リクエスト インスタンスが正しく解決されるようにコールバックを渡します。

5. 設定リポジトリ: 設定リポジトリが正しく解決されることを確認するには、設定リポジトリを挿入する代わりに `config()` ヘルパー関数を使用します。

これらのベストプラクティスに従い、Octane がシングルトンインスタンスを処理する方法を理解することで、Octane で実行されている Laravel アプリケーション内で永続するシングルトンと永続しないシングルトンを効果的に管理し、区別することができます[2][4][5]。

引用:
[1] https://laracasts.com/discuss/channels/laravel/singletone-not-working-in-laravel
[2] https://divinglaravel.com/laravel-octane-bootstrapping-the-application-and-handling-requests
[3] https://grantwinney.com/difference-between-singleton-scoped-transient/
[4] https://betterprogramming.pub/the-downsides-of-coding-with-laravel-octane-17f4a7a4ea85?gi=d8afa3954408
[5] https://www.prismetric.com/laravel-octane/