Om onderscheid te maken tussen singletons die blijven bestaan en degenen die dat niet doen in Laravel Octane, moet u begrijpen hoe Octane omgaat met singleton-instanties en hoe deze worden opgelost. Dit zijn de belangrijkste punten waarmee u rekening moet houden:
Eenlingen die blijven bestaan
1. Singletons in serviceproviders: singletons die binnen serviceproviders worden opgelost, met name in de 'boot'- of 'register'-methoden, blijven bij alle verzoeken aanwezig. Dit komt omdat deze singletons worden opgelost tijdens het opstarten van de applicatie en worden opgeslagen in de containercache.
2. Warm Services: u kunt singletons toevoegen aan de `warm`-array in het Octane-configuratiebestand om ervoor te zorgen dat ze worden opgelost en behouden blijven tijdens het opstarten van de applicatie. Op deze manier zijn deze singletons beschikbaar voor alle verzoeken.
Singletons die niet blijven bestaan
1. Singletons in de verwerking van verzoeken: Singletons die tijdens de verwerking van verzoeken worden opgelost, blijven niet bestaan. Ze worden op elk verzoek samengesteld en worden niet opgeslagen in de containercache.
2. Flush Services: als u een pakket heeft dat een singleton binnen een serviceprovider registreert en oplost en u wilt dat exemplaar vóór elk verzoek leegmaken, dan kunt u dit toevoegen aan de `flush`-array in het Octane-configuratiebestand . Dit zorgt ervoor dat de singleton na afhandeling van elk verzoek uit de container wordt gehaald.
Beste praktijken
1. Gebruik callbacks: gebruik bij het registreren van singletons callbacks in plaats van het daadwerkelijke exemplaar om ervoor te zorgen dat ze slechts één keer worden opgelost.
2. Vermijd statische eigenschappen: vermijd het gebruik van statische eigenschappen in uw singletons, omdat deze tot geheugenlekken kunnen leiden en bij alle verzoeken kunnen blijven bestaan.
3. Gebruik constanten: Gebruik waar mogelijk constanten in plaats van statische eigenschappen om onveranderlijkheid te garanderen.
4. Request Instance: geef bij het oplossen van singletons een callback door om er zeker van te zijn dat de request instance correct wordt opgelost.
5. Configuratieopslagplaats: Gebruik de hulpfunctie `config()` in plaats van de configuratieopslagplaats te injecteren om er zeker van te zijn dat deze correct wordt opgelost.
Door deze best practices te volgen en te begrijpen hoe Octane omgaat met singleton-instanties, kunt u effectief beheren en onderscheid maken tussen singletons die blijven bestaan en degenen die dat niet doen in uw Laravel-applicatie die op Octane draait[2][4][5].
Citaties:[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/