Questo articolo è stato compilato utilizzando come fonte primaria il README di livewire/blaze. Al momento su laravel.com non esiste una documentazione dedicata a Blaze.
Cos’è Blaze
Blaze è il pacchetto di accelerazione dei componenti Blade pubblicato ufficialmente da Livewire. Non riguarda solo i componenti Livewire, ma include anche i normali componenti Blade anonimi. Nel README viene mostrato un benchmark che, per 25.000 rendering di un componente anonimo, passa da 500ms a 13ms (riduzione di circa il 97,4%). Anche per scenario sono riportate riduzioni tra il 91% e il 97%.Le tre strategie di ottimizzazione
Blaze fornisce tre strategie:compile (predefinita), memo e fold.
Quale scegliere
| Strategia | Quando sceglierla | Vantaggi | Note |
|---|---|---|---|
compile | Strategia standard da scegliere per prima | Alta compatibilità, facile da rendere veloce senza configurazione | Le limitazioni comuni vanno verificate |
memo | Icone, badge, ecc. che vengono renderizzati molte volte con le stesse props | Riduce il costo dei rendering successivi al primo | Non utilizzabile con componenti che hanno slot |
fold | Quando si punta al massimo delle prestazioni su UI staticamente determinabile | Elimina quasi del tutto l’overhead di runtime | Errori nella gestione di stato globale o valori dinamici causano incoerenze |
compile e applicare memo / fold solo dove è stato individuato un collo di bottiglia.
Installazione e abilitazione
1) Applicare @blaze a singoli componenti
2) Abilitare a livello di directory con Blaze::optimize()
Limitazioni
Ecco le limitazioni chiaramente indicate nel README.- I componenti class-based non sono supportati
- La variabile
$componentnon è disponibile - View composers / creators / lifecycle events non vengono attivati
- L’injection automatica delle variabili di
View::share()non è supportata (se serve, usa esplicitamente$__env->shared('key')) @awarea cavallo tra Blade e Blaze ha limitazioni (sia genitore sia figlio devono essere lato Blaze)- Non è possibile renderizzare direttamente un componente Blaze con
view()(solo tramite tag del componente)
Compatibilità con Flux UI
Nel README di Blaze si indica che, se stai usando Flux UI, basta installare Blaze per iniziare a usarlo senza alcuna configurazione aggiuntiva.Panoramica del funzionamento
Il normale Blade attraversa ogni volta una pipeline di rendering che include la risoluzione dei componenti e il processing degli attributi. Ilcompile di Blaze compila questo processo in una funzione PHP ottimizzata e la richiama direttamente, riducendo così notevolmente l’overhead della pipeline.
Come spiega il README, concettualmente le differenze sono le seguenti.
- Normale: esegue di volta in volta il processo di rendering standard di Blade
- Blaze
compile: chiama direttamente la funzione compilata - Blaze
fold: incorpora l’HTML in fase di compilazione, riducendo ulteriormente le computazioni di runtime
fold è il più veloce ma, se ci sono elementi che rompono l’assunzione di staticità (stato di autenticazione, valori dipendenti dalla richiesta, valori dipendenti dalla sessione, valori dipendenti dal tempo, ecc.), può causare malfunzionamenti. Applicalo gradualmente, solo alle parti ad alto carico, verificando il comportamento.