Holodepth • Runtime Atlas • Tarayıcı mimarisi · Tier 2
Event Loop Sistemi
JavaScript motoru kodu call stack üzerinde yürütür; event loop ise ana thread’de sıradaki görevi alır, macrotask’ı bitirir, microtask kuyruğunu boşaltır ve gerekirse çizim fırsatı değerlendirir. Bu sayfa, byteomi.com Tarayıcı Mimarisi serisinin canlı karşılığıdır.
Kaynak: byteomi.com · Üç.js gerekmez — saf frontend tracing simülasyonu.
Holodepth köprüsü
Metin byteomi.com · model Holodepth
byteomi.com Tarayıcı Mimarisi serisinde call stack, task queue, microtask, rendering sync ve async davranışı metinsel olarak işlenir. Bu sayfa aynı konuyu tekrar anlatmaz — canlı timeline ile göz eğitimi ve tracing okuma pratiği sunar.
Aşağıdaki bölümler yalnızca simülatör panelini ve Holodepth Runtime Atlas modelini açıklar.
Timeline nasıl okunur?
Göz eğitimi · tracing paneli
Aşağıdaki panel, Chrome DevTools Performance veya Apple Instruments timeline’ına benzer okunur. Önce bu kuralları gözünüzde canlandırın; ardından simülatöre geçip aynı desenleri arayın.
- Soldaki her satır. Her yatay şerit tek bir runtime fazına aittir: main thread, microtask, input, rAF, render, idle, VSync, compositor ve GC. Bir sorunu teşhis ederken önce hangi şeritte uzama olduğuna bakın — sorun JS mi, render mı, compositor mu hemen daralır.
- Zaman soldan sağa akar. Yeni olaylar sağa doğru eklenir; geçmiş sol tarafta kalır. Panelde «Pause» ile dondurup «Timeline scrub» ile geçmiş bir frame’e gidin; o anki blok dizilimini rahatça inceleyin.
- Her blok bir süre. Renkli dikdörtgen, o fazda harcanan milisaniyeyi gösterir — geniş blok yavaş iş, ince blok hızlı iş demektir. İki bloğu yan yana kıyaslayarak hangi adımın budget’ı yediğini görün.
-
Dikey çizgiler frame sınırı.
Her tur VSync’ta ince bir çizgi belirir.
dropbudget ciddi aşımı,lategecikmiş tur,skiprender fırsatının kaçırıldığını işaret eder — etiket rengine güvenerek «iyi frame / kötü frame» ayrımı yapın. - Arka plan ısısı (frame heat). Turuncu ve kırmızı bantlar o frame’de ana thread’in ne kadar sıkıştığını gösterir. Main thread’de kırmızı glow’lu geniş blok görürseniz long task (>50 ms) vardır; tıklama ve scroll bu frame’de gecikebilir.
- Üstteki FPS sparkline. Anlık hız eğrisini verir; düşüş veya dalgalanma arayın. Önemli: Sparkline yüksek olsa bile render şeridi boşsa ekran güncellenmiyor olabilir — microtask spam ile bu yanıltıcı tabloyu bilinçli test edin.
- Hover ile öğrenme. İmleci bir bloğun üzerine getirin; süre, faz adı ve kısa Türkçe açıklama açılır. Satır isimlerini ezberlemek yerine timeline üzerinde gezinerek «bu renk ne anlama geliyor?» sorusunu anında yanıtlayın.
- Phase + DevTools karşılığı. HUD’daki Phase aktif schedule fazını gösterir; altındaki mor «DevTools karşılığı» kutusu task queue, microtask drain, rendering opportunity gibi terimlere çevirir. Render şeridi içindeki layout/paint ayrımı için Frame Budget sayfasına bakın.
Event Loop ≠ render pipeline. Bu preset zamanlamayı öğretir; «hangi queue render’ı geciktirdi?» sorusunun cevabı lane + Phase + aşağıdaki tablodur.
- Main thread Long task · sync JS · macrotask callback
- Microtask Promise chain · queueMicrotask · await devamı
- Input Pointer/keyboard dispatch · INP öncesi gecikme
- rAF requestAnimationFrame · paint öncesi hook
- Render Rendering opportunity · style→layout→paint sync
- Idle requestIdleCallback · düşük öncelikli arka plan
- VSync Display refresh · drop / late / skip işaretleri
- Compositor Off-main scroll/transform · stale frame riski
- GC pause Stop-the-world collection · ana thread kesintisi
İlk deneme önerisi: Önce tüm kontroller kapalıyken 10 saniye izleyin; sonra yalnızca Microtask spam açın — mor şeridin uzayıp render’ın kaybolduğunu aynı panelde doğrulayın.
Event Loop Timeline Simulator
Runtime Atlas · EVENT_LOOP preset
Byteomi runtime · CANLI · Tracing panel
Runtime tracing engine · jitter & burst scheduling · rAF · idle · input · GC · dropped / delayed / skipped frames · hover tooltips · scrub / pause.
Runtime note Simülasyon gerçek browser scheduling davranışını taklit eder. Timeline bilinçli olarak jitter, burst, delayed frame ve render skip varyasyonu içerir.
—
—
Kontrolleri tek tek açın: Phase + DevTools karşılığı + vurgulu lane chip birlikte güncellenir. Render şeridi içi (layout vs paint) → Frame Budget.
Bu demo ne işe yarar?
Bu sayfadaki Event Loop Timeline, tarayıcınızdaki gerçek scheduler’a bağlanmaz. Küçük bir öğretim modelidir: «bir frame içinde main thread’de ne sırayla çalışır?» sorusuna görsel cevap verir. Chrome Performance panelinin lane mantığını öğretmek içindir — production profiler değildir.
Yatay şeritler Main (macrotask / long task), Microtask (Promise drain), Input, rAF, Render, Idle, VSync, Compositor ve GC’yi temsil eder. 16.7 ms bütçe çizgisi aşılırsa kırmızı overflow; dropped / delayed / skipped frame işaretleri jitter’ı gösterir. Üstteki phase readout aktif fazı ve DevTools karşılığını yazar.
Stres toggle’ları (Heavy JS, Layout thrash, Paint storm, Compositor-only, GC pause) tek tek açıldığında lane’lerin nasıl dolduğunu görürsünüz. 60 Hz / 120 Hz VSync değişimi bütçe hissini kaydırır. Scrub ile geçmiş frame’lere dönebilir, pause ile dondurabilirsiniz.
Nasıl kullanırsınız? Önce normal akışı izleyin; sonra bir toggle açın ve hangi şeridin şiştiğine bakın. Uzun kırmızı Main bloğu → input gecikmesi hissi. Compositor-only açıkken main rahat, animasyon yine akıyor — layer promotion sezgisidir. Render detayı için Frame Budget demosuna geçin.
Frame içinde gerçekte ne oluyor?
Tek tur · browser sırası
Simülatör her frame turunda kabaca şu sırayı üretir. Timeline’da bazen adımlar üst üste biner veya jitter ile kayar — gerçek motor da mükemmel hizalı değildir.
- Macrotask çalışır (timer, click, I/O callback).
- Microtask queue tamamen boşalır — Promise /
awaitdevamı. - requestAnimationFrame callback’i paint öncesine hizalanır; gecikmişse rAF (late) görürsünüz.
- Render fırsatı oluşursa style → layout → paint → composite adımları render şeridine yazılır; budget dolmuşsa render skipped.
- Idle callback (varsa) boş aralıkta kısa süre çalışır.
- Compositor scroll/transform günceller; layout atlanırsa stale frame mümkündür.
- VSync frame sınırı —
drop/late/ düzenli tik.
Neden microtask render’ı bloklar? Microtask fazı bitmeden yeni macrotask ve rendering opportunity gelmez. Spam açıkken mor şerit uzar, render şeridi boş kalır — FPS sparkline yüksek olsa bile ekran güncellenmeyebilir.
Kontroller ne yapıyor?
Stres anahtarları · panel altı
- JS load
- Main thread’de senkron iş yükünü artırır. Uzun süre → long task glow, kırmızı frame heat,
drop/late. Karşılık Long task · main thread blocked - Microtask spam
- Promise zinciri benzeri ardışık microtask üretir. Render fırsatını geciktirir veya atlar — «yüksek FPS, güncellenmeyen ekran» senaryosu. Karşılık Microtask queue drain · render starvation
- Heavy layout
- Render şeridinde layout süresini uzatır; frame budget’ı hızla tüketir. Karşılık Rendering sync · forced reflow (detay: Frame Budget)
- Paint storm
- Paint + raster bloklarını şişirir; texture upload baskısı — turuncu/kırmızı heat. Karşılık Paint/raster pressure · paint-bound
- Compositor-only
- Layout/paint atlanır; yalnızca compositor güncellenir. Hızlı scroll hissi — içerik stale kalabilir. Karşılık Compositor thread · transform-only path
- GC pause
- V8 stop-the-world benzeri kısa duraklama — mor GC şeridinde ana thread kesintisi. Karşılık GC pause · stop-the-world · jank spike
- 60 Hz / 120 Hz
- Frame budget hedefini değiştirir (≈16,67 ms vs ≈8,33 ms). Aynı JS yükü 120 Hz’de daha
kolay
dropüretir. Karşılık VSync budget · daha sık frame sınırı
Okuma ipucu: Önce hangi şerit uzadığına bakın (lane), sonra Phase ve DevTools karşılığı hangi queue/fazın suçlu olduğunu söyler. Layout/paint milisaniye ayrımı Frame Budget preset’indedir.
Ne görmelisiniz?
İyi vs kötü · tracing okuma
Sağlıklı runtime
- Main thread blokları kısa; long task glow yok.
- Frame heat düşük (soluk arka plan).
- VSync dikey çizgileri düzenli; çoğunlukla
late/dropyok. - Render şeridinde ince style/composite; microtask şeridi kısa.
- Frame budget remaining sürekli birkaç ms üzerinde.
Runtime starvation
- Microtask (mor) blokları frame boyunca uzar.
- render skipped veya render şeridi neredeyse boş.
- FPS sparkline yüksek görünür ama ekran güncellenmez — yanıltıcı metrik.
- VSync’ta
skipartar.
Paint / layout overload
- Render lane’de layout + paint + raster genişler.
- Frame heat turuncu/kırmızı;
latesıklaşır. - Budget sayacı sıfıra yakın veya negatif hissi (kırmızı pulse).
Long task / dropped frame
- Main thread’de geniş kırmızı glow (>50ms).
- VSync’ta
dropetiketi; input/rAF gecikmesi. - Scroll/click hissi «takılır» — INP kötüleşir.
Gerçek hayat karşılığı
Ürün · akademi köprüsü
Akademik tanımlar sahada his olarak farklı gelir. Aşağıda her senaryoyu ürün deneyimi, timeline deseni ve simülatörde hangi anahtarları açmanız gerektiğiyle eşleştiriyoruz — önce okuyun, sonra panelde aynı deseni arayın.
-
Sonsuz feed scroll «jank».
Kullanıcı kaydırırken içerik «takılar», görseller geç gelir. Genelde layout + paint baskısı
vardır: render şeridinde geniş layout/paint blokları, frame heat turuncuya döner,
VSync’ta sık
lategörürsünüz. Simülatörde Heavy layout ve Paint storm’u birlikte açın; scroll sırasında render lane’in uzadığını izleyin. - React / state «infinite rerender». Arayüz güncelleniyor gibi hissedilir ama ekran donuk kalabilir — microtask seli ve orta JS yükü render fırsatını yutar. Timeline’da mor microtask şeridi uzar, render skipped veya boş render lane belirir; FPS sparkline yüksek olsa bile güvenmeyin. Deneme: Microtask spam + JS load ~%40–50.
-
Mobil cihaz donması.
Dokunma veya scroll’a geç cevap; uygulama «kilitlenmiş» gibi. Ana thread’de uzun kırmızı glow
(long task) ve VSync’ta
droptipik. Zayıf cihazda 120 Hz hedefi budget’ı daha da daraltır. Simülatörde JS load’u yükseltin veya 120 Hz seçin; kırmızı glow + drop etiketini birlikte arayın. - Parallax / transform-only scroll. Kaydırma akıcı görünür çünkü çoğu hareket compositor’da — layout/paint atlanır. Risk: içerik güncellenmeden eski kare (stale frame) gösterilebilir. Yalnızca Compositor-only açın; compositor şeridinde scroll, ara sıra stale işaretini doğrulayın.
- Tab arka planda GC takılması. Sekme geri gelince kısa takılma veya gecikmeli tepki; V8 GC ana thread’i anlık durdurur. Mor GC şeridinde ince pause + macrotask gecikmesi görülür. GC pause ve orta JS load ile arka plandaki «takılma» hissini timeline üzerinde canlandırın.
Pratik alıştırma: Bir senaryoyu seçin, ilgili kontrolleri açın, Pause ile dondurun — timeline’daki desen ile kullanıcı şikâyetini yan yana eşleştirin. Teori için byteomi.com Event Loop sayfasına dönün; Holodepth’te amaç aynı kavramları panelde tanımaktır.
Özet ve seriye devam
Runtime Atlas’ın çekirdeği paylaşılan tracing engine + konu preset’leridir. Event Loop preset’i ana thread zamanlamasını öğretir; sıradaki Atlas demosu Frame Budget (profiler), Browser Topology (infrastructure map) ve V8 JIT (Flow Reactor). byteomi.com serisinde ardından Bellek Yönetimi gelir.
İlgili Holodepth: requestAnimationFrame · Render loop mantığı