> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Presentazione del pacchetto Blaze

> Spiega come velocizzare il rendering dei componenti Blade utilizzando Blaze, il pacchetto ufficiale di Livewire. Riassume i criteri per scegliere tra compile, memo e fold, il metodo di introduzione, le limitazioni e il funzionamento interno.

<Info>
  Questo articolo è stato compilato utilizzando come fonte primaria il README di [livewire/blaze](https://github.com/livewire/blaze). Al momento su laravel.com non esiste una documentazione dedicata a Blaze.
</Info>

## Cos'è Blaze

[Blaze](https://github.com/livewire/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`.

```mermaid theme={null}
flowchart LR
    A["chiamata al componente"] --> B["compile<br>compilazione della funzione"]
    A --> C["memo<br>memoizzazione delle stesse props"]
    A --> D["fold<br>trasformazione in HTML in fase di compilazione"]
    B --> E["ampia compatibilità e grande miglioramento"]
    C --> F["forte in rendering ripetuti"]
    D --> G["massime prestazioni, ma con attenzione"]
```

### 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 |

Se hai dubbi, l'approccio più sicuro è **partire da `compile`** e applicare `memo` / `fold` solo dove è stato individuato un collo di bottiglia.

## Installazione e abilitazione

```bash theme={null}
composer require livewire/blaze:^1.0
```

Ci sono due modi per abilitarlo.

### 1) Applicare `@blaze` a singoli componenti

```blade theme={null}
@blaze

<button {{ $attributes }}>
    {{ $slot }}
</button>
```

Se necessario, cambia la strategia.

```blade theme={null}
@blaze(memo: true)
@blaze(fold: true)
```

### 2) Abilitare a livello di directory con `Blaze::optimize()`

```php theme={null}
use Livewire\Blaze\Blaze;

public function boot(): void
{
    Blaze::optimize()
        ->in(resource_path('views/components'));
}
```

Dopo l'abilitazione, ripulisci le view compilate.

```bash theme={null}
php artisan view:clear
```

<Tip>
  `@blaze` è adatto a un utilizzo "per provare per prima cosa", mentre `Blaze::optimize()` è adatto a un utilizzo "esteso in produzione". Anche il README raccomanda di applicarlo gradualmente partendo da una directory limitata.
</Tip>

## Limitazioni

Ecco le limitazioni chiaramente indicate nel README.

* I componenti class-based non sono supportati
* La variabile `$component` non è 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')`)
* `@aware` a 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](https://fluxui.dev/docs/installation), **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. Il `compile` 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.


## Related topics

- [Presentazione di Laravel Wayfinder](/it/blog/wayfinder-introduction.md)
- [Laravel PAO — strumento di ottimizzazione dell'output per agenti AI](/it/blog/pao-introduction.md)
- [⚡Introduzione a Livewire 4 — creare UI reattive senza JavaScript](/it/blog/livewire-introduction.md)
- [Pacchetto core e driver personalizzati - Feedable](/it/packages/feedable/core.md)
- [Laravel Chisel — libreria di script post-installazione per starter kit](/it/blog/chisel-introduction.md)
