Son zamanlarda modern araçlarda ilginç bir eğilim gözlemleniyor: işi çalışma zamanından derleme zamanına taşımak, performansı artırmak için.
Bunu birçok araçta görebiliriz:
- Vite, artık Rust ile geliştirilmiş Rolldown’a doğru ilerliyor
- Inertia.js’de sürekli iyileştirmeler var
- Laravel Blade bileşenleri etrafında yeni bir fikir olan Blaze
Bu makalede Blaze’in arkasındaki fikri keşfedeceğiz ve bu durumun Blade bileşenlerinin render edilmesini nasıl iyileştirebileceğini inceleyeceğiz.
İlk: Blade Nasıl Çalışır
İlk: Blade Nasıl Çalışır
Blaze’den bahsetmeden önce, Laravel Blade’in nasıl çalıştığını hatırlamak gerekir.
Laravel’de Blade, geliştiricilerin aşağıdaki gibi talimatlar yazmasına olanak tanıyan bir şablon motorudur:
@if ($condition)
Hello
@endif
Ancak HTML, @if veya @php yönergelerini anlamaz.
Bu nedenle bir sayfa ilk kez yüklendiğinde, Laravel Blade derleyicisini çalıştırarak Blade talimatlarını düz PHP’ye dönüştürür:
Hello
Derlemeden sonra, Laravel derlenmiş sonucu şu dizin içinde saklar:
storage/framework/viewsBir sonraki sayfa talep edildiğinde, Laravel yalnızca derlenmiş PHP dosyasını yükler ve Blade şablonunu yeniden derlemeye gerek kalmaz.
Blade Dosyaları Büyüdüğünde
Blade Dosyaları Büyüdüğünde
Varsayalım ki dashboard.blade.php dosyanız büyümeye başladı ve birden fazla UI parçası içeriyor:
- Grafikler
- Çalışan devam durumu
- Takvim
- Widget’lar
Büyük ihtimalle Blade bileşenlerini kullanmaya başlayacaksınız.
Laravel bu bileşeni bulduğunda, bunu dahili olarak çözümler. Sürecin basitleştirilmiş bir versiyonu şöyle görünmektedir:
Request
→ Create Component
→ Render View
→ Return HTMLBu işlem çalışma zamanında gerçekleşir. Sayfanız birçok bileşen içeriyorsa, bu tekrarlayan render işlemi bazı gecikmelere neden olabilir.
Blaze’e Giriş
Blaze’e Giriş
Blaze, Blade’in bir değişimi değildir. Aksine, Blade bileşenlerinin nasıl render edildiğini optimize etmeyi amaçlar.
Blaze’in arkasındaki temel fikir, katlama ve derleme ile benzer bir şeydir. Bileşenleri çalışma zamanında tekrar tekrar render etmek yerine, öncelikle bileşen yapısını analiz eder.
İleri Dönüşüm Ağaçları (AST) Oluşturma
İleri Dönüşüm Ağaçları (AST) Oluşturma
Blaze bileşeni düğümlere ayırır ve AST (Abstract Syntax Tree) benzeri bir yapı oluşturur. Bu, Vue.js gibi framework’lerin şablonları nasıl analiz ettiğine benzer.
Component
├─ HTML Node
├─ Attribute Node
└─ Child ComponentYapı analiz edildikten sonra, Blaze sonucu optimize edebilir ve önbelleğe alabilir.
Fonksiyon Oluşturma
Fonksiyon Oluşturma
Bileşen mantığını her istekte yeniden yaratmak yerine, Blaze derlenmiş bileşeni temsil eden bir fonksiyon oluşturur.
Compile Component
→ Generate Function
→ Cache FunctionSayfa render edildiğinde:
Call Function
→ Return HTML
Üç Olası Bileşen Senaryosu
Üç Olası Bileşen Senaryosu
Blaze, bileşenleri üç temel yolla işler.
İlk kez yürütme
Call function
→ Execute
→ Return HTMLTekrarlanan bileşen kullanımı
Return cached resultStatik bileşenler
Bileşen tamamen statikse (örneğin, bir simge bileşeni), Blaze derlemeyi atlayabilir ve doğrudan HTML’i döndürebilir.
Basitleştirilmiş Blaze Akışı
Basitleştirilmiş Blaze Akışı
Compile
→ Generate Function
→ Call Function
→ Return HTMLTemel fikir basit: çalışmayı çalışma zamanından derleme zamanına taşımak.
Modern Araçlarda Daha Geniş Bir Eğilim
Modern Araçlarda Daha Geniş Bir Eğilim
Bu fikir sadece Blaze’e özgü değildir. Birçok modern araç bu yönde ilerlemektedir:
- Rust tabanlı derleyiciler
- Daha hızlı paketleyiciler
- Daha agresif derleme zamanı optimizasyonları
Örneğin:
- Vite, Rolldown’ı benimsiyor
- Daha hızlı derleme süreçleri
- Daha küçük çalışma zamanı maliyeti
Son Düşünceler
Son Düşünceler
Blaze, Blade bileşenlerinin render edilmesini iyileştirmek için ilginç bir yön sunmaktadır. Çalışmayı derleme zamanına kaydırarak, bileşenlerin tekrar tekrar render edilmesinden kaynaklanan çalışma zamanı yükünü azaltabilir.
Bu yaklaşım, modern geliştirici araçları arasında daha geniş bir eğilimle uyumlu görünmektedir.
Sonraki makalemizde Vite ve Rolldown’ı keşfedeceğiz ve ekosistemin neden Rust tabanlı araçlara yöneldiğini inceleyeceğiz.
Kaynaklar
Kaynaklar
Kaynak: Orijinal Makale


