---
title: 'Strateji Seçimi'
source: 'https://academia.sh/tr/kurslar/olusturma-stratejileri/strateji-secimi'
course: 'Oluşturma Stratejileri ve Altyapı'
language: tr
updated: '2026-08-17T18:09:31+00:00'
license: 'CC BY-SA 4.0'
---

# Strateji Seçimi

Oluşturma modelinin sayfa başına seçilmesi; içerik tazeliği, kişiselleştirme ve ölçek eksenlerinin ölçüye bağlanması, sıralı bir karar kuralı ve tek tip politikalarla karışık politikanın günlük iş ve ihlal sayısı üzerinden karşılaştırılması.

Altı model ayrı ayrı ölçüldü ve her biri belirli bir durumda üstün çıktı. İstemcide
oluşturma sonraki gezinmeleri ağdan kurtardı, sunucuda oluşturma ilk içeriği öne çekti,
statik üretim istek anındaki işi sıfırladı, artımlı yeniden üretim tazeliği derleme
sıklığından kurtardı, akış ile canlandırma bölme aralıkları daralttı, kenar mesafeyi kesti.

Geriye tek bir soru kalıyor: belirli bir sayfa için hangisi? Bu ders o soruyu bir zevk
meselesi olmaktan çıkarıp üç ölçülebilir eksene bağlar.

## Üç Eksen

**İçerik tazeliği**, sayfanın gösterdiği bilginin en fazla ne kadar eski olabileceğidir ve
saniye cinsinden yazılır. Bu bir tercih değil, içeriğin doğasından gelen bir gerekliliktir:
istasyonun kuruluş bilgisi hiç eskimez, günlük arşiv kapandıktan sonra değişmez, canlı ölçüm
listesi bir dakikadan eski olduğunda yanıltıcı hâle gelir.

Tazeliği yazarken iki şey ayrılır: içeriğin **değişme sıklığı** ve gösterilen değerin
**kabul edilebilir yaşı**. Ölçüm dakikada bir değişebilir ama sayfada ölçüm zamanı yazılıyorsa
beş dakikalık bir yaş kabul edilebilir olabilir. Karar, ikincisine göre verilir.

**Kişiselleştirme**, yanıtın kullanıcıya göre değişip değişmediğidir ve üç değer alır. Yanıt
herkese aynıysa kişiselleştirme yoktur. Sayfanın yalnızca küçük bir bölümü kişiye
bağlıysa — bir ad, bir yetki rozeti, bir eşik uyarısı — kişiselleştirme bölümseldir. Sayfanın
yapısı kullanıcıya göre kuruluyorsa tamdır.

Bu üçlü ayrım önemlidir çünkü bölümsel kişiselleştirme, sayfanın geri kalanının
önbelleklenebilirliğini korur. Kenar Oluşturma dersindeki üçüncü ölçüm bunun karşılığıydı:
kabuk kenarda hazırken yalnızca küçük parçanın kaynaktan istenmesi süreyi dörtte üçe
indirmişti.

**Ölçek** iki ayrı sayıdır ve karıştırılmamalıdır. **Sayfa sayısı** derleme maliyetini
belirler; **istek hacmi** çalışma zamanı maliyetini belirler. Statik Site Üretimi dersinde
ölçülen doğrusallık birincisiyle, Sunucuda Oluşturma dersindeki istek başına maliyet
ikincisiyle ilgilidir. Dört bin arşiv sayfası ve günde sekiz yüz panel isteği, tümüyle
farklı iki sınır üretir.

## Envanter ve Karar Kuralı

Eksenler yazıldıktan sonra karar bir tablo aramasına döner. Aşağıdaki kural sıralı sınanır;
ilk tutan kural kazanır ve sıra rastgele değildir: kişiselleştirme, önbelleklenebilirliği
tümüyle kaldırdığı için önce sınanır; ölçek, derleme yolunu kapattığı için ondan sonra
gelir; tazelik en sonda pencereyi belirler.

```js
// karar.mjs — istasyon sitesinin sayfa envanteri, model secimi ve politika karsilastirmasi
// Girdiler varsayimdir; cikti bu varsayimlarin aritmetigidir, olcum degildir.

const GUN = 86400;               // saniye
const URETIM_MS = 40;            // bir sayfayi uretmenin sunucu isi
const PARCA_MS = 5;              // kenarda birlestirmede kaynaktan istenen kucuk parca
const SAYFA_ESIGI = 2000;        // bunun ustunde tumunu her derlemede uretmek pahali

// tazelik: icerigin en fazla ne kadar eski sunulabilecegi (saniye), Infinity = degismez
// kisisel: "yok" | "bolumsel" | "tam"
const ENVANTER = [
  { yol: "/",              tazelik: GUN,      kisisel: "yok",      sayfa: 1,    istek: 4000 },
  { yol: "/olcumler",      tazelik: 60,       kisisel: "yok",      sayfa: 1,    istek: 30000 },
  { yol: "/olcumler/:gun", tazelik: Infinity, kisisel: "yok",      sayfa: 4000, istek: 12000 },
  { yol: "/panel",         tazelik: 5,        kisisel: "tam",      sayfa: 1,    istek: 800 },
  { yol: "/harita",        tazelik: 7 * GUN,  kisisel: "yok",      sayfa: 1,    istek: 2500 },
  { yol: "/hakkinda",      tazelik: Infinity, kisisel: "yok",      sayfa: 3,    istek: 900 },
  { yol: "/uyari",         tazelik: 60,       kisisel: "bolumsel", sayfa: 1,    istek: 5000 },
];

// Karar kurali: sirali sinanir, ilk tutan kural kazanir.
function model(s) {
  if (s.kisisel === "tam") return "sunucuda olusturma";
  if (s.kisisel === "bolumsel") return "kenarda birlestirme";
  if (s.sayfa > SAYFA_ESIGI) return "artimli yeniden uretim";
  if (s.tazelik === Infinity) return "statik site uretimi";
  if (s.tazelik >= 3600) return "statik site uretimi";
  if (s.tazelik >= 30) return "artimli yeniden uretim";
  return "sunucuda olusturma";
}

// Gunluk sunucu isi (saniye). Artimli uretimde ilk iska bir kez odendigi icin
// kararli duruma bakilir; degismez icerik yeniden uretilmez.
function gunlukIs(s, secim) {
  switch (secim) {
    case "statik site uretimi":
      return (s.sayfa * URETIM_MS) / 1000;                       // gunde bir derleme
    case "sunucuda olusturma":
      return (s.istek * URETIM_MS) / 1000;
    case "kenarda birlestirme":
      return (s.istek * PARCA_MS) / 1000;
    case "artimli yeniden uretim": {
      if (s.tazelik === Infinity) return 0;
      const uretim = Math.min(s.istek, s.sayfa * (GUN / s.tazelik));
      return (uretim * URETIM_MS) / 1000;
    }
    default:
      return 0;
  }
}

console.log("yol".padEnd(16) + "tazelik".padStart(10) + "kisisel".padStart(11) +
  "sayfa".padStart(7) + "istek".padStart(8) + "   secilen model");
for (const s of ENVANTER) {
  const t = s.tazelik === Infinity ? "degismez" : `${s.tazelik} s`;
  console.log(s.yol.padEnd(16) + t.padStart(10) + s.kisisel.padStart(11) +
    String(s.sayfa).padStart(7) + String(s.istek).padStart(8) + "   " + model(s));
}

// Politikalar: uc tek tip secim ve karar kuralinin urettigi karisik secim.
const POLITIKALAR = [
  ["hepsi sunucuda", () => "sunucuda olusturma"],
  ["hepsi statik", () => "statik site uretimi"],
  ["hepsi artimli", () => "artimli yeniden uretim"],
  ["karar kurali", model],
];

console.log("\npolitika".padEnd(18) + "gunluk is (s)".padStart(15) +
  "tazelik ihlali".padStart(16) + "kisisellestirme ihlali".padStart(24));
for (const [ad, sec] of POLITIKALAR) {
  let is = 0, tazelikIhlali = 0, kisiselIhlali = 0;
  for (const s of ENVANTER) {
    const secim = sec(s);
    is += gunlukIs(s, secim);
    // Statik uretim gunde bir derlenir: bir gunden kisa tazelik istegini karsilamaz.
    if (secim === "statik site uretimi" && s.tazelik < GUN) tazelikIhlali += 1;
    // Kisiye ozel bolum, herkese ayni yaniti veren modellerde uretilemez.
    if (s.kisisel !== "yok" &&
        (secim === "statik site uretimi" || secim === "artimli yeniden uretim")) {
      kisiselIhlali += 1;
    }
  }
  console.log(ad.padEnd(18) + is.toFixed(1).padStart(15) +
    String(tazelikIhlali).padStart(16) + String(kisiselIhlali).padStart(24));
}
```

```
yol                tazelik    kisisel  sayfa   istek   secilen model
/                  86400 s        yok      1    4000   statik site uretimi
/olcumler             60 s        yok      1   30000   artimli yeniden uretim
/olcumler/:gun    degismez        yok   4000   12000   artimli yeniden uretim
/panel                 5 s        tam      1     800   sunucuda olusturma
/harita           604800 s        yok      1    2500   statik site uretimi
/hakkinda         degismez        yok      3     900   statik site uretimi
/uyari                60 s   bolumsel      1    5000   kenarda birlestirme

politika           gunluk is (s)  tazelik ihlali  kisisellestirme ihlali
hepsi sunucuda             2208.0               0                       0
hepsi statik                160.3               3                       2
hepsi artimli               147.2               0                       2
karar kurali                114.8               0                       0
```

Üst tablonun üçüncü satırı kuralın sırasını haklı çıkarır: arşiv sayfaları hiç değişmez ve
saf mantıkla statik üretime aittir, ama dört bin sayfa eşiğin üstündedir. Kural bu yüzden
onları artımlı yeniden üretime yollar — sayfalar ilk istendiklerinde üretilir, sonra
değişmedikleri için bir daha üretilmezler. Günlük iş hesabında bu satırın katkısı sıfırdır.

Yedinci satır bölümsel kişiselleştirmenin karşılığıdır. Uyarı sayfasının gövdesi herkese
aynıdır, yalnızca eşik uyarısı kişiye bağlıdır. Sayfanın tamamı sunucuda üretilseydi istek
başına 40 milisaniye ödenecekti; kenarda birleştirmeyle 5 milisaniyeye iner.

## Politikaların Karşılaştırılması

Alt tablo, tek tip bir politikanın neden yetmediğini üç sütunda gösterir.

**Hepsi sunucuda** hiçbir kısıtı ihlal etmez ve en pahalıdır: günde 2208 saniye sunucu işi,
karar kuralının yaklaşık on dokuz katı. Bütün sayfaları en kısıtlayıcı sayfanın kuralına
tabi tutmanın bedeli budur.

**Hepsi statik** ucuza gelir ama üç sayfa türünün tazelik gereksinimini ve iki sayfa türünün
kişiselleştirmesini karşılayamaz. Bu sütunlar para birimiyle ölçülmez; karşılanmayan bir
gereksinim, ucuzluğun telafi edemeyeceği bir kusurdur.

**Hepsi artımlı** tazelik ihlalini kapatır — pencere içeriğin gereksinimine ayarlanabilir —
ama kişiselleştirmeyi çözemez, çünkü paylaşılan bir kopya kişiye özel olamaz.

**Karar kuralı** hem ihlalsizdir hem de en ucuzdur. Bu bir rastlantı değildir: her sayfa
kendi kısıtlarının izin verdiği en ucuz modeli aldığı için toplam da en düşük çıkar.
Karışık politikanın maliyeti, tek tip politikalarınkinin ortalaması değil, alt sınırıdır.

## Eksenlerin Yakalamadığı Ölçütler

Üç eksen kararın çoğunu verir; hepsini vermez. Dört ölçüt daha vardır ve bunlar seçimi
değiştirebilir.

**İşaretlemenin makine tarafından okunması.** İçeriğin betik çalıştırmayan istemcilerce
okunması gerekiyorsa istemcide oluşturma elenir. İlk derste ölçülen sıfır, bu kısıtın
somut hâliydi.

**İlk ziyaret oranı.** Ziyaretçilerin çoğu tek sayfa görüp ayrılıyorsa istemcide
oluşturmanın sonraki gezinmelerde kazandırdığı hız hiç kullanılmaz; ilk yükleme bedeli
sürekli ödenir. Aynı arayüz, günde saatlerce açık kalan bir panel olduğunda tersine döner.

**Hata dayanıklılığı.** Veri kaynağı yanıt vermediğinde ne olacağı modele göre değişir:
statik çıktı sunulmaya devam eder, artımlı üretim eski kopyayı verir, sunucuda oluşturma
belgeyi hiç üretemez. Kesinti sırasında görünmesi gereken sayfalar bu ölçüte göre seçilir.

**İşletme karmaşıklığı.** Beş ayrı modelin bir arada bulunduğu bir sitede, her modelin ayrı
bir dağıtım yolu, ayrı bir önbellek davranışı ve ayrı bir hata biçimi vardır. Karar
kuralının kazandırdığı sunucu saatleri, sınama ve tanı yükündeki artışla birlikte
değerlendirilir. Az sayıda modelle çalışmak da bir seçimdir.

## Karar Yeniden Gözden Geçirilir

Envanterdeki değerler sabit değildir. Arşiv sayfa sayısı her gün bir artar ve eşiği
geçtiğinde seçim değişir. Bir sayfaya kişiye özel bir bölüm eklendiğinde kişiselleştirme
sütunu "yok"tan "bölümsel"e döner ve model değişir. İstek hacmi on kat arttığında sunucuda
oluşturmanın maliyeti aynı oranda büyür.

Bu yüzden karar kuralı koda gömülü bir tablo olarak tutulur ve envanterin değerleri
ölçümden beslenir: sayfa sayısı derleme çıktısından, istek hacmi erişim kayıtlarından,
tazelik gereksinimi içeriğin sahibinden. Tahminle doldurulmuş bir envanter, yanlış bir
kuralın doğru sonucunu verir.

## Özet

- Oluşturma modeli site geneline değil sayfa türüne göre seçilir; kararın üç ölçülebilir
  ekseni içerik tazeliği, kişiselleştirme derecesi ve ölçektir.
- Ölçek iki ayrı sayıdır: sayfa sayısı derleme maliyetini, istek hacmi çalışma zamanı
  maliyetini belirler.
- Sıralı bir karar kuralı — önce kişiselleştirme, sonra ölçek, en sonda tazelik — envanteri
  modellere eşler ve seçimi yeniden üretilebilir kılar.
- Karışık politika, ölçülen envanterde hem kısıt ihlalsizdir hem de tek tip politikaların
  en ucuzundan daha ucuzdur; her sayfa kendi kısıtlarının izin verdiği en ucuz modeli alır.
- Üç eksen dışında dört ölçüt daha karara girer: işaretlemenin makine tarafından okunması,
  ilk ziyaret oranı, veri kaynağı kesildiğinde beklenen davranış ve işletme karmaşıklığı.

## Sonraki Adım

Strateji seçildi: her sayfa türü hangi modelle üretileceğini biliyor. Ama modellerin hepsi
aynı şeyi varsayıyor — çalıştırılabilir bir çıktının hazır olduğunu. Statik üretim bir
derleyicinin çalışmasını, sunucuda oluşturma sunucuya yüklenecek bir paketi, kenarda
birleştirme kenara gönderilecek küçük bir modülü, canlandırma ise istemciye inecek bileşen
kodunu gerektirir. Bu çıktıları üreten şey, kaynak dosyalar arasındaki bağımlılık ilişkisini
çözüp hangi kodun hangi parçaya gireceğine karar veren bir süreçtir. Sonraki konu bununla
açılır: Modül Paketleme dersi, bağımlılık çizgesinin nasıl kurulduğunu ve bu çizgeden kaç
parçanın hangi ölçütle üretildiğini ele alır.
