本文以 livewire/blaze 的 README 為第一手資訊整理。目前 laravel.com 上尚未有 Blaze 專用文件。
什麼是 Blaze
Blaze 是 Livewire 官方發佈的 Blade 元件加速套件。對象不僅限於 Livewire 元件,也包含一般的匿名 Blade 元件。 README 中匿名元件繪製 25,000 次的 benchmark 顯示從 500ms → 13ms(約 97.4% 縮減)。依情境不同也回報有 91〜97% 的縮減。三種最佳化策略
Blaze 提供compile(預設)、memo、fold 三種策略。
該選哪一個
若拿不定主意,較安全的做法是先從
compile 開始,只在被找出的瓶頸處套用 memo / fold。
安裝與啟用
1) 對個別元件加上 @blaze
2) 用 Blaze::optimize() 以目錄為單位啟用
限制事項
以下是 README 中明示的限制。- 不支援類別型元件
- 無法使用
$component變數 - View composer / creator / lifecycle event 不會觸發
- 不支援
View::share()變數的自動注入(若需要,請明確使用$__env->shared('key')) - 橫跨 Blade 與 Blaze 的
@aware有限制(父子雙方都必須在 Blaze 側使用) - 無法用
view()直接繪製 Blaze 元件(僅能透過元件標籤)
與 Flux UI 的相容性
Blaze README 說明,若使用 Flux UI,只要安裝 Blaze 即可零設定啟用。運作機制概要
一般 Blade 每次都會走過包含元件解析與屬性處理的繪製 pipeline。Blaze 的compile 會將其編譯為最佳化過的 PHP 函式直接呼叫,大幅減少 pipeline 的 overhead。
依照 README 說明,概念上有以下差異:
- 一般:每次都執行 Blade 標準繪製流程
- Blaze
compile:直接呼叫已編譯的函式 - Blaze
fold:於編譯時直接嵌入 HTML,進一步減少執行時運算
fold 最快,但若有破壞靜態化前提的要素(認證狀態、依請求變化的值、依 session 或時間的值等)會導致問題。請鎖定高負載處,一邊確認行為一邊分階段套用。