Bir dolgu ile çoklu dolgu arasındaki fark nedir?


406

Her ikisi de web geliştirme çevrelerinde kullanılmış gibi görünmektedir, bkz. HTML5 Çapraz Tarayıcı Çoklu Dolguları :

Burada tüm şimleri, yedekleri ve çoklu dolguları topluyoruz ...

Ya da es5-shim projesi var.

Mevcut projemde bunlardan bazılarını kullanıyoruz ve hepsini aynı dizine yapıştırmak istiyorum. Peki, bu dizine ne demeliyim --- shims, veya polyfills?


6
reopen: Sanırım "bu dizine ne demeliyim" görüş tabanlı olabilir, ama gerçekten sorunun daha geniş bağlamı verilmez - ne de bu sorunun en önemli yönü değildir. Buradaki tüm cevaplar hemfikir görünüyor ve gerçeklerin, referansların ve spesifik uzmanlığın önemli ölçüde kullanımı var.
nobar

Yanıtlar:


386
  • Bir dolgu , bir API çağrısına müdahale eden ve bir soyutlama katmanı sağlayan herhangi bir kod parçasıdır. Bir web uygulaması veya HTML5 / CSS3 ile sınırlı değildir.

  • Bir polyfill bir olan şim tipi , modern HTML5 ile güçlendirmeler eski tarayıcıları / CSS3 genellikle JavaScript veya Flash kullanarak özellikleri olduğunu.

Sorunuzu yanıtlayarak, shimsdizini genel tutmak istiyorsanız dizininizi arayın .


234

layner

Adaptör desenine aşina iseniz, bir şimin ne olduğunu bilirsiniz. Shims, API çağrılarını engeller ve arayan ile hedef arasında soyut bir katman oluşturur. Tipik olarak şimler geriye dönük uyumluluk için kullanılır. Örneğin es5- shim npm paketi ECMAScript 5 (ES5) sözdizimini yazmanıza ve tarayıcının ES5 çalıştırıp çalıştırmadığına bakmanıza izin vermeyecektir. Date.now örnek olarak alın . Bu, ES5'teki yeni bir işlevdir; burada ES3'teki sözdizimi yeni Date (). GetTime () olur . Eğer kullanırsanız ES5-şim yazabilir Date.now ve desteklerin çalışan olduğunuz tarayıcı ES5 eğer sadece çalışacaktır. Ancak, tarayıcı çalışıyorsa ES3 motoru es5- shim Date.now çağrısını keser.ve bunun yerine yeni Date (). getTime () döndürün . Bu müdahaleye shimming denir. Es5-shim'in ilgili kaynak kodu şuna benzer:

if (!Date.now) {
    Date.now = function now() {
        return new Date().getTime();
    };
}

polyfill

Çoklu doldurma gerçekten sadece shimming'un özel bir versiyonudur. Polyfill, bir API'de eksik özelliklerin uygulanmasıyla ilgilidir, ancak bir şim, özelliklerin düzeltilmesi ile ilgili olarak eksik özelliklerin uygulanmasıyla ilgili olmayabilir. Bunların aşırı belirsiz göründüğünü biliyorum, ancak şimler daha geniş bir terim olarak kullanıldığında, daha eski tarayıcılar için geriye dönük uyumluluk sağlayan şimleri tanımlamak için çok dolgu kullanılır. Şimler eski günahları örtmek için şimler kullanılırken, gelecekteki geliştirmeleri zaman içinde geri getirmek için çoklu dolgular kullanılır. Örnek olarak IE7'de sessionStorage için destek yoktur, ancak sessionstorage npm paketindeki çoklu dolgu, bu özelliği IE7'de (ve daha eski) pencerenin name özelliğinde veri depolamak veya çerezler kullanmak gibi teknikler kullanarak ekler.


107
Şimler eski günahları örtmek için şimler kullanılırken, gelecekteki geliştirmeleri zaman içinde geri getirmek için çoklu dolgular kullanılır. Bu benim için her şeyi özetliyor. Açık bir açıklama için teşekkürler.
JohnnyQ

Bu cevap faydalı, teşekkürler. Ama bana öyle geliyor ki, iki terim genellikle es5-shim dahil olmak üzere web'de tam olarak kullanılmıyor. Bence es5-shim tanımınıza göre bir şim ve çoklu dolgu karışımı.
Matt Browne

WOW -> Yani eski günahları örtmek için şimler kullanılırken, gelecekteki geliştirmeleri zamanında geri getirmek için çoklu dolgular kullanılır. <- Çok teşekkürler!
zeplin

3
Tarih Örneği bana bir Çoklu Dolgu gibi görünüyor. Neden bir Polyfill olduğunu düşünüyorum? Çünkü Date.now yerel bir çağrıdır. Bir Çoklu Dolgu, bu özelliği Tarayıcı için sorunsuz olan aynı API ile ekler. Bir şim gibi yeni bir API ile geliyor: Yanlışsam MyShim.Date.now(); lütfen beni düzeltin.
TatzyXY

99

Anladığım kadarı ile:

Çoklu doldurma, belirli bir "beklenen" API'nin eksik olup olmadığını tespit eden ve manuel olarak uygulayan koddur. Örneğin

if (!Function.prototype.bind) { Function.prototype.bind = ...; }

Bir şim, mevcut API çağrılarını engelleyen ve farklı davranışlar uygulayan koddur. Buradaki fikir, belirli API'leri farklı ortamlarda normalleştirmektir. Dolayısıyla, iki tarayıcı aynı API'yı farklı uygularsa, bu tarayıcılardan birinde API çağrılarını kesebilir ve davranışının diğer tarayıcıyla hizalanmasını sağlayabilirsiniz. Veya, bir tarayıcının API'larından birinde bir hata varsa, bu API'ya yapılan çağrıları tekrar arayabilir ve hatayı atlayabilirsiniz.


66

Axel Rauschmayer'dan Konuşan JavaScript kitabından alıntı :

  • Şim, yalnızca bu ortamın araçlarını kullanarak eski bir ortama yeni bir API getiren bir kitaplıktır.
  • Çoklu doldurma, bir tarayıcı API'sı için bir dolgudur. Genellikle bir tarayıcının bir API'yi destekleyip desteklemediğini kontrol eder. Yoksa, çoklu dolgu kendi uygulamasını yükler. Bu, her iki durumda da API'yi kullanmanızı sağlar. Poli dolgu terimi bir ev geliştirme ürününden gelir; Remy Sharp'a göre :

    Polyfilla, ABD'de Spackling Paste olarak bilinen bir İngiliz ürünüdür. Bunu göz önünde bulundurarak: tarayıcıları içinde çatlak olan bir duvar olarak düşünün. Bu [çoklu dolgular] çatlakları düzeltmeye yardımcı olur ve bize çalışmak için güzel bir tarayıcı duvarı verir.


9

Shim. Şim, yalnızca bu ortamın araçlarını kullanarak eski bir ortama yeni bir API getiren bir kitaplıktır.

Polyfill. Ekim 2010'da, Remy Sharp [çoklu dolum ”terimini [Rick Waldron üzerinden] yazdı:

Bir çoklu dolgu, geliştiricinin tarayıcının yerel olarak sağlamasını beklediğiniz teknolojiyi sağlayan bir kod (veya eklenti) parçasıdır. İsterseniz API ortamını düzleştirin.


8

Birkaç yıl öncesine kadar bu konuyu anlatan fantastik bir makale:

Çoklu Dolgu Nedir?

Makalede (2) basitçe zıttır:

Shim: ekleyebileceğiniz (yani JavaScript) bazı işlevleri düzelten bir kod parçası , ancak çoğunlukla kendi API'sine sahip olacaktır .

Polyfill: bırakabileceğiniz bir şey (yani JavaScript) ve aksi takdirde desteklenmeyen mevcut tarayıcı API'larını taklit etmek için sessizce çalışır .


1
Sanırım bu hem ortak kullanımın hem de Remy Sharp'ın bağlantı kurduğunuz blog yazısında aslında söylediklerinin yanıltıcı bir temsilidir. Shim en sık eşanlamlı olarak kullanıldığını Polyfill günümüzde (özellikle bkz ES5-şim ve ES6-şim ) ve Remy söyleyerek diğerlerinden farklı ona özel bir API kelime 'pul' ima (kıyasla shim.gif). Kelimelerin bu şekilde kullanılmasını pek dikte etmiyor ve "bana" diyerek, kullanımının evrensel olmadığını açıkça kabul ediyor.
Mark Amery
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.