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

# Vorstellung des Blaze-Pakets

> Wir erläutern, wie mit dem offiziellen Livewire-Paket Blaze das Rendering von Blade-Komponenten beschleunigt wird. Zusammengefasst werden die Auswahlkriterien für compile / memo / fold, die Einführung, Einschränkungen und die interne Funktionsweise.

<Info>
  Dieser Artikel fasst die README von [livewire/blaze](https://github.com/livewire/blaze) als Primärquelle zusammen. Zum aktuellen Zeitpunkt gibt es auf laravel.com noch keine dedizierte Dokumentation zu Blaze.
</Info>

## Was ist Blaze?

[Blaze](https://github.com/livewire/blaze) ist ein von Livewire offiziell veröffentlichtes Paket zur Beschleunigung von Blade-Komponenten. Zielobjekt sind nicht nur Livewire-Komponenten, sondern auch gewöhnliche anonyme Blade-Komponenten.

Die README zeigt als Benchmark das Rendering einer anonymen Komponente 25.000-mal: **500 ms → 13 ms** (rund **97,4 % Reduktion**). Auch szenariospezifisch werden Reduktionen zwischen 91 % und 97 % berichtet.

## Drei Optimierungsstrategien

Blaze stellt drei Strategien bereit: `compile` (Standard), `memo` und `fold`.

```mermaid theme={null}
flowchart LR
    A["Komponentenaufruf"] --> B["compile<br>Funktion kompilieren"]
    A --> C["memo<br>gleiche Props merken"]
    A --> D["fold<br>zur Compile-Zeit in HTML umsetzen"]
    B --> E["hohe Kompatibilität, deutliche Verbesserung"]
    C --> F["stark bei wiederholtem Rendering"]
    D --> G["maximale Performance, aber vorsichtig einsetzen"]
```

### Welche Strategie sollten Sie wählen?

| Strategie | Wann wählen?                                                          | Vorteile                                                               | Zu beachten                                                                          |
| --------- | --------------------------------------------------------------------- | ---------------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
| `compile` | Standardstrategie, mit der Sie zuerst starten                         | Hohe Kompatibilität, ohne Konfiguration leicht zu beschleunigen        | Die allgemeinen Einschränkungen müssen beachtet werden                               |
| `memo`    | Icons, Badges usw., die mit denselben Props mehrfach gerendert werden | Reduziert die Kosten des erneuten Renderings nach dem ersten Durchlauf | Nicht nutzbar bei Komponenten mit Slot                                               |
| `fold`    | UIs, die statisch feststehen, für maximale Performance                | Beseitigt den Laufzeit-Overhead nahezu vollständig                     | Bei falschem Umgang mit globalem State oder dynamischen Werten drohen Inkonsistenzen |

Wenn Sie unsicher sind, ist es sicher, **mit `compile` zu beginnen** und `memo` bzw. `fold` erst dort einzusetzen, wo Sie einen Engpass identifiziert haben.

## Installation und Aktivierung

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

Es gibt zwei Wege zur Aktivierung.

### 1) `@blaze` an einer einzelnen Komponente ergänzen

```blade theme={null}
@blaze

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

Bei Bedarf lässt sich die Strategie umschalten.

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

### 2) Aktivierung pro Verzeichnis mit `Blaze::optimize()`

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

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

Löschen Sie nach dem Aktivieren die kompilierten Views.

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

<Tip>
  `@blaze` eignet sich, „um es zunächst auszuprobieren", `Blaze::optimize()` „um es im Betrieb breit anzuwenden". Auch die README empfiehlt, zunächst mit einem eingeschränkten Verzeichnis zu starten und schrittweise auszuweiten.
</Tip>

## Einschränkungen

In der README genannte Einschränkungen:

* Klassenbasierte Komponenten werden nicht unterstützt
* Die Variable `$component` steht nicht zur Verfügung
* View-Composer/-Creator/Lifecycle-Events werden nicht ausgelöst
* Die automatische Injektion von `View::share()`-Variablen wird nicht unterstützt (falls nötig, explizit `$__env->shared('key')` verwenden)
* Für `@aware` zwischen Blade und Blaze gibt es Einschränkungen (sowohl Eltern- als auch Kindkomponente müssen auf der Blaze-Seite verwendet werden)
* Blaze-Komponenten können nicht direkt über `view()` gerendert werden (nur über Komponenten-Tags)

## Zusammenspiel mit Flux UI

Die Blaze-README weist darauf hin, dass sich Blaze bei Verwendung von [Flux UI](https://fluxui.dev/docs/installation) **allein durch die Installation und ohne zusätzliche Konfiguration nutzen lässt**.

## Überblick zur Funktionsweise

Normales Blade durchläuft bei jedem Aufruf eine Rendering-Pipeline mit Komponentenauflösung und Attributverarbeitung. `compile` von Blaze kompiliert dies zu einer optimierten PHP-Funktion, die direkt aufgerufen wird, wodurch der Overhead der Pipeline erheblich reduziert wird.

Wie in der README beschrieben, ergibt sich konzeptionell folgender Unterschied:

* Normal: Standard-Blade-Rendering wird jedes Mal ausgeführt
* Blaze `compile`: kompilierte Funktion wird direkt aufgerufen
* Blaze `fold`: HTML wird zur Compile-Zeit eingebettet, sodass Laufzeit­berechnungen weiter reduziert werden

`fold` ist am schnellsten, doch Elemente, die die statische Auflösung durchbrechen (Authentifizierungsstatus, request-abhängige Werte, session-abhängige Werte, zeitabhängige Werte usw.), können zu Fehlfunktionen führen. Wenden Sie es nur auf besonders lastintensive Stellen an und rollen Sie es schrittweise mit Verhaltensprüfungen aus.


## Related topics

- [Vorstellung von Laravel Wayfinder](/de/blog/wayfinder-introduction.md)
- [Verwendung - VOICEVOX Core für PHP](/de/packages/voicevox-core-php/usage.md)
- [Laravel-Tests mit Pest PHP starten](/de/blog/pest-introduction.md)
- [SPAs mit Inertia.js entwickeln](/de/blog/inertia-introduction.md)
- [Laravel Chisel – Post-Install-Skript-Bibliothek für Starterkits](/de/blog/chisel-introduction.md)
