İçeriğe geç
Muhammet Şafak
en

Laravel'de arayüz ölçeği: Blade'den SPA'ya

Blade, Alpine.js, Livewire, Inertia.js ve SPA: Laravel projesinde arayüz aracını etkileşim yoğunluğuna, SEO ihtiyacına ve ekibe göre seçmek.

Tan, elinde bir planla

Laravel · Arayüz

Laravel'de arayüz ölçeği: Blade'den SPA'ya

Her basamak farklı bir ihtiyaca cevap verir. Seçimi araç kalitesi değil, etkileşim yoğunluğu, görünürlük gereksinimi ve ekip belirler.

Muhammet Şafak

Kaynakların tarihi

Bu görsel 2020-2021 yazılarına dayanır

  • TarihKaynak yazılar 2020 ve 2021'de yazıldı. Görselde sürüme bağlı ayrıntı yok; karar mantığı aktarıldı.

Alpine ile Vue arasındaki fark

Fark araç kalitesi değil, ölçek.

“Her şey için SPA” başlangıç noktası olunca trade-off'lar görünmez oluyor. Projenin görünürlük gereksinimi de mimari kararın bir parçası.

Basamaklar

Blade'den SPA'ya beş ölçek

  1. Adım 1: BladeBilinen yol: şablon sunucuda render edilir.
  2. Adım 2: Alpine.jsŞablonda birkaç bağımsız etkileşim: dropdown, accordion, koşullu form alanı.
  3. Adım 3: LivewireForm ağırlıklı panel; her etkileşim sunucuya bir istek, DOM farkları uygulanır.
  4. Adım 4: Inertia.jsMonolit kalır, arayüz Vue ya da React; API yazılmaz, tek istemci.
  5. Adım 5: SPA + APIAyrı kod tabanı; API'yi mobil ya da üçüncü taraf istemci de tüketir.

Karar haritası

Etkileşim yoğunluğu ve arama görünürlüğü

Dikey eksen sayfanın arama motorundan bulunma ihtiyacını, yatay eksen istemci tarafındaki etkileşim yoğunluğunu gösterir.

İçerik oturum arkasında ↔ SEO gerekli

  • Blade + Alpine.js

    Sunucuda render

    • HTML sunucudan tam gelir
    • Birkaç bağımsız etkileşime Alpine yeter
  • SSR, SSG ya da ISR

    Next.js, Nuxt.js

    • İçerik yoğun yeni proje: SSG ya da ISR
    • Bot tam içeriği ilk yüklemede görür
  • Livewire

    Yönetim paneli

    • Filtreleme, sayfalama, form adımları
    • Sunucu round-trip'i kabul edilebilir
  • Inertia.js ya da SPA

    Oturum arkası

    • İçerik oturum arkasındaysa SEO gerçek bir sorun değil
    • Tek istemci: Inertia; birden çok istemci: ayrı API

Az etkileşim ↔ Yoğun etkileşim

Aynı yıl iki projede

Livewire ve Inertia.js

Livewire ve Inertia.js
KonuLivewireInertia.js
Kimin içinBackend odaklı ekip; JavaScript minimumFrontend geliştiricisinin sahada olduğu ekip
ArayüzPHP sınıfı ve Blade görünümüVue ya da React sayfa bileşeni
Uygun projeForm ağırlıklı yönetim paneliKarmaşık istemci tarafı etkileşim
SınırHer etkileşim bir HTTP isteği; yüksek frekansta gecikme fark edilirSunucu ve istemci sıkı bağlı; frontend bağımsız evrilemez

Inertia.js nasıl çalışır

API'siz SPA hissi

  1. Adım 1: Bağlantıya tıklaInertia sayfa geçişini yakalar.
  2. Adım 2: ControllerInertia::render() sayfa bileşenini ve verisini döner.
  3. Adım 3: JSON yanıtBileşen adı ve props gelir; paylaşılan veri her yanıta eklenir.
  4. Adım 4: Yerinde güncellemeTam sayfa yenilenmez, bileşen yerinde güncellenir.

SPA'da arama görünürlüğü

Dört seçenek

Dört seçenek
SeçenekNasıl çalışırKazanç ve bedel
SSRHer istekte HTML sunucuda üretilirBot tam içeriği ilk yüklemede görür; sunucu kaynağı tüketir, Node.js sunucusu gerekir
SSGTüm sayfalar build zamanında üretilirCDN'den sunulur, çok hızlı; build süresi uzar, dinamik içerikte sınırlı
ISRStatik üretilir, belirli aralıkta arka planda yenilenirSSG'nin build süresini ve SSR'nin sunucu yükünü dengeler
PrerenderBotlara önceden oluşturulmuş HTML, kullanıcıya SPADönüşüm maliyeti düşük; ek bağımlılık, içerik senkron kalmayabilir

Doğru görev eşleşmesi

Alpine.js ve Livewire'ı ölçeğinde kullanmak

Yap

  • Alpine'ı şablondaki küçük, bağımsız etkileşimlere ayır
  • Modal'ı Alpine anında açsın, Livewire veriye arka planda erişsin
  • Form alanlarında wire:model.lazy ile her tuşa istek atma
  • Büyüyen x-data mantığını ayrı bir component dosyasına taşı

Yapma

  • Sayfalar arası durumu ve karmaşık bileşen iletişimini Alpine'a yükleme
  • Anlık arama, sürükle-bırak ve animasyonu sunucu round-trip'ine bırakma
  • Şablona iş mantığı sızdırma
  • Karmaşık istemci durumunu Livewire'dan bekleme
Tan, eli çenesinde düşünürken

Seçmeden önce

Karar soruları

  • Sayfalar oturum açmadan erişilip arama motorundan mı bulunuyor? (bekliyor)
  • Etkileşim yoğun mu, kullanıcı milisaniye hassasiyeti mi bekliyor? (bekliyor)
  • Ekipte Vue ya da React yazabilecek biri var mı? (bekliyor)
  • API'yi web arayüzünden başka bir istemci de tüketecek mi? (bekliyor)

SPA ve kimlik doğrulama

Çerez mi, token mı?

  • İpucuAynı kök domain (same-site) üzerindeki SPA için çerez tabanlı oturum daha temiz; token saklama ve yenileme derdi kalkar.
  • UyarılocalStorage XSS saldırılarına açıktır; token'ı orada saklamayın.
  • NotSPA ve API farklı subdomain'lerde olabilir, farklı ana domain'lerde olamaz. Bu sınırın dışında token modeline geçilir.
  • TuzakSubdomain kullanıyorsanız çerez domain'i baştaki noktayla (.example.com) ayarlanmalı; aksi hâlde çerez yalnız bir subdomain'e gider.

Paylaş ve indir

Sitede Ara

Yazı, proje ve sayfalarda arama yapmak için yazmaya başlayın.

Escile kapatPagefind ile güçlendirildi