Dieser Artikel fasst die README von livewire/blaze als Primärquelle zusammen. Zum aktuellen Zeitpunkt gibt es auf laravel.com noch keine dedizierte Dokumentation zu Blaze.
Was ist Blaze?
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.
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 |
compile zu beginnen und memo bzw. fold erst dort einzusetzen, wo Sie einen Engpass identifiziert haben.
Installation und Aktivierung
1) @blaze an einer einzelnen Komponente ergänzen
2) Aktivierung pro Verzeichnis mit Blaze::optimize()
Einschränkungen
In der README genannte Einschränkungen:- Klassenbasierte Komponenten werden nicht unterstützt
- Die Variable
$componentsteht 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
@awarezwischen 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 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 Laufzeitberechnungen 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.