1. 程式人生 > >shim和polyfill有什麼區別

shim和polyfill有什麼區別

一個shim就是一個庫,它將一個新的API引入到一箇舊的環境中,而且僅靠舊環境中已有的手段實現。

關於polyfill,據說來自於Polyfilla,Polyfilla是一個英國產品,在美國稱之為Spackling Paste(譯者注:刮牆的,在中國稱為膩子),把舊的瀏覽器想象成為一面有了裂縫的牆,這些polyfill會幫助我們把這面牆的裂縫抹平。

其實一個polyfill的意思就是,比如開發者想要一個格式化時間的函式,然後現有的api都沒有,於是作者自創一個stringDate的方法,那麼這個方法就成為一個polyfill。

擴充套件資料:

polyfill 是 shim 的一種。

shim 是將不同 api 封裝成一種,比如 jQuery 的 $.ajax 封裝了 XMLHttpRequest 和 IE 用 ActiveXObject 方式建立 xhr 物件;

polyfill 特指 shim 成的 api 是遵循標準的,其典型做法是在IE瀏覽器中增加window.XMLHttpRequest ,內部實現使用 ActiveXObject。

在實際中為了方便做對比,會特指 shim 的 api 不是遵循標準的,而是自己設計的。

在JavaScript的世界裡,有兩個詞經常被提到,shim和polyfill.它們指的都是什麼,又有什麼區別?
一個shim是一個庫,它將一個新的API引入到一箇舊的環境中,而且僅靠舊環境中已有的手段實現
一個polyfill就是一個用在瀏覽器API上的shim.我們通常的做法是先檢查當前瀏覽器是否支援某個API,如果不支援的話就載入對應的polyfill.然後新舊瀏覽器就都可以使用這個API了.術語polyfill來自於一個家裝產品Polyfilla:

Polyfilla是一個英國產品,在美國稱之為Spackling Paste(譯者注:刮牆的,在中國稱為膩子).記住這一點就行:把舊的瀏覽器想象成為一面有了裂縫的牆.這些[polyfills]會幫助我們把這面牆的裂縫抹平,還我們一個更好的光滑的牆壁(瀏覽器)