Minimal ve hızlı
Tam HTML sunucudan. React runtime yok, hydration şelalesi yok — yalnızca bir içerik sayfasının ihtiyaç duyduğu baytlar.
İçerik siteleri için yalın, yüksek performanslı bir temel. Tam HTML sunucudan gelir, island yalnızca dokunduğunuz yerde uyanır, cache ziyaretçi istemeden hazırdır.
Neden JSkelet
Sunucu içeriği hazırlar, cache beklemeyi kaldırır, island'lar yalnızca sayfanın gerçekten ihtiyaç duyduğu davranışı ekler.
Tam HTML sunucudan. React runtime yok, hydration şelalesi yok — yalnızca bir içerik sayfasının ihtiyaç duyduğu baytlar.
Menü, sayaç veya grafik kendi island'ında yaşar. Modülü yalnızca görünür olunca iner.
Düz async controller, .jsk şablon ve küçük bir API. Tören olmadan okunur, drama olmadan değiştirilir.
Şeffaf performans
Bu değerler gerçek build çıktısından okunuyor ve gzip sonrası ağırlığı gösteriyor. Pazarlama sözü değil, çalışan kod.
| Ham | gzip | |
|---|---|---|
| Stylesheet (Tailwind v4 çıktısı) | 79.4 kB | 13.9 kB |
| Client entry (island yükleyicisi) | 593 B | 287 B |
| İkon sprite'ı | 12.5 kB | 4.0 kB |
| Tüm island'lar (talep üzerine, ayrı chunk'lar) | 73.5 kB | 28.4 kB |
| Toplam — her island yüklenirse | 166.0 kB | 46.5 kB |
46.5 kB
Her şey dahil (gzip)
Stylesheet, entry, sprite ve sitedeki bütün island'lar birlikte. Tek bir sayfa bunun hepsini indirmiyor.
0
Web font isteği
Sistem font yığını. FOUT ve font kaynaklı düzen kayması yok.
1
Render'ı bloke eden istek
Tek stylesheet. Client entry modül olduğu için defer edilmiş.
2
Hemen inen island
Tema ve mobil menü. Diğer island'ların hepsi görünürlüğe girene kadar bekler.
Karşılaştırılabilir bir sayı istiyorsanız kendi projenizi aynı şekilde ölçün: bir aracın hafif olduğu iddiası, ancak sizin sayfanızda ölçüldüğünde bir şey ifade eder.
Tasarım gereği basit
Stale-while-revalidate ziyaretçiyi render kuyruğundan çıkarır. Bir route, bir TTL, tahmin edilebilir davranış.
export default function register(app, { route, notFound }) {
app.get("/", route(
async () => ({
view: "pages/home",
data: { pillars },
}),
{ revalidate: 3600 },
));
app.get("/product/:slug", route(async ({ params }) => {
const product = await getProduct(params.slug);
if (!product) notFound();
return { view: "pages/product", data: { product } };
}));
}
Görünen ops
HTML cache süreç belleğinde başlar. Bir anahtar çevirince aynı anahtarlar kopyalar arasında paylaşılır, sertleştirilmiş panel açılır ve edge ile konuşur.
Paylaşılan katman
L1 mikrosaniye HIT için süreç içinde kalır. Redis paylaşılan HTML/data gövdelerini tutar ve invalidateHtmlCache() / clearHtmlCache() çağrılarını pub/sub ile her kopyaya yayar — ioredis isteğe bağlı; yoksa yalnızca L1.
Birincil store
Süreç içi L1
Paylaşılan gövde
Redis HTML + data
Yayılım
Pub/sub invalidate
Doğru eşleşme
Merkezde herkese aynı, cache'lenebilir sayfalar var. Oturumlu dashboard ve kişiye özel paneller private: true ile desteklenir — HTML cache'e girmezler. React SPA ya da gömülü bir gerçek zamanlı istemci olmak istemez.
SSS
Sayfaların çoğu etkileşimli değil. React'in maliyeti sabit: runtime iner, ağaç kurulur, hidrasyon çalışır — ve sonuç sunucunun zaten ürettiği HTML'in aynısı olur. JSkelet o sabit maliyeti kaldırıp etkileşimi yalnızca ihtiyacı olan elementlere veriyor.
Framework kaynağı düz JavaScript + JSDoc ve jskelet import'ları için .d.ts yayınlar. Client entry ve island'lar .ts olabilir (esbuild tip siler; manifest anahtarı *.js kalır). Sunucu route, hook ve jskelet.config.mjs JavaScript kalır — orada jsconfig ile checkJs kullanın.
Her instance kendi L1 önbelleğini tutar, yani soğuk açılışta ısınma gerekir ve TTL sınırları kayabilir. Erken yenileme ve prewarm bu boşluğun çoğunu kapatır; isteğe bağlı Redis katmanı HTML'i paylaşır ve invalidateHtmlCache() / clearHtmlCache() çağrılarını pub/sub ile her kopyaya yayar. Nokta atışı geçersizleme her iki modelde de birinci sınıf.
Evet. Manifest yoksa varlık yardımcısı hash'siz yollara döner ve layout stylesheet etiketini hiç basmaz. Build adımını atlamak hata değil, stilsiz ama çalışan bir sayfa verir.
Kalan sorular ve tam karşılık tablosu taşıma sayfasında.
Tek komut, birlikte çalışan bir .jsk sayfa, bir bileşen ve bir island'dan oluşan bir iskelet kurar.