Polyfills and Transpilers

JavaScript belirli aralıklarla gelişmektedir. Düzenli olarak yeni dil önerileri sunulur, analiz edilir ve https://tc39.github.io/ecma262/adresine eklenir ve ardından spesifikasyona dahil edilir. Tarayıcıya bağlı olarak JavaScript motorlarında nasıl uygulandığı konusunda farklılıklar olabilir. Bazıları taslak önerileri uygularken, diğerleri tüm spesifikasyon yayınlanana kadar bekleyebilir. Yeni şeyler tanıtıldıkça geriye dönük uyumluluk sorunları ortaya çıkar.

Eski tarayıcılarda modern kodu desteklemek için iki araç kullanırız: transpilers ve polyfills.

Transpilers

Modern kodu çeviren ve eski sözdizimi yapılarını kullanarak yeniden yazan bir programdır, böylece eski motor bunu anlayabilir. Örneğin, "nullish birleştirme operatörü" ?? 2020'de tanıtıldı ve eski tarayıcılar bunu anlayamıyor.

Şimdi, nullish birleştirme operatörünü" ?? eski tarayıcılar için anlaşılabilir hale getirmek transpiler'ın işidir.

// transpiler'i çalıştırmadan önce
height = height ?? 200;

// transpiler çalıştırıldıktan sonra
height = height !== undefined && height !== null ? height : 200;

Babel en önde gelen transpile araçlarından biridir. Geliştirme sürecinde, kodu transpile etmek için webpack veya parcel gibi derleme araçlarını kullanabiliriz.

Polyfills

Yeni fonksiyonların eski tarayıcı motorlarında mevcut olmadığı durumlar vardır. Bu durumda, yeni fonksiyonu kullanan kod çalışmayacaktır. Boşlukları doldurmak için, polyfill olarak adlandırılan eksik fonksiyonu ekleriz. Örneğin, filter() yöntemi ES5'te tanıtıldı ve bazı eski tarayıcılarda desteklenmiyor. Bu yöntem bir fonksiyon kabul eder ve sadece fonksiyonun true döndürdüğü orijinal dizinin değerlerini içeren bir dizi döndürür.

const arr = [1, 2, 3, 4, 5, 6];
const filtered = arr.filter((e) => e % 2 === 0); // çift sayıyı filtreler
console.log(filtered);

// [2, 4, 6]

filter fonksiyonu için polyfill şu şekildedir.

Array.prototype.filter = function (callback) {
  //  Yeni diziyi saklar
  const result = [];
  for (let i = 0; i < this.length; i++) {
    // callback'i geçerli öğe, dizin ve bağlam ile çağırır.
    // verilen şartı sağlarsa yeni diziye ekler.
    if (callback(this[i], i, this)) {
      result.push(this[i]);
    }
  }
  // diziyi döndürür
  return result;
};

caniuse farklı tarayıcı motorları tarafından desteklenen güncellenmiş fonksiyonları ve sözdizimini gösterir.

results matching ""

    No results matching ""