Para diferenciar entre los singleton que persisten y los que no en Laravel Octane, es necesario comprender cómo Octane maneja las instancias 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 la caché del contenedor.
2. Servicios cálidos: puede agregar singletons a la matriz "cálida" en el archivo de configuración de Octane para garantizar que se resuelvan 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 solicitudes no persistirán. Se construyen en cada solicitud y no se almacenan en la caché del contenedor.
2. Servicios de vaciado: si tiene un paquete que registra y resuelve un singleton dentro de un proveedor de servicios y desea vaciar esa instancia antes de cada solicitud, puede agregarla a la matriz `flush` en el archivo de configuración de Octane. . Esto garantiza que el singleton se elimine del contenedor después de manejar cada solicitud.
Mejores prácticas
1. Utilice devoluciones de llamada: al registrar singletons, utilice devoluciones de llamada en lugar de la instancia real para asegurarse de que se resuelvan solo una vez.
2. Evite propiedades estáticas: evite el uso de propiedades estáticas en sus singletons, ya que pueden provocar pérdidas de memoria y persistir en todas las solicitudes.
3. Utilice constantes: utilice 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 garantizar que la instancia de solicitud se resuelva correctamente.
5. Repositorio de configuración: utilice la función auxiliar `config()` en lugar de inyectar el repositorio de configuración para garantizar que se resuelva correctamente.
Si sigue estas mejores prácticas y comprende cómo Octane maneja las instancias singleton, podrá administrar y diferenciar eficazmente entre los singleton que persisten y los que no en su aplicación Laravel que se ejecuta en Octane[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/