Bu site (JSkelet)
ölçüldü46.2 kB
gzip · first-load client assets
- Stylesheet (Tailwind v4 çıktısı) 12.9 kB
- Client entry (island yükleyicisi) 318 B
- İkon sprite'ı 4.0 kB
- Tüm island'lar (talep üzerine, ayrı chunk'lar) 28.9 kB
Bilerek seç
Dört yaklaşımın güçlü ve zayıf taraflarını aynı zeminde görün. JSkelet'in kaybettiği satırları saklamıyoruz.
| Ölçüt | JSkelet | Next.js (App Router) | Astro + adapter | Express + EJS (elle) |
|---|---|---|---|---|
| Boş sayfada client JS | Tek entry; island yoksa başka hiçbir şey | React ve runtime, sayfa statik olsa da | Yok; UI framework'ü seçilmediği sürece | Yok (etkileşimi de yok) |
| HTML içinde framework JSON | Yok — belge sayfanın kendisi | __NEXT_DATA__ (veya RSC flight) HTML'in yanında | Varsayılan olarak yok | Yok |
| Etkileşim modeli | Vanilla island ve bir mount fonksiyonu | Bileşen ağacı, sunucu/client sınırıyla | İstediğiniz UI framework'ünde island | Kendi kurduğunuz script etiketleri |
| HTML önbelleği | Süreç içinde TTL, erken yenileme, host vary, SWR | ISR; platforma ve deposuna bağlı | Statik build ya da adapter'ın CDN'i | Yok; kendiniz kurarsınız |
| Nokta atışı geçersizleme | Yol, desen veya RegExp — invalidateHtmlCache() | Etiket ve yol bazında destekli | Yeniden build ya da adapter ne veriyorsa | Yok |
| Routing | Açık tablo; yollar dosyada yazılı | Dosya sistemi | Dosya sistemi | Açık tablo |
| Streaming ve kısmi render | Eksik; yavaş bölümler fragment'a taşınır | Akış sınırlarıyla destekli | Server island ve ertelenmiş içerik | Elle |
| Build zinciri | esbuild ve Tailwind v4; opsiyonel adımlar kendini atlar | Güçlü bir bundler, geniş yapılandırma yüzeyi | Vite | Ne kurarsanız |
| Tipler | Düz JS ve JSDoc; derleme adımı yok | TypeScript birinci sınıf | TypeScript birinci sınıf | Size bağlı |
| Oturuma özel sayfa HTML'i | Cache'lenemez; fragment'a taşınır | Destekli | SSR modunda destekli | Destekli |
+ bu yaklaşımın avantajı − bilinçli ya da yapısal eksik • nötr, yalnızca farklı
Şimdi, bu tarayıcıda
Aynı şablon, aynı bayt, aynı ağ — ve üreticinin içinde 80 ms’lik simüle API. HIT o beklemeyi atlar; miss her seferinde öder.
Cache'ten hazır gelen
ölçülüyor…
/_fragment/render-demo-cached — HIT 80 ms’lik upstream uykusunu atlar; geriye yalnızca gidiş-dönüş kalır.
Her seferinde render edilen
ölçülüyor…
/_fragment/render-demo — no-store — her istekte simüle API’yi öder, sonra render eder.
JavaScript kapalıysa bu bölüm ölçüm yapmaz; sayfanın kalanı etkilenmez.
Gidiş-dönüş iki toplamı da ezer — bu yüzden boş render’lar berabere görünüyordu. Dürüst sinyal sunucu produce: HIT’te ~0 ms, üretici çalışınca ~80 ms+. Gerçek sayfada o uyku veritabanın ya da CMS’indir; cache ziyaretçiyi o maliyetten kurtarır.
View Source
Arama motorlarına ve ilk boyamaya giden şey sayfanın kendisi — props'ların script etiketine gömülmüş ikinci bir kopyası değil.
<main>…</main>
<script id="__NEXT_DATA__" type="application/json">
{"props":{"pageProps":{"posts":[…],
"user":null,"locale":"en"}},
"page":"/","query":{},"buildId":"…"}
</script>
<script src="/_next/static/chunks/…js">
</script>
İçerik iki kez gider: bir kez HTML, bir kez hidrasyon için JSON. Hem tarayıcı hem insan vergiyi indirir.
<main>
<h1>Son yazılar</h1>
<article>…</article>
<div data-island="newsletter"></div>
</main>
<script type="module" src="/assets/js/main….js">
</script>
Tek belge. Island yalnızca sayfada işaretçi varsa iner — gizli state dökümü yok, ağacın ikinci temsili yok.
Arama motorları
İnsanların gördüğü HTML'i görür. Makale bir client runtime'ın birleştirmesini beklemez.
İlk boyama
Kritik yolda içerikle yarışan çok kilobaytlık JSON blob yok.
Cache
Saklanan şey bitmiş sayfadır. Invalidation HTML'i tazeler — serileştirilmiş bir React ağacını değil.
Ölçülen ağırlık
Yukarıdaki 'boş sayfada client JS' satırının buradaki gerçek karşılığı — yanında aynı tür sayfa için tahmini bir Next.js App Router ilk-yük bandı.
| Ham | gzip | |
|---|---|---|
| Stylesheet (Tailwind v4 çıktısı) | 74.5 kB | 12.9 kB |
| Client entry (island yükleyicisi) | 635 B | 318 B |
| İkon sprite'ı | 12.8 kB | 4.0 kB |
| Tüm island'lar (talep üzerine, ayrı chunk'lar) | 74.4 kB | 28.9 kB |
| Toplam — her island yüklenirse | 162.3 kB | 46.2 kB |
46.2 kB
gzip · first-load client assets
115.2 kB
gzip · first-load client assets
Tahmin; bu depoda Next build'i yok: minimal bir App Router sayfası için yuvarlak gzip rakamları (React ~44 kB, Next client runtime ~48 kB, ince sayfa chunk'ı, Tailwind ölçeğinde CSS). Senin Next uygulaman daha hafif ya da ağır olabilir — mesele kendi UI'ndan önce ödenen framework tabanı.
Karar
Satırların çoğu nötr. Karar genelde son iki satırda veriliyor.