Yeni Nesil JavaScript Framework'leri

Qwik'in resumability yaklaşımı ile SolidJS'in ince taneli reaktivite modeli tarayıcıdaki başlangıç JavaScript'i işini nasıl azaltır; ayrıca bu iki mekanizmanın neden tek başına taranabilirliği, dizine eklemeyi veya Core Web Vitals'ı garanti etmediğini anlatır.

İlk yayın tarihi: 26 Haz 2026 · Son güncelleme: 8 Ağu 2026 · Advanced
Diller

"Next-gen", bu makalede Qwik ve SolidJS için kullanılan editoryal addır; web platformunda standartlaştırılmış bir kategori değildir. Qwik resumability kullanır: SSR/SSG sırasında dinleyicileri, bileşen sınırlarını ve durumu HTML içine serileştirir; tarayıcı tam bir hydration bootstrap'ini baştan oynatmak yerine belirli işi resume eder. Bu sıfır JavaScript değildir: küçük bir bootstrap betiği olan Qwikloader yüklemede yine çalışır, dinleyicileri kaydeder ve etkileşimde işleyici kodunu (QRL'leri) gecikmeli yükler. SolidJS ince taneli reaktivite kullanır; sinyaller ve virtual DOM olmaması, bileşeni yeniden çalıştırmadan hedefli DOM güncellemeleri sağlar ve SolidJS yine hydrate eder; bu, resumability ile aynı mekanizma değildir. Framework'ün reaktivite modeli veya meta-framework'ü (QwikCity, SolidStart) bir rotanın HTML'ini, metadata'sını, durum kodunu ya da ölçülen Core Web Vitals sonuçlarını garanti etmez; bunlar gerçekten gönderdiğiniz render moduna ve uygulamaya bağlıdır. Bu merkez iki mekanizmayı haritalar ve ayrı derinlemesine incelemelere yönlendirir.

Evidence for this claim Qwik documents resumability and fine-grained lazy loading as core execution strategies. Scope: Qwik architecture; real transferred and executed JavaScript depends on the application. Confidence: high · Verified: Qwik documentation: Resumability Evidence for this claim Solid uses fine-grained reactive primitives and supports server rendering through its framework tooling. Scope: Solid/SolidStart architecture; SEO and performance depend on rendering configuration and application code. Confidence: high · Verified: Solid documentation

TL;DR — “Next-gen frameworks”, Qwik ve SolidJS için bu makalede kullandığım editoryal gruplamadır; standartlaştırılmış bir kategori değildir. İkisi de tarayıcıdaki JavaScript çalıştırma maliyetini farklı mekanizmalarla hedefler. Qwik, resumability kullanır: uygulama sunucuda duraklar; dinleyicileri, bileşen sınırlarını ve durumu HTML içine serileştirir, böylece tarayıcı tam bir hydration bootstrap’ini baştan oynatmak yerine belirli işi resume edebilir. Küçük bir bootstrap betiği (Qwikloader) yine yüklemede çalışır ve etkileşim sırasında işleyici kodunu gecikmeli yükler; bu nedenle kelimenin tam anlamıyla sıfır JavaScript değildir. SolidJS, ince taneli reaktivite kullanır: sinyaller ve virtual DOM olmaması sayesinde güncellemeler hedeflidir; yine hydrate eder (resumability değildir; düzeltilmesi gereken efsane budur). Framework reaktivitesi, meta-framework render modundan ayrı bir konudur: QwikCity ve SolidStart sunucu tarafında HTML üretebilir, ancak SolidStart tamamen istemci tarafı render’ı da destekler ve ikisi de varsayılan olarak router veya metadata kütüphanesi sunmaz. Taranabilirlik, dizine ekleme ve ölçülen Core Web Vitals, gerçekten gönderdiğiniz render moduna ve uygulamaya bağlıdır; hiçbir framework bunları garanti etmez.

Hedefledikleri kök neden

JavaScript SEO merkezine bakın: başarısızlık modları, Google’ın içeriğinizi görüp görememesiyle ilgilidir. Bu bir render modu sorusudur — SSR, SSG veya CSR — ve QwikCity ile SolidStart sunucu tarafında veya statik çıktı üretebilse de bunu zorunlu kılmaz. CSR’yi seçtiğinizde hangi framework’ü kullandığınızdan bağımsız olarak boş kabuklu SPA’ye dönersiniz. Qwik ve SolidJS’in gerçekten değiştirdiği diğer yarıdır: HTML geldikten sonra çalışan JavaScript’in maliyeti.

Tipik bir SSR-plus-hydration uygulamasında sunucu tamamlanmış HTML gönderir — ilk boyama ve crawler’lar için iyi — ancak framework daha sonra bileşen kodunu indirir ve olay işleyicilerini bağlamak ve dahili durumunu yeniden kurmak için tarayıcıda tekrar çalıştırır. Bu hydration geçişi kullanıcı açısından saf ek yüktür: sayfa hazır görünür ama etkileşimli değildir ve ana iş parçacığı bloklanır. Laboratuvarda yüksek Total Blocking Time (TBT) ve sahada zayıf Interaction to Next Paint (INP) değerlerinin en büyük kaynaklarından biri budur.

Qwik ve SolidJS bu geçişi küçültmek veya ortadan kaldırmak için vardır. Bunu farklı yollarla yaparlar.

Qwik: resumability (hydration yok — ama sıfır JS de değil)

Qwik’in temel fikri resumability’dir. Qwik (şu anda v2 beta), burada sözünü ettiğim reaktivite modeline sahip framework’tür; QwikCity ise aşağıda ele alınan ayrı meta-framework katmanıdır. Framework sunucuda çalışır, HTML’i render eder ve uygulamanın devam etmesi için gereken her şeyi — durumu, olay dinleyicilerini, bileşen ağacını ve yürütmedeki konumu — doğrudan HTML içine serileştirir. Sayfa tarayıcıda yüklendiğinde Qwik, bileşenleri uyandırmak için yeniden çalıştırmaz; tam hydration bootstrap’ini baştan oynatmak yerine sunucunun bıraktığı yerden resume eder.

Bu hydration’dan gerçekten farklıdır, ancak sıfır JavaScript değildir. Küçük bootstrap betiği Qwikloader (Qwik’in kendi dokümanına göre küçültülmüş yaklaşık 1 KB ve mobilde 5 ms’den kısa sürede çalışır) her sayfa yüklemesinde yine çalışır. Bu betik:

  • Her etkileşimli öğeye ayrı dinleyici bağlamak yerine tek bir genel olay dinleyicisi kaydeder.
  • Qwik’in HTML içine yazdığı serileştirilmiş on:click="./chunk.js#handler_symbol" benzeri nitelikleri okur (bunlar QRL, yani Qwik Resource Locator’larıdır).
  • Bir olay gerçekten tetiklendiğinde eşleşen QRL’yi çözer ve çalıştırmadan önce ilgili işleyici parçasını gecikmeli yükler.

Pratik sonuçlar şunlardır:

  • Başlangıç JS’i küçük ve yaklaşık sabittir; sıfır değildir. Qwikloader’ın maliyeti uygulamanızın boyutuyla büyümez ve tam uygulama hydration geçişi çalışmaz; ancak Qwikloader’ın kendisi gerçek JavaScript çalıştırır. Bunu “yüklemede sıfır JS” diye anlatmayın; “uygulama boyutuyla ölçeklenen hydration geçişi yerine küçük, sabit boyutlu bootstrap” deyin.
  • İşleyiciye kadar gecikmeli yükleme. Uygulama kodu yalnızca bir etkileşim gerçekten gerçekleştiğinde yüklenir; Qwik yazarlarının “HTML-first” ile kastettiği budur.
  • QwikCity, Qwik’in meta-framework’üdür: dosya tabanlı yönlendirme, data loader’lar, action’lar ve endpoint’ler sağlar; sunucu tarafında veya statik, resumable HTML üreten full-stack katmandır. Qwik’in resumability’si tek başına bir rotanın status code’unu, metadata’sını veya sunucuda render edilip edilmediğini belirlemez; bunları QwikCity yönlendirme ve render ayarları belirler.

Resumability pratikte nerede bozulur?

Resumability’ye güvenmeden önce bilmeniz gereken gerçek kısıtlar vardır (Qwik’in güncel serileştirme ve durum dokümanlarına göre):

  • Serileştirme sınırları. $(...) sınırı içindeki kod yalnızca serileştirilebilir değerleri yakalayabilir: ilkel değerler, const ile bağlanmış serileştirilebilir veriler ve Qwik’in serileştirmeyi bildiği birkaç yerleşik tür (promise’ler dahil). Özel bir sınıf örneği veya desteklenmeyen başka bir yakalama statik analizi geçip çalışma zamanında başarısız olabilir; Qwik onu serileştirmeye çalıştığında ortaya çıkan, yayımlandıktan sonra fark edilen bir hata türüdür.
  • noSerialize() değerleri resume sonrasında yaşamaz. Serileştirilemez olarak açıkça işaretlenen her şey, istemci SSR/SSG durumundan resume ettiğinde undefined olur ve istemcide yeniden başlatılmalıdır; bu genellikle useVisibleTask$() içinde yapılır.
  • useVisibleTask$ hevesli, yalnızca tarayıcıda çalışan bir kaçış yoludur. Qwik dokümanı bunu son çare olarak niteler: ilk render’dan sonra sadece tarayıcıda çalışır ve “eagerly executes code on the client” (çeviri) “koddaki işlemleri istemcide hevesle yürütür”; varsayılan olarak intersection observer ile görünürlükte tetiklenir, ancak { strategy: 'document-ready' } ayarlanırsa yüklemede hemen çalışır. Aşırı kullanımı, resumability’nin kaçınmak istediği başlangıç maliyetini geri getirir.

SEO açısından QwikCity rotasının sunucu çıktısında içeriğinizin ve <a href> bağlantılarının ilk HTML’de bulunup bulunmadığı, render modu ve yönlendirme sorusudur; resumability bunu tek başına garanti etmez — yalnızca framework seçimine değil gerçek yanıta bakın. Google’ın burada neye ihtiyaç duyduğunu crawling rehberinde görebilirsiniz. Resumability’nin gerçekçi kazanımı runtime tarafındadır: ana iş parçacığını bloke edecek daha az başlangıç JavaScript’i; bu, Core Web Vitals için bir etkendir, belirli bir INP veya TBT değeri garantisi değildir.

SolidJS: ince taneli reaktivite (daha akıllı hydration — resumability değil)

SolidJS aynı maliyeti farklı bir açıdan hedefler. Yukarıdaki uyarı burada da geçerlidir: Solid, bir reaktivite motoru olarak SolidStart meta-framework’ünden ayrı bir şeydir. Solid’in temel fikri sinyaller üzerine kurulu ince taneli reaktivite’dir ve virtual DOM’u yoktur.

  • Yeniden render yerine sinyaller. React’te bir durum değişikliği bileşen fonksiyonunu yeniden çalıştırır ve neyin değiştiğini bulmak için virtual DOM’u karşılaştırır. Solid’de bileşen fonksiyonu bir kez çalışır; createSignal ile oluşturulan getter/setter çiftleri ve createEffect gibi subscriber’lar bağımlılıkları doğrudan izler. Bir sinyal değiştiğinde yalnızca ona abone olan kod yeniden çalışır — bileşen yeniden yürütülmez, virtual-DOM karşılaştırması yapılmaz. Bu yüzden Solid, güncelleme ağırlıklı iş yüklerinde js-framework-benchmark paketinin framework kıyaslamalarında sürekli üst sıralarda yer alır; sabit bir sayı vermek yerine güncel sonuçları doğrudan benchmark’tan kontrol edin.
  • Yine hydrate eder — SolidJS resumability framework’ü değildir. Sunucu renderer’ı HTML üretir ve istemci bunu hydrate eder; bu, Qwik’in resumability’sinden farklı bir mekanizmadır, onun bir çeşidi değildir. İnce taneli reaktivite ve virtual DOM olmaması, Solid’in hydration geçişinde tipik bir VDOM framework’üne göre daha az şey yeniden kurması anlamına gelir; ancak “burada hydration daha ucuz” mekanizma düzeyinde bir ifadedir, sabit bir sayı değildir. SolidJS’i “resumable” diye anlatmayın.
  • SolidStart, Solid’in meta-framework’üdür: yönlendirme, sunucu fonksiyonları ve dağıtım preset’leri sunar; QwikCity / Next.js’in SolidStart karşılığıdır. Güncel SolidStart dokümanı (v1,0, beta etiketli, 2026-04-28’de güncellendi) uygulama başına seçtiğiniz üç render modunu listeler: client-side rendering (CSR), server-side rendering (SSR — sync, async veya streaming) ve static site generation (SSG). Solid’in ince taneli reaktivitesi moddan bağımsız aynı çalışır; bir rotanın ilk HTML’inde içeriğin bulunup bulunmayacağını render modu belirler. SolidStart dokümanı ayrıca varsayılan olarak router veya metadata kütüphanesi paketlemediğini açıkça söyler; bunları kendiniz eklersiniz.

For SEO: whether a SolidStart route’s content and links land in the initial HTML depends on which of those three rendering modes it uses — CSR alone produces an empty shell like any SPA, same as picking CSR anywhere else. SSR or SSG modes put content in the HTML the way JavaScript SEO requires. The CWV upside is mechanism-level: a smaller runtime and fine-grained updates reduce the work hydration has to do — it doesn’t set a specific TBT or INP number on its own.

Ayrım, açık biçimde

Bu, konunun doğruluğunu taşıyan temel noktadır; kesin konuşun:

  • Qwik = resumability. Hydration bootstrap’i yoktur. Küçük ve yaklaşık sabit boyutlu bootstrap betiği (Qwikloader) yüklemede çalışır; uygulama kodu etkileşimde gecikmeli yüklenir. Serileştirilmiş sunucu durumundan resume eder.
  • SolidJS = ince taneli reaktivite + hydration. Virtual DOM yoktur, bağımlılıkları izleyen sinyaller vardır, ancak hydrate eder. Bu, resumability değildir.

İkisi de tipik VDOM-plus-full-hydration uygulamasına göre tarayıcı JavaScript işini azaltır, ancak farklı mekanizmalarla ve ikisi de tarayıcı JavaScript’ini tamamen ortadan kaldırmaz. “Resumability”yi “zero JS” ile birleştirmek veya SolidJS’i resumable saymak bu ikili hakkındaki en yaygın iki hatadır.

Üçüncü karşılaştırma sınırı: Astro islands

Bu konuşmalarda adı birlikte geçtiği için Astro’nun islands architecture yaklaşımını da ayrıca anmak gerekir: bu, yukarıdaki iki mekanizmanın bir çeşidi değil, üçüncü bir mekanizmadır. Astro varsayılan olarak sade, sunucuda render edilmiş HTML gönderir ve istemci yönergeleriyle belirli bileşenleri istemci tarafında hydrate etmeyi (“islands”) seçmenize izin verir; sayfanın çoğu hiç bileşen JavaScript’i göndermez. Bu, “sayfanın ne kadarı etkileşimli olmalı?” karşılaştırması için yararlı bir sınırdır, ancak resumability (Qwik) veya ince taneli reaktivite hydration’ı (Solid) değildir — aksi halde statik olan bir sayfanın kısmi hydration’ıdır. Qwik’in kendi dokümanları da bu nedenle resumability ile kısmi hydration’ı açıkça ayırır.

Evidence for this claim Astro islands can provide a useful comparison boundary because they opt selected components into client execution, but islands/partial hydration are not the same mechanism as Qwik resumability or Solid fine-grained reactivity. Scope: comparison boundary Confidence: high · Verified: Islands architecture

Yerleşik framework’lerle karşılaştırma

ReactVueAngularSolidJSQwik
Reaktivite modeliVDOM + yeniden renderVDOM + reaktiviteZone.js / sinyaller (v16+)Sinyaller, VDOM yokSinyaller, VDOM yok
Tarayıcıda yükleme işi (SSR)HydrationHydrationHydrationHydration (yeniden kurulacak şey daha az)Resumption (Qwikloader bootstrap’i, tam hydration yok)
Başlangıç JS maliyetiUygulamayla ölçeklenirUygulamayla ölçeklenirUygulamayla ölçeklenirUygulamanın etkileşim yüzeyiyle ölçeklenirKüçük bootstrap; uygulama kodu etkileşimde gecikmeli yüklenir
Sunucu/statik HTML’de içerikRender moduna bağlı (Next/Remix)Render moduna bağlı (Nuxt)Render moduna bağlı (@angular/ssr)Render moduna bağlı (SolidStart: CSR/SSR/SSG)Render moduna bağlı (QwikCity)
Meta-frameworkNext.js / RemixNuxtAngular SSRSolidStartQwikCity

The established frameworks are not bad for SEO by default — with the right rendering mode, their meta-frameworks all put content into the HTML, which is what crawlers need (that’s the whole JavaScript SEO story), and the same is true of SolidStart and QwikCity. What differs between the columns above is the mechanism behind browser startup cost, not a guaranteed outcome — measure TBT/INP on your actual routes rather than assuming a framework choice settles it.

Dürüst tutulması gereken bir not: React, Vue ve Angular’ın üçü de kendi sinyallerine ve daha hafif hydration yaklaşımlarına ilerliyor (Angular sinyalleri, React Server Components, Vue Vapor mode). Sürüm ve yol haritası ayrıntıları hızla değiştiği için buradaki herhangi bir anlık görüntü çabuk eskir; belirli bir yeteneğe atıf yapmadan önce her framework’ün güncel dokümanını kontrol edin.

Bunların hepsini kendi rotalarınızda doğrulama

Belirli bir rota için framework’ün itibarını cevap olarak kabul etmeyin. Her rota için şunları kontrol edin:

  • Durum kodu ve ilk HTML — URL’yi tarayıcının render ettiği DOM üzerinden değil, doğrudan fetch ederek alın; gerçek içeriğinizin, bağlantılarınızın ve metadata’nızın gerçekten mevcut olduğunu doğrulayın.
  • Render modu akış kullanıyorsa akışla gönderilen çıktı — yalnızca kabuk ve yükleniyor durumu değil, içeriğin tamamının ulaştığını doğrulayın.
  • Metadata ve bağlantılar — title, meta description, canonical ve <a href> hedefleri; çünkü resumability de ince taneli reaktivite de bunları sizin için yönetmez.
  • Serileştirilmiş durum boyutu (Qwik) — hydration bootstrap’inden kaçınsa bile büyük serileştirilmiş durum HTML payload’ını büyütür.
  • Gerçekte çalıştırılan ilk loader/runtime JavaScript’i — yalnızca dokümanların iddiasını değil, Qwikloader’ın veya Solid runtime’ının yüklemede ne yaptığını ölçün.
  • Önceden getirilen ve etkileşimle tetiklenen istekler — network panelinde tıklamada neyin yüklendiğini, yüklemeden önce neyin geldiğini izleyin.
  • Yalnızca tarayıcıya ait görevler (useVisibleTask$ ve eşdeğerleri) — her yüklemede hevesle çalışmadıklarını doğrulayın.
  • JavaScript başarısız olduğunda veya engellendiğinde davranış — rota kullanılabilir bir şeye geriliyor mu, yoksa tamamen bozuluyor mu?
  • Crawler tarafından render edilen temsili çıktı — yalnızca View Source değil, Search Console’un URL Inspection aracı veya eşdeğer bir renderer; çünkü bazı içerikler ancak render sonrasında görünür.

Bu, JavaScript ile render edilen her sitenin uyması gereken doğrulama disiplinidir; Google’ın işlem hattının genel olarak nasıl çalıştığını görmek için rendering rehberine bakın.

Sırada ne var?

Her framework’ün ayrı bir derinlemesine incelemesi vardır:

  • Qwik SEO — pratikte resumability, QwikCity yönlendirmesi ve SSR, metadata’yı doğru kurma, useDocumentHead kalıbı, gecikmeli yükleme sınırları ve resumability’nin saha CWV’lerinde nasıl göründüğü.
  • SolidJS SEO — sinyaller ve ince taneli reaktivite, SolidStart SSR ve akış, neden resumable olmadığı, meta etiket yönetimi ve benchmark bağlamı.

Her ikisi de React, Vue, Angular, Next.js, Nuxt, Svelte ve Astro’ya özel rehberlerle birlikte JavaScript SEO kümesinin altındadır. Metrik tarafı için Core Web Vitals’a; Google’ın render edilmiş içeriği nasıl gördüğü için rendering sayfasına bakın.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.