Katman 3
Web Sistemleri - Katman 3

DOM Rendering Pipeline

Tarayıcı, HTML ve CSS’ten piksel üretmek için bir render hattı kullanır. Bu hattın aşamalarını bilmek, “neden yeniden çizildi?” sorularını cevaplandırır.

Bu içerik; DOM, CSSOM, layout ve paint kavramlarını birbirine bağlayan çalışan bir zihin modeli sunar.

Harita
Genel bakış

HTML’den piksele: tek cümlelik model

Render hattını ezberlemek yerine, bir girdi → ara yapı → çıktı akışı olarak düşün: HTML ve CSS parse edilir, tarayıcı içeride ağaçlar üretir, sonra bu ağaçlardan geometry (nerede?) ve paint (nasıl görünüyor?) bilgisi çıkarır ve en sonda GPU üzerinde katmanları birleştirip ekrana basar.

Bu sayfanın sonunda şu iki soruyu “refleks” gibi cevaplayabileceksin: (1) “Bu değişiklik layout tetikler mi?” (2) “Yalnızca composite ile çözebilir miyim?”

Aşamalar
Pipeline

Render hattının ana basamakları

“DOM/CSSOM/Render Tree/Layout/Paint/Composite” kulağa çok geliyor; ama her biri net bir iş yapar. Aşağıdaki listeyi neden-sonuç zinciri olarak oku.

Ağaç
Zihin modeli

DOM ≠ ekranda gördüğün şey

DOM “belge yapısıdır”; ekrandaki pikseller ise çoğu zaman render tree ve onun altındaki layout/paint sonuçlarıdır. Örneğin display: none olan bir node DOM’da vardır ama render tree’ye girmez; buna karşılık visibility: hidden node’u render tree’de kalır (yer kaplar) ama çizilmez.

Hızlı kural
“Yer kaplama” ile “görünürlük” farklıdır. Layout’u tetikleyen şey genelde geometryyi etkileyen değişikliklerdir (ölçü, akış, font metrikleri, container genişliği vb.).
Neden?
Performans

Hangi değişiklik neyi tetikler?

Bir UI “yavaş” hissediyorsa çoğunlukla sorun layout veya paint maliyetidir. Ama bazı animasyonlar yalnızca composite ile akıcı yapılabilir.

  • Layout tetikleyenler
    width/height, padding/margin, font-size, display, container genişliği/akış değişimleri.
  • Paint tetikleyenler
    background, color, box-shadow, border-radius gibi görünümü değiştirip geometry’yi sabit bırakanlar.
  • Composite ile çözülebilenler
    transform ve opacity çoğu senaryoda layout/paint’e girmeden GPU’da birleştirilir. Akıcı animasyonların “kral yolu” budur.
Anti-pattern: Layout Thrashing
JS içinde ölçüm (örn. getBoundingClientRect) ve yazma (style değişimi) işlemlerini “sırayla karıştırırsan” tarayıcı layout’u tekrar tekrar yapmak zorunda kalabilir. Çözüm: ölçümleri topla, sonra yazmaları tek fazda uygula (batch).
Ölç
Pratik

DevTools ile render maliyetini okumak

Tahmin etmek güzel; ama profesyonel seviyede “kanıt” gerekir. Performance paneli, Frames/Timings ve Layout/Paint işaretleri; hangi fazın pahalı olduğunu gösterir. Buradaki hedef “hangi butona basılır” ezberi değil; grafiği gördüğünde hangi aşamaya bakacağını bilmektir.

Mini kontrol listesi: bir animasyon/etkileşim kötü hissediyorsa hızlıca şuraya bak.

Devam
Bağlantılar

Katman 3’te sonraki adımlar