Para diferenciar entre singletons que persisten y aquellos que no en el octanaje de Laravel, debes entender cómo el octano maneja las instancias de singleton y cómo se resuelven. Estos son los puntos clave a considerar:
singletons que persisten
1. Singletons en proveedores de servicios: los singletons que se resuelven dentro de los proveedores de servicios, específicamente en los métodos 'Boot` o' Register ', persistirán en todas las solicitudes. Esto se debe a que estos singleton se resuelven durante el arranque de la aplicación y se almacenan en el caché del contenedor.
2. Servicios cálidos: puede agregar singletons a la matriz 'cálida' en el archivo de configuración de Octane para asegurarse de que se resistan y persistan durante el arranque de la aplicación. De esta manera, estos singleton estarán disponibles en todas las solicitudes.
singletons que no persisten
1. Singletons en el manejo de solicitudes: los singletons que se resuelven durante el manejo de la solicitud no persistirán. Se construyen en cada solicitud y no se almacenan en el caché del contenedor.
2. Servicios de descarga: si tiene un paquete que registra y resuelve un singleton dentro de un proveedor de servicios y desea descargar esa instancia antes de cada solicitud, puede agregarlo a la matriz 'Flush' en el archivo de configuración de Octane. Esto asegura que el singleton se retire del contenedor después de manejar cada solicitud.
Las mejores prácticas
1. Use devoluciones de llamada: al registrar singletons, use devoluciones de llamada en lugar de la instancia real para asegurarse de que se resuelvan solo una vez.
2. Evite las propiedades estáticas: evite usar propiedades estáticas en sus singleton, ya que pueden provocar fugas de memoria y persistir en todas las solicitudes.
3. Use constantes: use constantes en lugar de propiedades estáticas cuando sea posible para garantizar la inmutabilidad.
4. Instancia de solicitud: al resolver Singletons, pase una devolución de llamada para asegurarse de que la instancia de solicitud se resuelva correctamente.
5. Repositorio de configuración: use la función `config ()` auxiliar en lugar de inyectar el repositorio de configuración para asegurarse de que se resuelva correctamente.
Siguiendo estas mejores prácticas y comprender cómo el octano maneja las instancias de singleton, puede gestionar y diferenciar de manera efectiva entre singletons que persisten y aquellos que no en su aplicación Laravel se ejecutan en octanaje [2] [4] [5].
Citas:[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/