İçeriğe geç
academia.sh

Ders 21 / 24

Ağ Panelinde Tanı

Bir isteğin zamanlama aşamalarının hangi nedene işaret ettiği, aktarılan boyut ile kaynak boyutu ayrımı, başlıkların tanıdaki rolü, şelalede bağımlılık zinciri okuma ve ölçümün yeniden üretilebilir kılınması.

İçindekiler

Önceki ders bir ögenin neden öyle göründüğünü yanıtladı, içeriğinin neden o içerik olduğunu yanıtlamadı. Rozetteki sayı eskiyse sorun biçemde değildir: ya istek hiç yapılmamıştır, ya önbellekten karşılanmıştır, ya sunucu eski veriyi döndürmüştür, ya da yanıt çok geç gelmiştir.

Ağ paneli bu dört olasılığı ayırır. Bu ders panelin ürettiği ölçüleri ve her ölçünün hangi nedene işaret ettiğini ele alır.

Panelin Yanıtladığı Sorular

Panel bir istek listesi gösterir ve her satır dört soruya yanıt taşır.

İstek gerçekten yapıldı mı? Listede bulunmayan bir istek yapılmamıştır. Beklenen isteğin hiç görünmemesi, kodun o yolu hiç çalıştırmadığını ya da bir koşulun tutmadığını söyler — sunucuda aramaya gerek yoktur.

Nereden karşılandı? Ağdan mı, tarayıcının kendi önbelleğinden mi, yoksa servis çalışanından mı geldiği ayrı ayrı işaretlenir. Önbellekten karşılanan bir istek listede görünür ama ağa çıkmamıştır; eski veri sorununun en sık kaynağı budur.

Ne kadar sürdü ve nerede bekledi? Toplam süre tek başına bir tanı değildir; aşamalara bölünmüş hâli tanıdır.

Ne döndü? Durum kodu, başlıklar ve gövde. Yanlış içerik sorunlarının çoğu burada görülür.

Zamanlamanın Aşamaları

Bir isteğin toplam süresi arka arkaya gelen aşamalara ayrılır ve her aşamanın uzaması farklı bir nedene işaret eder.

Kuyrukta bekleme, isteğin henüz başlamadığı süredir. Tarayıcının aynı konağa açtığı eşzamanlı bağlantı sayısı sınırlıdır; sınır dolduğunda yeni istekler bekler. Uzun kuyruk süresi sunucuyu değil, sayfanın aynı anda kaç istek başlattığını gösterir.

Bağlantı kurulumu, ad çözümlemesi, taşıma bağlantısı ve güvenli el sıkışmasından oluşur. Yalnızca yeni bağlantılarda görünür; kalıcı bağlantı üzerinden giden istekte sıfıra yakındır. Uzaması ağ mesafesine ve sertifika doğrulamasına işaret eder, sunucunun iş yüküne değil.

İlk baytı bekleme, isteğin gönderilmesiyle ilk yanıt baytının gelmesi arasındaki süredir. Sunucunun yanıtı üretme süresini içerir. Bu aşamanın uzaması tanıyı sunucu tarafına taşır; istemcide yapılacak bir şey yoktur.

Gövde indirme, ilk bayttan son bayta kadar geçen süredir. Uzaması boyutla ya da bant genişliğiyle ilgilidir; sıkıştırma ve boyut küçültme buraya etki eder, sunucu hızlanması etmez.

Ayrım ölçülebilir. Aşağıdaki sunucu iki gecikmeyi ayrı ayrı üretir: ilk bayta kadar bir işleme süresi, sonra gövdenin geri kalanı için bir aktarım süresi.

// gecikmeli-sunucu.mjs — ilk bayta kadar 300 ms, govdenin kalani icin 200 ms bekler
import { createServer } from "node:http";

const bekle = (ms) => new Promise((coz) => setTimeout(coz, ms));

createServer(async (istek, yanit) => {
  yanit.sendDate = false;
  await bekle(300);                      // sunucunun isleme suresi: ilk bayti geciktirir
  yanit.writeHead(200, { "Content-Type": "application/json" });
  yanit.write('{"olcumler":[{"sicaklik":-4.2}');
  await bekle(200);                      // govdenin geri kalani: indirme suresini uzatir
  yanit.end(',{"sicaklik":-4.6}]}');
}).listen(8138, "127.0.0.1", () => console.log("dinleniyor: 127.0.0.1:8138"));
#!/usr/bin/env bash
# gecikmeli-sunucu.mjs'yi baslatir, tek istegin asama surelerini olcer, sonra durdurur.
node gecikmeli-sunucu.mjs > /dev/null &
sunucu=$!
sleep 1

curl -sS -o /dev/null http://127.0.0.1:8138/olcumler.json \
  -w 'ad cozumleme : %{time_namelookup} s
baglanti     : %{time_connect} s
ilk bayt     : %{time_starttransfer} s
toplam       : %{time_total} s
indirilen    : %{size_download} bayt
'

kill "$sunucu"
ad cozumleme : 0.000113 s
baglanti     : 0.000441 s
ilk bayt     : 0.307935 s
toplam       : 0.508467 s
indirilen    : 50 bayt

Süreler ortama bağlıdır ve her çalıştırmada ondalık basamaklarda değişir; değişmeyen şey yapıdır. Ad çözümlemesi ve bağlantı kurulumu ölçülemeyecek kadar kısadır, çünkü istek geri döngü adresine gitmiştir; gerçek bir sunucuda bu iki değer toplam sürenin belirgin bir bölümünü alır. İlk bayt süresi sunucunun beklettiği 300 milisaniyeyi yansıtır. Toplam süre ile ilk bayt arasındaki 200 milisaniyelik fark gövde indirmedir. Bağlantı noktası olarak seçilen 8138 keyfîdir ve boş olmalıdır.

Tanı kuralı buradan çıkar: ilk bayta kadar geçen süre ile ondan sonraki süre iki ayrı sorunun ölçüsüdür ve tek bir toplam sayı ikisini de gizler.

Aktarılan Boyut ve Kaynak Boyutu

Panel bir istek için iki ayrı boyut gösterir. Aktarılan boyut telden geçen bayt sayısıdır; başlıkları içerir ve sıkıştırılmışsa sıkıştırılmış hâlidir. Kaynak boyutu açılmış içeriğin boyutudur.

İkisi arasındaki oran sıkıştırmanın çalışıp çalışmadığını söyler. Eşit olmaları sıkıştırmanın uygulanmadığını gösterir; metin türündeki bir kaynak için bu bir yapılandırma eksiğidir. Aktarılan boyutun sıfıra yakın olması isteğin önbellekten karşılandığını gösterir.

Bu ayrım başarım tartışmasında da işe yarar. Ayrıştırma ve çalıştırma maliyeti kaynak boyutuyla orantılıdır, aktarım maliyeti aktarılan boyutla. Sıkıştırma ikincisini düşürür, birincisini düşürmez: iyi sıkışan büyük bir betik ağı yormaz ama ana iş parçacığını yorar.

Başlıkları Okumak

Yanıt başlıkları önceki konudaki tazelik kararının kanıtıdır. Bir kaynağın neden eski geldiği sorusu, saklama izni ve ömür başlıkları okunarak yanıtlanır; doğrulayıcı varsa koşullu isteğin yapılıp yapılmadığı ve gövdesiz yanıt dönüp dönmediği listede görünür.

Üç başlık daha tanıda sık gerekir. İçerik türü, tarayıcının yanıtı nasıl yorumlayacağını belirler; yanlış tür, doğru gelen bir yanıtın yanlış işlenmesine yol açar. İçerik kodlaması, sıkıştırmanın hangi biçimde uygulandığını söyler. Yanıtın hangi istek başlığına göre değiştiğini bildiren başlık, önbelleğin farklı kullanıcılara aynı yanıtı vermesini önler; eksikliği, bir kullanıcının yanıtının diğerine sunulmasıyla sonuçlanır.

İstek başlıkları da okunur. Kimlik bilgisinin gönderilip gönderilmediği, koşullu isteğin doğrulayıcı taşıyıp taşımadığı ve hangi kaynağın istekte bulunduğu buradan görülür.

Şelalede Zincir Okumak

Şelale görünümü her isteği bir zaman çizgisi üzerinde çubuk olarak gösterir. Okunan şey tek tek süreler değil, çubukların birbirine göre konumudur.

Yan yana başlayan çubuklar koşut isteklerdir. Biri bitmeden diğeri başlamıyorsa aralarında bir bağımlılık vardır ve bu bağımlılık çoğunlukla istenmemiştir: bir betiğin indirilip çalıştırılmasından sonra keşfedilen bir kaynak, ancak o noktada istenebilir. Kaynak Yükleme Sırası dersinde tanımlanan ön tarama bu zinciri kısaltmak içindir; şelaledeki basamaklı görünüm, ön taramanın kaynağı göremediğini söyler.

Aynı anda başlayan ama uzun süre bekleyen çubuklar bağlantı sınırına işaret eder. Sayfanın ilk çizimini bekleten kaynaklar zaman çizgisindeki işaretlerle karşılaştırılır: ilk anlamlı çizimden sonra biten bir istek, o çizimi geciktirmemiştir.

Araya Giren Katmanın Listede Görünüşü

Servis çalışanı kayıtlıyken liste ikiye katlanabilir. Sayfanın yaptığı istek bir satır üretir; çalışan o isteği karşılamak için ağa çıkarsa bu ikinci bir satır olarak görünür. İki satır aynı adrese aittir ve karıştırılırsa istek sayısı iki katı sanılır.

Ayrım tanının kendisidir. Sayfanın satırı isteğin çalışandan karşılandığını işaretliyor ve altında ağ satırı yoksa, yanıt önbellekten gelmiştir. Her iki satır da varsa çalışan ağa çıkmış demektir; ikisinin süreleri arasındaki fark çalışanın kendi işlem süresidir. Sayfanın satırı görünüp çalışanın hiç devreye girmediği durumda ise ya istek kapsam dışındadır ya da sayfa henüz denetlenmiyordur — Servis Çalışanları dersindeki denetim kuralı burada gözlenebilir hâle gelir.

Çalışanın yaşam döngüsü de listede iz bırakır: çalışan betiğinin kendisi için yapılan güncelleme isteği ve kurulum sırasında toplanan kaynakların istekleri, sayfanın hiç istemediği satırlar olarak belirir.

Yeniden Üretilebilir Ölçüm

Ağ ölçümü, ölçüm koşulları sabitlenmeden karşılaştırılamaz. Üç koşul açıkça belirlenmelidir.

Önbellek durumu. İlk ziyaret ile tekrar ziyaret bambaşka iki senaryodur ve ikisi de gerçektir. Ölçüm hangisi için yapılıyorsa o durum kurulur; önbellek devre dışı bırakılarak yapılan ölçüm yalnızca ilk ziyareti anlatır.

Ağ koşulu. Araçlar bant genişliğini ve gecikmeyi yapay olarak sınırlayabilir. Geliştirme makinesindeki yerel ölçüm, sahadaki kullanıcının koşullarını hiçbir zaman temsil etmez; kısıtlama, ölçümü gerçeğe yaklaştırmanın tek istemci tarafı yoludur.

Eklentiler ve arka plan. Tarayıcıya kurulmuş eklentiler kendi isteklerini listeye karıştırır ve zamanlamayı etkiler. Ölçüm, eklentisiz bir kullanıcı profilinde yapılır.

Bir de kaydın kendisini korumak gerekir: gezinme sırasında listenin temizlenmesi öntanımlıdır ve gezinmeyle sonuçlanan bir sorunun kaydı bu yüzden kaybolur. Kaydın korunması açıkça istenir.

Özet

  • Ağ paneli dört soruyu ayırır: istek yapıldı mı, nereden karşılandı, hangi aşamada ne kadar bekledi, ne döndü. Aşamalar farklı nedenlere işaret eder: kuyruk sayfanın istek sayısına, bağlantı kurulumu mesafeye, ilk bayt sunucuya, indirme boyuta.
  • Servis çalışanı kayıtlıyken aynı adres iki satır üretebilir; ikinci satırın yokluğu yanıtın önbellekten geldiğini gösterir.
  • Aktarılan boyut ile kaynak boyutu arasındaki fark sıkıştırmayı ölçer; ayrıştırma maliyeti kaynak boyutuyla orantılıdır.
  • Başlıklar tazelik kararının, içerik yorumlamasının ve önbellek ayrımının kanıtıdır.
  • Şelalede okunan şey süreler değil, çubukların birbirine göre konumudur; basamaklı görünüm keşif zinciri anlamına gelir.
  • Ölçüm önbellek durumu, ağ koşulu ve tarayıcı profili sabitlenmeden yeniden üretilemez.

Sonraki Adım

Ağ paneli isteğin ne zaman bittiğini söyler, ama yanıt geldikten sonra sayfanın neden hâlâ donuk kaldığını söylemez. Ölçüm listesi indirildiği hâlde ekranın geç güncellenmesinin nedeni ağda değil, tek bir iş parçacığında sıraya girmiş işlerdedir: ayrıştırma, biçem hesabı, yerleşim, boyama ve araya giren her betik aynı sırayı paylaşır. Bu sıranın nerede tıkandığı, isteklerin listesiyle değil zaman içindeki iş dökümüyle görülür. Sonraki ders bu dökümü üreten kaydı ve okunma biçimini ele alır.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat