# Polyfill

Adres: https://softwaredictionary.org/tr/terimler/polyfill
Kategori: Web Geliştirme
Son güncelleme: 2026-09-30
Okunuşu: polifil

Kısaca: Polyfill, modern bir web özelliğini onu desteklemeyen eski tarayıcılara ekleyen koddur; böylece standart API her yerde özel durumlar olmadan kullanılabilir.

## Polyfill nedir?

Polyfill, bir tarayıcı özelliğini onu yerel olarak desteklemeyen ortamlar için uygulayan, genellikle JavaScript ile yazılmış bir kod parçasıdır. Önce özelliğin var olup olmadığını denetler ve yalnızca eksikse, mevcut eski özellikleri kullanarak onu tanımlar. Böylece standart API'ye göre yazılmış kod eski ve yeni tarayıcılarda aynı şekilde çalışır.

Klasik bir polyfill, `if (!Array.prototype.includes)` gibi bir denetimle başlar ve ardından eksik metodu ekler. core-js gibi kütüphaneler JavaScript standart kütüphanesinin çoğu için polyfill sağlar; derleme araçları da bir browserslist yapılandırmasına göre yalnızca hedef tarayıcılarınızın ihtiyaç duyduklarını ekleyebilir. Yeni CSS yerleşim modları ya da düşük seviyeli tarayıcı API'leri gibi bazı özellikler, tarayıcı motorunun derinlerinde destek gerektirdiğinden tam olarak polyfill edilemez.

İsim, bir duvar dolgu macunu markasından gelir: polyfill, tarayıcının özellik desteğindeki çatlakları doldurur ve yüzey pürüzsüz görünür. Tüm büyük tarayıcılar artık otomatik güncellendiği için polyfill'ler Internet Explorer döneminde olduğundan daha az önemlidir, ama eski cihazlar, gömülü tarayıcılar ve çok yeni API'ler için hâlâ kullanılırlar. Modern tarayıcıların ihtiyaç duymadığı polyfill'ler yine de bayt ekler ve sayfaları yavaşlatır; bu yüzden dikkatle hedeflemek işe yarar.

Polyfill çoğunlukla transpiler ile karıştırılır. Babel ya da TypeScript derleyicisi gibi bir transpiler, opsiyonel zincirleme (`?.`) veya sınıflar gibi yeni söz dizimini eski söz dizimine yeniden yazar; çünkü söz dizimi çalışma zamanında eklenemez. Polyfill ise kod çalışırken `Promise`, `fetch` veya `Array.prototype.at` gibi eksik fonksiyonları ve nesneleri ekler. Birçok proje ikisine de ihtiyaç duyar; yakın bir akrabası olan ponyfill ise aynı özelliği global nesneleri değiştirmeden ayrı bir fonksiyon olarak sağlar.

## Önemli noktalar

- Polyfill, eksik bir web özelliğini tarayıcının zaten sahip olduğu özelliklerle uygular.
- Önce özelliği algılar ve yalnızca yoksa doldurur.
- Transpiler'lar yeni söz dizimini yeniden yazar; polyfill'ler çalışma zamanında eksik fonksiyon ve nesneleri ekler.
- Derleme araçları yalnızca hedef tarayıcılarınızın gerçekten ihtiyaç duyduğu polyfill'leri ekleyebilir.
- Gereksiz polyfill'ler ağırlık katar; üçüncü taraflardan yüklenen polyfill betikleri ise tedarik zinciri riskidir.

## Örnek: Array.prototype.at() için polyfill yazmak

```javascript
// Add Array.prototype.at() only if the browser lacks it
if (!Array.prototype.at) {
  Object.defineProperty(Array.prototype, "at", {
    value: function (index) {
      const i = Math.trunc(index) || 0;
      return this[i < 0 ? this.length + i : i];
    },
    writable: true,
    configurable: true,
  });
}

// Code can now use the standard API everywhere
console.log([10, 20, 30].at(-1)); // 30
```

## Sık sorulan sorular

**Polyfill ile transpiler arasındaki fark nedir?**

Transpiler, kod çalışmadan önce yeni söz dizimini eski söz dizimine dönüştürür; örneğin `a?.b` ifadesini açık denetimlere çevirir. Polyfill ise çalışma zamanında `Promise` veya `structuredClone` gibi eksik yerleşik fonksiyonları ya da nesneleri ekler.

**Bugün hâlâ polyfill'lere ihtiyacım var mı?**

Çoğu zaman çok azına. Evergreen tarayıcılar modern JavaScript'in neredeyse tamamını destekler; bu yüzden birçok proje polyfill'e yalnızca en yeni API'ler ya da desteklemesi gereken eski cihazlar için ihtiyaç duyar. Bunu gerçek kitlenize dayalı bir browserslist sorgusu söyleyebilir.

**Polyfill'leri bir CDN'den yüklemek güvenli midir?**

Risk taşır. 2024'te yaygın kullanılan bir polyfill alan adının sahibi değişti ve bu alan adından betik yükleyen birçok siteye zararlı kod sunmaya başladı; bu yüzden polyfill'leri pakete dahil etmek veya kendi sunucunuzda barındırmak daha güvenlidir.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
