Skip to content

Bölüm 19 / 20

Tarayıcı DevTools

Elements, Console, Network, Sources.

14 dakikalık okuma

Bu hattın on sekiz dersinde defalarca "DevTools'ta bak" dedik. Bu ders o cümlenin karşılığını tek yerde topluyor. DevTools bir lüks değil, ön yüz geliştiricisinin asıl teşhis aracıdır: CSS'in neden tutmadığı, isteğin neden 401 döndüğü, sayfanın neden takıldığı ve ekran okuyucunun ne duyduğu tahmin edilerek değil okunarak bulunur. Deneyimli bir geliştiriciyi ayıran şey daha çok komut bilmesi değil, hangi soruyu hangi panelde soracağını bilmesidir — bu dersin asıl konusu odur.

01Ne öğreneceksin

  • Panelleri ve hangi sorunun hangi panelde çözüldüğünü
  • Komut menüsü — tek başına en çok işe yarayan kısayol
  • Elements: kaskad okuma, kutu diyagramı, flex/grid denetleyicileri, durum zorlama
  • Erişilebilirlik ağacını okumak
  • Console: $0, $$, canlı ifadeler ve console.log'un bir tuzağı
  • Network: zaman dökümü, kısıtlama, isteği curl olarak kopyalama, engelleme
  • Sources: koşullu kesme noktası, günlük noktası, XHR ve olay kesme noktaları
  • Kapsam ve çağrı yığını okumak; kaynak eşlemesi
  • Application: depolama, çerezler, bfcache testi
  • Performance, Lighthouse, Coverage ve Rendering benzetimleri
  • Teşhis akışı: bir hatayı hangi sırayla ararsın

02Açmak ve komut menüsü

Kısayolİş
F12 · Ctrl+Shift+IDevTools'u aç
Ctrl+Shift+CÖge seçme kipi — sayfada tıkladığın ögeye git
Ctrl+Shift+PKomut menüsü
Ctrl+Shift+MCihaz emülasyonu
Ctrl+Shift+RÖnbelleği yok sayarak yenile
Ctrl+P (Sources)Dosyaya git
EscAlttaki çekmeceyi aç/kapat (herhangi bir panelde konsol)

Komut menüsü (Ctrl+Shift+P) menülerde kaybolmayı bitirir: yazdığın kelimeye göre komut arar. Sık kullanılanlar: "screenshot" (tam sayfa ya da tek öge ekran görüntüsü), "coverage", "rendering", "sensors", "disable JavaScript", "show accessibility". Tek bir kısayol öğrenecek olsan bu olmalı.

Alttaki çekmece (Esc) da bilinmelidir: hangi panelde olursan ol konsolu ya da başka bir sekmeyi (Coverage, Rendering, Network conditions) yanına açar — Elements'te CSS düzenlerken konsolu görmek için panel değiştirmen gerekmez.

03Elements: yapı ve stil

2. derste "kaynak kod ≠ DOM" demiştik; Elements paneli canlı DOM'u gösterir. HTML'i çift tıklayıp düzenleyebilir, ögeyi sürükleyebilir, sağ tıkla gizleyebilir ya da silebilirsin — hepsi geçicidir, yenilemede kaybolur.

BölmeCevapladığı soru
StylesBu ögeye hangi kurallar uygulandı, hangisi kazandı? Ezilenler üstü çizili görünür; geçersiz bildirimler uyarı simgesi alır (7. ders)
ComputedSon değer ne ve hangi dosyanın hangi satırından geldi?
Kutu diyagramıİçerik, dolgu, kenarlık ve dış boşluk kaç piksel (8. ders)
LayoutSayfadaki tüm flex ve grid kapsayıcıları; hat numaralarını ve alan adlarını ekranda gösterir (9-10. ders)
AccessibilityÖgenin rolü, hesaplanan adı ve adın kaynağı (5. ders)
Event ListenersBu ögede hangi dinleyiciler var, hangi dosyadan bağlandı (16. ders)

Durum zorlama: Styles bölmesindeki :hov düğmesi :hover, :focus, :focus-visible, :active ve :visited durumlarını sabitler. Fareyi çekince kaybolan stilleri incelemenin tek pratik yolu budur — odak halkalarını denetlerken sürekli kullanılır.

DOM kesme noktaları: bir ögeye sağ tıklayıp Break on → subtree modifications / attribute modifications / node removal seçersen, o ögeyi hangi kodun değiştirdiğini yakalarsın. "Bu sınıfı kim ekliyor" ya da "bu satır neden siliniyor" sorularının en hızlı cevabıdır ve üçüncü parti betiklerle uğraşırken hayat kurtarır.

Son olarak Elements'te renk seçicisi kontrast oranını gösterir (6. ders) ve ::before/::after gibi sözde ögeler ağaçta ayrı satır olarak görünür.

04Console: log'un ötesi

$0            // Elements'te SEÇİLİ öge  ($1, $2… önceki seçimler)
$("sel")      // document.querySelector kısayolu
$$("sel")     // querySelectorAll — DİZİ döndürür (map/filter çalışır)
$x("//tr")    // XPath ile seçim

copy($0)              // panoya kopyala
getEventListeners($0) // ögedeki dinleyiciler
monitorEvents($0, "click")   // olayları konsola akıt (bitince unmonitorEvents)
queryObjects(Promise)        // bellekteki tüm örnekler
console.table(kayitlar);                    // dizi/nesne → tablo
console.group("Yükleme"); … console.groupEnd();
console.time("ciz"); … console.timeEnd("ciz");
console.count("tıklama");
console.assert(sonuc.length > 0, "liste boş geldi");
console.trace();                            // buraya nereden gelindi
console.dir(el);                            // ögeyi DOM ağacı değil NESNE olarak göster

console.log'un tuzağı

Bir nesneyi günlüklediğinde konsol çoğu zaman canlı referansı tutar: satırı açtığın anda nesnenin o anki hâlini görürsün, günlüklendiği andaki hâlini değil. "Loga baktım değer doğruydu ama kod yanlış çalışıyor" şaşkınlığının sebebi budur. Anlık görüntü istiyorsan console.log(structuredClone(nesne)) ya da console.log(JSON.parse(JSON.stringify(nesne))) yaz — ya da doğrusunu yap ve kesme noktası koy. Konsolun ikinci tuzağı, günlük satırlarının üretimde kalmasıdır: hassas veri sızdırır ve döngü içinde ciddi yavaşlık üretir; derleme adımında temizlenir ya da bir günlük sarmalayıcısı kullanılır.

Canlı ifadeler (göz simgesi) bir ifadeyi konsolun üstünde sürekli günceller: document.activeElement yazarsan odağın nerede olduğunu klavyeyle gezerken canlı izlersin — 5. ve 16. derslerdeki odak yönetimini denetlemenin en pratik yoludur.

Konsolun filtre çubuğu ve seviye seçicisi (Errors/Warnings/Info) gürültüyü keser; Preserve log seçeneği sayfa değişse bile günlüğü korur — yönlendirme sırasında kaybolan hataları yakalamak için gerekir.

05Network: ağda ne oldu

1. derste zaman dökümünü görmüştük. Günlük kullanımda en çok işe yarayanlar:

  • Filtre satırı: tür düğmeleri (Fetch/XHR, JS, CSS, Img) ve arama. status-code:404, larger-than:500k, method:POST, -domain:analytics.example gibi filtreler yazılabilir.
  • Disable cache: panel açıkken önbelleği devre dışı bırakır — "değişikliğim neden görünmüyor" sorusunun ilk kontrolü.
  • Kısıtlama (throttling): Slow 4G ya da özel bir profil. Offline ile çevrimdışı davranışını test edersin. Ağ kısıtlaması CPU'yu yavaşlatmaz; onun için Performance panelindeki CPU kısıtlaması kullanılır.
  • Sağ tık → Copy → Copy as cURL / Copy as fetch: isteği başlıkları ve çerezleriyle birlikte kopyalar. Bir sorunu takıma bildirirken ya da terminalden yeniden denerken en hızlı yol budur.
  • Sağ tık → Block request URL: bir kaynağı engelleyip sayfanın onsuz nasıl davrandığını görürsün (üçüncü parti betiğin etkisini ölçmek için).
  • Sağ tık → Replay XHR: isteği yeniden gönderir.
  • HAR olarak dışa aktarma: tüm oturumu dosyaya kaydeder — çerez ve belirteç içerir, paylaşmadan önce temizlenmelidir.

Bir isteğe tıklayınca: Headers (durum kodu, istek/yanıt başlıkları), Payload (gönderilen gövde — 3. derste "gerçekte ne gitti" sorusunun cevabı), Preview (biçimlendirilmiş JSON), Response (ham gövde), Timing (zaman dökümü), Initiator (bu isteği hangi kod satırı başlattı — kaynağı bilinmeyen istekleri bulmanın yolu).

1. derste konuştuğumuz CORS ikiliği burada görünür: konsolda hata vardır ama Network'te istek başarılı görünebilir; ayrıca basit olmayan isteklerde ayrı bir OPTIONS satırı bulunur.

06Sources: hata ayıklama

Hata ayıklamak console.log serpiştirmek değildir. Kesme noktası koyduğunda kodu durdurup o andaki tüm değişkenleri, çağrı zincirini ve kapsamı görürsün — üstelik kodu değiştirmeden.

Kesme noktası türüNe zaman
Satır (satır numarasına tıkla)Temel kullanım
Koşullu (sağ tık → Add conditional breakpoint)Döngünün 400. turunda durmak: i === 400 — en çok işe yarayanı
Günlük noktası (Logpoint)Durmadan değer yazdır — kodu değiştirmeden console.log etkisi
XHR/fetchAdresinde belirli bir metin geçen istek atılınca dur
Olay dinleyicisiHerhangi bir click'te dur — hangi kodun çalıştığı bilinmiyorsa
DOMÖge değiştirildiğinde dur (3. bölüm)
debugger;Koda gömülü kesme noktası — commit etmeyi unutma

Durduğunda sağ bölmede: Scope (yerel, kapanış ve küresel değişkenler — 14. derste kapanışın içindekileri burada görmüştük), Call Stack (buraya nereden gelindi), Watch (izlenen ifadeler), Breakpoints (hepsini tek yerden aç/kapat). Adım komutları: devam et, üzerinden atla (step over), içine gir (step into), dışına çık (step out).

Üç pratik ayrıntı:

  • Kaynak eşlemesi (18. ders) sayesinde küçültülmüş kod yerine özgün dosyanı görürsün. Göremiyorsan üretim yapısında eşleme yayınlanmamıştır.
  • Kod biçimlendirme ({} düğmesi) tek satıra sıkışmış kodu okunur hâle getirir.
  • Ignore list: kütüphane dosyalarını listeye ekleyerek adımlarken onların içine girmeni engellersin — çağrı yığını da sadeleşir.

Local overrides ise az bilinen güçlü bir özelliktir: sunucudan gelen bir dosyayı yerel bir kopyayla değiştirir ve yenilemeye rağmen korur. Kaynağına erişemediğin bir ortamda (üretim ya da başka takımın servisi) bir düzeltmeyi denemenin en hızlı yoludur.

07Application ve depolama

  • Local Storage / Session Storage: anahtar-değer çiftlerini görüntüle, düzenle, sil. Bu sitedeki kariyer:<dugum-id> ilerleme kayıtlarını ve kariyer:tema değerini buradan görebilirsin.
  • Cookies: ad, değer, alan adı, yol, süre ve HttpOnly, Secure, SameSite sütunları — 13. hattaki oturum sorunlarının ilk bakılacak yeri.
  • Cache Storage / Service Workers: çevrimdışı destek ve sürüm geçişleri; Update on reload ve Bypass for network seçenekleri geliştirmeyi kolaylaştırır.
  • Back/forward cache: bfcache testini çalıştırır ve engelleyen sebebi adıyla söyler (1. ders).
  • Clear site data: tüm depolamayı temizler — "ilk kez giren kullanıcı" durumunu denemenin doğru yolu.

08Performance, Lighthouse, Coverage, Rendering

PanelCevapladığı soru
PerformanceSayfa neden takılıyor? Ana iş parçacığında hangi işlev uzun sürdü, kaç yeniden düzen oldu, uzun görevler nerede? CPU kısıtlaması (4x/6x) ile zayıf cihazı taklit eder
LighthouseGenel bir denetim: performans, erişilebilirlik, en iyi uygulamalar, SEO. Sınırı bilinmeli — otomatik denetim erişilebilirlik sorunlarının yalnız bir kısmını yakalar (6. ders)
CoverageYüklenen CSS ve JS'in yüzde kaçı kullanılmadı? Ölü kod ve gereksiz kütüphane avı (7. ders)
MemoryBellek sızıntısı: yığın anlık görüntüleri arasında hangi nesneler birikiyor — 14. derste konuştuğumuz kaldırılmayan dinleyiciler burada görünür
Rendering (çekmece)Benzetimler ve görselleştirmeler

Rendering sekmesindeki anahtarlar bu hattaki birçok dersi test etmeni sağlar: Paint flashing (hangi bölgeler yeniden boyanıyor — 1. ders), Layout Shift Regions (CLS'i gözle görmek), Emulate prefers-color-scheme (12. ders), Emulate prefers-reduced-motion (6. ders), Emulate vision deficiencies (renk körlüğü benzetimi — 6. ders), Frame Rendering Stats (kare hızı).

Cihaz emülasyonu (11. ders) ekran boyutunu, cihaz piksel oranını, dokunma girdisini ve kullanıcı aracısını taklit eder; taklit etmedikleri gerçek dokunma davranışı, yazılım klavyesinin görünüm alanını kısaltması, mobil tarayıcının adres çubuğu davranışı ve cihazın gerçek CPU/ağ farkıdır. Bu yüzden kritik ekranlar gerçek cihazda denenir: Android'i USB ile bağlayıp chrome://inspect üzerinden, iOS'u Safari'nin Geliştirici menüsünden uzaktan ayıklayabilirsin.

09Teşhis akışı

Asıl beceri, hangi soruyu nereye soracağını bilmektir:

BelirtiSıra
Stil uygulanmıyorElements → öge doğru mu → Styles'ta kural görünüyor mu (seçici tutmuyor) → üstü çizili mi (kaskad) → uyarı simgesi var mı (geçersiz değer) → Computed'da son değer nereden geliyor
Düzen bozukKutu diyagramı → Layout bölmesinde flex/grid çizgileri → taşmayı üreten ögeyi bul (11. dersteki konsol betiği)
Düğme çalışmıyorConsole'da hata var mı → Event Listeners'ta dinleyici bağlı mı → olay kesme noktasıyla hangi kodun çalıştığını gör → devretmede closest eşleşiyor mu
Veri gelmiyorNetwork → istek gitti mi → durum kodu → Payload doğru mu → Response ne diyor → Initiator hangi kod → konsolda CORS uyarısı var mı
Sayfa takılıyorPerformance kaydı → uzun görevler → hangi işlev → yeniden düzen mi, betik mi → CPU kısıtlamasıyla doğrula
Yavaş açılıyorNetwork zaman dökümü (TTFB mi indirme mi bağlantı mı) → Coverage → Lighthouse
Eski sürüm görünüyorDisable cache ile yenile → Application → Service Workers ve Cache Storage → 1. dersteki damgalama kuralı
Ekran okuyucuda yanlışAccessibility bölmesi (rol, ad, kaynak) → klavye turu → canlı ifadeyle document.activeElement

Ve bir üretim gerçeği: DevTools senin makinende olanı gösterir. Kullanıcıda oluşan hatayı görmek için tarayıcıdan hata toplayan bir izleme aracı (window.onerror, unhandledrejection — 17. ders) ve gerçek kullanıcı ölçümü gerekir. 15. hatta hata ayıklamanın yöntem tarafını, 19. hatta gözlemlenebilirliği ayrıca göreceksin.

10Mini alıştırma — Bozuk sayfayı araçlarla çöz

Yaklaşık 20 dakika · bu sitenin herhangi bir sayfası ya da kendi dosyan

  1. Komut menüsü: Ctrl+Shift+P ile "screenshot" arayıp tam sayfa ekran görüntüsü al.
  2. Kaskad: bir başlığa iki farklı kuraldan renk ver; Styles'ta hangisinin kazandığını ve ezilenin üstünün çizildiğini gör. Computed'dan değerin kaynağına git.
  3. Geçersiz değer: padding: 10 yaz ve uyarı simgesini bul.
  4. Durum zorlama: :hov ile :focus-visible durumunu sabitleyip odak halkasını incele.
  5. Kutu ve düzen: bir kartın kutu diyagramını oku; sonra Layout bölmesinden grid hat numaralarını sayfada göster.
  6. Erişilebilirlik: bir simge düğmesinin rolünü ve hesaplanan adını oku. Adı sil, ne olduğunu gör.
  7. Canlı ifade: document.activeElement ekle ve sayfayı yalnız klavyeyle gezerek odağı izle.
  8. $0: bir ögeyi seç, konsolda $0 ile stil değiştir ve getEventListeners($0) ile dinleyicilerini listele.
  9. console.log tuzağı: bir nesneyi günlükle, sonra kodda değiştir ve konsolda satırı aç. Hangi değeri gördün? structuredClone ile tekrarla.
  10. DOM kesme noktası: bir ögeye "attribute modifications" kesme noktası koy ve sınıfını değiştiren kodu yakala.
  11. Koşullu kesme noktası: 1000 turlu bir döngüde yalnız i === 500 olduğunda dur. Scope bölmesinde değerleri incele.
  12. Günlük noktası: aynı döngüde durmadan değer yazdır.
  13. Network: bir isteği Copy as cURL ile kopyala ve terminalde çalıştır. Sonra aynı isteği Block request URL ile engelleyip sayfanın davranışını gör.
  14. Kısıtlama: Slow 4G ile sayfayı yenile; yükleme durumları görünüyor mu (6. dersteki beş durum)?
  15. Coverage: kullanılmayan CSS ve JS yüzdesini ölç.
  16. Rendering: Paint flashing ve Layout Shift Regions'ı açıp sayfayı kaydır. Sonra renk körlüğü benzetimiyle durum rozetlerini kontrol et.
  17. Depolama: Application'dan kariyer: ile başlayan anahtarları bul, birini sil ve sayfanın ilerlemesine ne olduğunu gör.

11Kendini sına

Bir CSS kuralı uygulanmıyor. DevTools ile nasıl teşhis edersin?

Üç ihtimal vardır ve Elements paneli üçünü de gösterir. (1) Seçici tutmuyor: ögeyi seç ve kuralın Styles listesinde görünüp görünmediğine bak; görünmüyorsa eşleşme yoktur — sınıf adında yazım hatası, yanlış birleştirici (table > tr tuzağı), :nth-child karışıklığı ya da sınıfın JavaScript tarafından henüz eklenmemiş olması. (2) Bildirim geçersiz: CSS anlamadığı bildirimi sessizce atar; DevTools bunu uyarı simgesiyle gösterir — birimsiz uzunluk, yanlış özellik adı, ya da bir önceki satırda unutulan noktalı virgül (o durumda iki bildirim birden düşer). (3) Kaskadda kaybetti: kural listede vardır ama üstü çizilidir; üzerine gelince onu ezen kural gösterilir — özgüllük, kaskad katmanı ya da kaynak sırası. Computed sekmesi ise en kestirme yoldur: özelliğin son değerini ve hangi dosyanın hangi satırından geldiğini doğrudan söyler. Ek araçlar: fareyle kaybolan durumlar için :hov ile durumu zorla; stil dosyasının güncel olduğundan emin olmak için Disable cache ile yenile; sınıfı kimin eklediğini merak ediyorsan ögeye "attribute modifications" DOM kesme noktası koy.

Network panelinde bir isteği incelerken nelere bakarsın?

Sırasıyla: (1) Durum kodu — 2xx/3xx/4xx/5xx hangi tarafın sorunu olduğunu söyler; 17. derste gördüğümüz gibi fetch 404'te hata fırlatmaz, dolayısıyla kod "başarılı" görünse de burada 404 durabilir. (2) Headers — istek başlıkları (Authorization, Content-Type, Cookie) ve yanıt başlıkları (Cache-Control, ETag, Vary, CORS başlıkları). (3) Payload — gerçekte ne gönderildi; form alanlarının eksik gitmesi gibi hataların tek doğru teşhis yeri burasıdır. (4) Preview/Response — sunucunun döndürdüğü gövde ve hata sözleşmesi. (5) Timing — DNS, bağlantı, SSL, TTFB ve indirme dökümü; yavaşlığın sunucuda mı ağda mı olduğunu söyler. (6) Initiator — bu isteği hangi kod satırı başlattı; kaynağı bilinmeyen istekleri bulmanın yolu. Ayrıca: Disable cache ile önbelleği devre dışı bırakmak, Slow 4G ile kısıtlamak, Copy as cURL ile isteği terminale taşımak ve Block request URL ile bir kaynağı engelleyip etkisini ölçmek. CORS sorunlarında tipik görüntü şudur: konsolda hata vardır ama Network'te istek başarılı görünür ve basit olmayan isteklerde ayrı bir OPTIONS satırı bulunur.

Hata ayıklarken console.log yerine kesme noktası kullanmanın avantajları nelerdir?

console.log yalnız yazdığın değişkeni ve koyduğun satırı gösterir; her yeni soru için kodu değiştirip sayfayı yenilemek gerekir. Kesme noktası kodu durdurur ve o an her şeye erişirsin: Scope bölmesinde yerel, kapanış ve küresel değişkenlerin tamamı (14. derste kapanışın içindekileri burada görmüştük), Call Stack'te buraya nereden gelindiği, Watch ile istediğin ifadeyi anında değerlendirme ve konsoldan o bağlamda kod çalıştırma imkânı. Üstelik kodu değiştirmeden çalışır — üretim kodunda günlük satırı bırakma riski olmaz. Özellikle güçlü türleri vardır: koşullu kesme noktası (döngünün 400. turunda dur), günlük noktası (durmadan değer yazdır — console.log'un kodsuz hâli), XHR/fetch kesme noktası, olay dinleyicisi kesme noktası (hangi kodun çalıştığı bilinmiyorsa) ve DOM kesme noktası (bu sınıfı kim ekliyor). Ayrıca console.log'un bilinen bir tuzağı vardır: nesneleri canlı referansla gösterir, satırı açtığında nesnenin o anki hâlini görürsün — yanıltıcıdır. Yine de console.log'un yeri vardır: hızlı bir doğrulama, üretimde yeniden oluşturulamayan bir akış ya da zamanlamaya duyarlı bir hata (durdurmak davranışı değiştirir) için uygundur.

Cihaz emülasyonu gerçek cihaz testinin yerini tutar mı?

Hayır. Emülasyon şunları taklit eder: görünüm alanı boyutu, cihaz piksel oranı (DPR), dokunma girdisi, kullanıcı aracısı dizesi ve isteğe bağlı olarak ağ/CPU kısıtlaması. Taklit etmedikleri: gerçek dokunma ve jest davranışı, yazılım klavyesinin açılınca görünüm alanını kısaltması, mobil tarayıcının adres çubuğu davranışı (8. derste 100vh tuzağının sebebi), cihazın gerçek işlemci ve bellek sınırları, pil/termal kısıtlama, ve en önemlisi farklı tarayıcı motorları — iOS'ta tüm tarayıcılar WebKit kullanır, dolayısıyla Chrome'un mobil emülasyonu iOS Safari'yi göstermez. Doğru yaklaşım katmanlıdır: geliştirme sırasında emülasyonla hızlı döngü, ardından kritik akışların gerçek cihazda denenmesi. Gerçek cihazda hata ayıklamak da mümkündür: Android'i USB ile bağlayıp chrome://inspect üzerinden, iPhone'u Safari'nin Geliştirici menüsünden uzaktan ayıklarsın. Son olarak DevTools yalnız senin makinendekini gösterir; kullanıcıda oluşan hataları görmek için window.onerror/unhandledrejection ile hata toplama ve gerçek kullanıcı ölçümü (RUM) gerekir.

12Sınav köşesi

Yazılıda nasıl sorulur

(1) Tarayıcı geliştirici araçlarındaki panelleri ve işlevlerini yazınız. (2) Elements panelinde bir CSS sorununu nasıl teşhis edersiniz? (3) Network panelinde hangi bilgiler bulunur? (4) Breakpoint nedir, türleri nelerdir? (5) console nesnesinin metotlarını sayınız. (6) Source map nedir, ne işe yarar? (7) Lighthouse nedir, hangi kategorileri ölçer? (8) Cihaz emülasyonu ile gerçek cihaz testi farkı. (9) Bir sayfanın yavaş açılmasını nasıl analiz edersiniz? (10) Bellek sızıntısı nasıl tespit edilir? (11) Erişilebilirlik denetimi için hangi araçlar kullanılır?

Sözlüde nasıl anlatılır — 2 dakikalık taslak

Düzen: (1) Duruş — "hata ayıklamayı tahmin ederek değil ölçerek yaparım; DevTools benim asıl teşhis aracım." (2) Panel eşlemesi — "stil sorununu Elements'te Styles ve Computed'dan, veri sorununu Network'te durum kodu, Payload ve Response'tan, takılmayı Performance kaydından, ölü kodu Coverage'dan bakarım." (3) Kıdem vuruşu — "kesme noktalarını console.log'a tercih ederim; koşullu kesme noktası ve günlük noktası kodu hiç değiştirmeden çalışır. Bir sınıfı kimin eklediğini DOM kesme noktasıyla, hangi kodun tetiklendiğini olay kesme noktasıyla bulurum." (4) Az bilinen araçlar — "isteği Copy as cURL ile terminale taşırım, bir kaynağı engelleyip etkisini ölçerim, Local overrides ile erişemediğim bir dosyada düzeltmeyi denerim; Rendering sekmesinden paint flashing, layout shift ve renk körlüğü benzetimlerini açarım." (5) Sınır — "emülasyon gerçek cihazın yerini tutmaz: yazılım klavyesi, adres çubuğu davranışı ve iOS'un WebKit'i taklit edilmez. Ayrıca DevTools yalnız benim makinemi gösterir; kullanıcıdaki hatalar için hata toplama ve gerçek kullanıcı ölçümü gerekir."