Para diferenciar entre singletons que persistem e aqueles que não persistem no Laravel Octane, você precisa entender como o Octane lida com instâncias singleton e como elas são resolvidas. Aqui estão os pontos principais a serem considerados:
Singletons que persistem
1. Singletons em Provedores de Serviços: Singletons que são resolvidos dentro de provedores de serviços, especificamente nos métodos `boot` ou `register`, persistirão entre as solicitações. Isso ocorre porque esses singletons são resolvidos durante a inicialização do aplicativo e armazenados no cache do contêiner.
2. Warm Services: Você pode adicionar singletons ao array `warm` no arquivo de configuração do Octane para garantir que eles sejam resolvidos e persistidos durante a inicialização do aplicativo. Dessa forma, esses singletons estarão disponíveis em todas as solicitações.
Singletons que não persistem
1. Singletons no tratamento de solicitações: Singletons resolvidos durante o tratamento de solicitações não persistirão. Eles são construídos a cada solicitação e não são armazenados no cache do contêiner.
2. Serviços de Flush: Se você possui um pacote que registra e resolve um singleton dentro de um provedor de serviços e deseja liberar essa instância antes de cada solicitação, você pode adicioná-lo ao array `flush` no arquivo de configuração do Octane . Isso garante que o singleton seja removido do contêiner após o processamento de cada solicitação.
Melhores Práticas
1. Usar retornos de chamada: Ao registrar singletons, use retornos de chamada em vez da instância real para garantir que eles sejam resolvidos apenas uma vez.
2. Evite propriedades estáticas: Evite usar propriedades estáticas em seus singletons, pois elas podem causar vazamentos de memória e persistir entre solicitações.
3. Use Constantes: Use constantes em vez de propriedades estáticas quando possível para garantir a imutabilidade.
4. Instância de solicitação: ao resolver singletons, passe um retorno de chamada para garantir que a instância de solicitação seja resolvida corretamente.
5. Repositório de configuração: Use a função auxiliar `config()` em vez de injetar o repositório de configuração para garantir que ele seja resolvido corretamente.
Seguindo essas práticas recomendadas e entendendo como o Octane lida com instâncias singleton, você pode gerenciar e diferenciar efetivamente entre singletons que persistem e aqueles que não persistem em seu aplicativo Laravel em execução no Octane[2][4][5].
Citações:[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/