Om onderscheid te maken tussen singletons die aanhouden en die die niet in Laravel Octane niet, moet je begrijpen hoe Octane omgaat met singleton -instanties en hoe ze zijn opgelost. Hier zijn de belangrijkste punten om te overwegen:
singletons die aanhouden
1. Singletons in serviceproviders: singletons die zijn opgelost in serviceproviders, met name in de methoden 'opstart' of 'register', zal bij verzoeken blijven bestaan. Dit komt omdat deze singletons worden opgelost tijdens de toepassing bootstrapping en worden opgeslagen in de containercache.
2. Warme services: u kunt singletons toevoegen aan de `Warm' -array in het Octane -configuratiebestand om ervoor te zorgen dat ze worden opgelost en blijven bestaan tijdens de toepassing Bootstrapping. Op deze manier zullen deze singletons beschikbaar zijn in alle verzoeken.
singletons die niet blijven bestaan
1. Singletons in aanvraagafhandeling: singletons die worden opgelost tijdens het afhandelen van de aanvraag zal niet blijven bestaan. Ze zijn op elk verzoek geconstrueerd en worden niet opgeslagen in de containercache.
2. Services doorspoelen: als u een pakket hebt dat een singleton in een serviceprovider registreert en oplost en u dat exemplaar vóór elk verzoek wilt doorspoelen, kunt u het toevoegen aan de `flush' -array in het Octane -configuratiebestand. Dit zorgt ervoor dat de singleton na het hanteren van elk verzoek uit de container wordt verwijderd.
Best practices
1. Gebruik callbacks: gebruik bij het registreren van singletons callbacks in plaats van het feitelijke exemplaar om ervoor te zorgen dat ze slechts eenmaal zijn opgelost.
2. Vermijd statische eigenschappen: vermijd het gebruik van statische eigenschappen in uw singletons, omdat ze kunnen leiden tot geheugenlekken en aanhouden aan verzoeken.
3. Gebruik constanten: gebruik constanten in plaats van statische eigenschappen waar mogelijk om onveranderlijkheid te waarborgen.
4. Verzoekinstantie: geef bij het oplossen van singletons een callback door om ervoor te zorgen dat de aanvraaginstantie correct is opgelost.
5. Configuratierepository: gebruik de `config ()` helperfunctie in plaats van de configuratie repository te injecteren om ervoor te zorgen 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 onderscheiden tussen singletons die aanhouden en die die niet in uw Laravel -toepassing op Octane [2] [4] [5] worden uitgevoerd.
Citaten:[1] https://laracasts.com/discuss/channels/laravel/singletone-not-working-in-laravel
[2] https://divinglaravel.com/laravel-octane-bootstrapping-the-application-andhandling-requests
[3] https://grantwinney.com/difference-tween-singleton-Scoped-transient/
[4] https://betterprogramming.pub/the-downsides-of-coDing-With-laravel-octane-17f4a7a4ea85?gi=d8afa3954408
[5] https://www.prismetric.com/laravel-octane/