Este artículo se basa como fuente primaria en el README de livewire/blaze. Actualmente no hay documentación específica de Blaze en el lado de laravel.com.
¿Qué es Blaze?
Blaze es un paquete oficial de Livewire para acelerar componentes Blade. No está limitado a componentes Livewire, sino que también incluye los componentes anónimos ordinarios de Blade. En el README se muestra un benchmark de 25.000 renderizados de un componente anónimo con una mejora de 500 ms → 13 ms (una reducción de aproximadamente el 97,4 %). Por escenario, se reportan reducciones del 91 al 97 %.Las tres estrategias de optimización
Blaze ofrece tres estrategias:compile (predeterminada), memo y fold.
¿Cuál elegir?
| Estrategia | Cuándo elegirla | Ventajas | Consideraciones |
|---|---|---|---|
compile | Estrategia estándar como primera opción | Alta compatibilidad; fácil de acelerar sin configuración | Requiere revisar las limitaciones comunes |
memo | Iconos, badges, etc. que se renderizan muchas veces con las mismas props | Reduce el coste de re-renderizado tras la primera vez | No puede usarse en componentes con slot |
fold | Cuando se busca el máximo rendimiento en UI estáticamente determinable | Elimina prácticamente el overhead en tiempo de ejecución | Un manejo erróneo del estado global o de valores dinámicos puede provocar inconsistencias |
compile y aplicar memo / fold solo en los puntos donde se haya identificado un cuello de botella.
Instalación y activación
1) Añadir @blaze a componentes individuales
2) Activar por directorio con Blaze::optimize()
Limitaciones
Limitaciones que se indican explícitamente en el README.- No se admiten componentes basados en clase
- No se puede usar la variable
$component - Los View composers / creators / lifecycle events no se disparan
- No se admite la inyección automática de las variables de
View::share()(si es necesario, usa explícitamente$__env->shared('key')) @awareque atraviese la frontera entre Blade y Blaze tiene limitaciones (tanto el padre como el hijo deben usarse desde el lado de Blaze)- No se pueden renderizar directamente componentes Blaze con
view()(solo mediante etiquetas de componente)
Compatibilidad con Flux UI
En el README de Blaze se indica que, si estás usando Flux UI, puedes empezar a utilizarlo sin configuración adicional con solo instalar Blaze.Resumen del funcionamiento
Un Blade normal atraviesa cada vez el pipeline de renderizado, incluida la resolución del componente y el procesamiento de atributos. Elcompile de Blaze compila esto en una función PHP optimizada y la invoca directamente, reduciendo enormemente el overhead del pipeline.
Tal como explica el README, conceptualmente existen las siguientes diferencias.
- Normal: ejecuta cada vez el procesamiento estándar de renderizado de Blade
- Blaze
compile: invoca directamente una función compilada - Blaze
fold: incrusta HTML en tiempo de compilación, reduciendo aún más los cálculos en tiempo de ejecución
fold es el más rápido, pero si existen elementos que rompen la premisa de estaticidad (estado de autenticación, valores dependientes de la petición, valores dependientes de la sesión, valores dependientes del tiempo, etc.), puede causar fallos. Aplícalo de forma gradual únicamente a puntos de alta carga y comprobando el comportamiento.