Aby ste v Laravel Octane rozlíšili medzi jednotlivými inštanciami, ktoré pretrvávajú, a tými, ktoré nie, musíte pochopiť, ako Octane spracováva jednotlivé inštancie a ako sa riešia. Tu sú kľúčové body, ktoré treba zvážiť:
Singletons, ktoré pretrvávajú
1. Singletons in Service Providers: Singletons, ktoré sú vyriešené v rámci poskytovateľov služieb, konkrétne v metódach `boot` alebo `register`, budú pretrvávať pri všetkých požiadavkách. Je to preto, že tieto singletony sú vyriešené počas zavádzania aplikácie a sú uložené vo vyrovnávacej pamäti kontajnera.
2. Warm Services: Môžete pridať singletony do „warm“ poľa v konfiguračnom súbore Octane, aby ste sa uistili, že sú vyriešené a pretrvávajú počas zavádzania aplikácie. Týmto spôsobom budú tieto singletony dostupné vo všetkých požiadavkách.
Singletons, ktoré nepretrvajú
1. Singletons in Request Handling: Singletons, ktoré sú vyriešené počas spracovania žiadostí, nebudú pretrvávať. Vytvárajú sa pri každej požiadavke a neukladajú sa do vyrovnávacej pamäte kontajnera.
2. Flush Services: Ak máte balík, ktorý registruje a rieši singleton v rámci poskytovateľa služieb a chcete túto inštanciu vyprázdniť pred každou požiadavkou, môžete ju pridať do poľa „flush“ v konfiguračnom súbore Octane. . To zaisťuje, že singleton sa vyberie z kontajnera po vybavení každej požiadavky.
Osvedčené postupy
1. Použite spätné volania: Pri registrácii jednotlivých volaní použite spätné volania namiesto skutočnej inštancie, aby ste sa uistili, že budú vyriešené iba raz.
2. Vyhnite sa statickým vlastnostiam: Vyhnite sa používaniu statických vlastností vo svojich jednotkách, pretože môžu viesť k úniku pamäte a pretrvávať pri všetkých požiadavkách.
3. Použite konštanty: Ak je to možné, použite konštanty namiesto statických vlastností, aby ste zabezpečili nemennosť.
4. Inštancia požiadavky: Pri riešení jednotlivých prípadov odošlite spätné volanie, aby ste sa uistili, že inštancia požiadavky je vyriešená správne.
5. Úložisko konfigurácií: Namiesto vloženia archívu konfigurácie použite pomocnú funkciu `config()`, aby ste sa uistili, že je správne vyriešený.
Dodržiavaním týchto osvedčených postupov a pochopením toho, ako Octane spracováva jednotlivé inštancie, môžete efektívne spravovať a rozlišovať medzi singletonmi, ktoré pretrvávajú, a tými, ktoré nie sú vo vašej Laravel aplikácii spustenej na Octane[2][4][5].
Citácie:[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/