Um in Laravel Octane zwischen Singletons, die bestehen bleiben, und solchen, die nicht bestehen, zu unterscheiden, müssen Sie verstehen, wie Octane mit Singleton-Instanzen umgeht und wie sie aufgelöst werden. Hier sind die wichtigsten Punkte, die es zu beachten gilt:
Singletons, die bestehen bleiben
1. Singletons in Dienstanbietern: Singletons, die innerhalb von Dienstanbietern aufgelöst werden, insbesondere in den Methoden „boot“ oder „register“, bleiben über alle Anforderungen hinweg bestehen. Dies liegt daran, dass diese Singletons während des Anwendungs-Bootstrappings aufgelöst und im Container-Cache gespeichert werden.
2. Warm Services: Sie können Singletons zum „Warm“-Array in der Octane-Konfigurationsdatei hinzufügen, um sicherzustellen, dass sie während des Anwendungs-Bootstrappings aufgelöst und beibehalten werden. Auf diese Weise sind diese Singletons für alle Anforderungen verfügbar.
Singletons, die nicht bestehen bleiben
1. Singletons bei der Anforderungsbearbeitung: Singletons, die während der Anforderungsbearbeitung aufgelöst werden, bleiben nicht bestehen. Sie werden bei jeder Anfrage erstellt und nicht im Container-Cache gespeichert.
2. Flush-Dienste: Wenn Sie ein Paket haben, das einen Singleton innerhalb eines Dienstanbieters registriert und auflöst, und Sie diese Instanz vor jeder Anfrage leeren möchten, können Sie sie dem „flush“-Array in der Octane-Konfigurationsdatei hinzufügen . Dadurch wird sichergestellt, dass der Singleton nach der Bearbeitung jeder Anfrage aus dem Container entfernt wird.
Best Practices
1. Rückrufe verwenden: Verwenden Sie beim Registrieren von Singletons Rückrufe anstelle der eigentlichen Instanz, um sicherzustellen, dass sie nur einmal aufgelöst werden.
2. Statische Eigenschaften vermeiden: Vermeiden Sie die Verwendung statischer Eigenschaften in Ihren Singletons, da diese zu Speicherverlusten führen und über Anfragen hinweg bestehen bleiben können.
3. Konstanten verwenden: Verwenden Sie nach Möglichkeit Konstanten anstelle statischer Eigenschaften, um Unveränderlichkeit sicherzustellen.
4. Anforderungsinstanz: Übergeben Sie beim Auflösen von Singletons einen Rückruf, um sicherzustellen, dass die Anforderungsinstanz korrekt aufgelöst wird.
5. Konfigurations-Repository: Verwenden Sie die Hilfsfunktion „config()“, anstatt das Konfigurations-Repository einzuschleusen, um sicherzustellen, dass es korrekt aufgelöst wird.
Indem Sie diese Best Practices befolgen und verstehen, wie Octane mit Singleton-Instanzen umgeht, können Sie in Ihrer Laravel-Anwendung, die auf Octane ausgeführt wird, effektiv verwalten und zwischen Singletons unterscheiden, die bestehen bleiben, und solchen, die dies nicht tun.
Zitate:[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/