咱們入門JavaScript的時候都寫過polyfill: 好比手寫一個彈窗, 手動模擬實現一個表格, 這些魔力的對象都是瀏覽器原生支持的, 雖然當我成爲JS專家以後再也沒造過輪子, 可是最近才發現咱們以前寫的那麼多輪子其實都叫polyfill: 其實就是爲了那些沒有實現原生功能的瀏覽器服務的, (主要是IE) 相信沒有IE瀏覽器的話也許就不存在polyfilll這個專業名詞了.......html
polyfill或polyfiller是一段代碼(或插件),它提供了開發人員指望瀏覽器本機提供的技術。若是願意,能夠展平API環境。前端
我坐在咖啡店(就像你同樣)覺得我想要一個單詞,意思是「若是瀏覽器沒有它,則使用JavaScript(或Flash或其餘)複製API原生地」。git
對我來講,Shim意味着你能夠添加的一段代碼能夠修復某些功能,但它一般會擁有本身的API。我想要一些你能夠投入的東西,它會默默地工做(記住舊的shim.gif?須要你實際插入圖像來修復空td
單元格 - 我想要一些能自動完成這項工做的東西)。github
我知道我所追求的不是漸進加強,由於我正在努力的基線須要JavaScript和最新技術。因此現有的術語對我不起做用。canvas
我也知道這不是優雅的降級,由於沒有原生功能而沒有JavaScript(假設你的polyfill使用JavaScript),它根本不起做用。瀏覽器
因此我想要一個簡單易懂的詞,而且能夠想象出這件事會作什麼的模糊概念。Polyfill只是來找我,但它符合個人要求。Poly意味着它可使用任何數量的技術來解決 - 它不只限於使用JavaScript完成,填充將填補瀏覽器所需技術的漏洞。它也沒有暗示「舊瀏覽器」(由於咱們也須要填充新的瀏覽器)。前端框架
一樣對我來講,Polyfilla產品(在美國膩子)是一種糊狀物,能夠放入牆壁以覆蓋裂縫和孔洞。我真的很喜歡可視化咱們如何修復瀏覽器的想法。一旦牆壁平坦,您能夠根據本身的喜愛進行繪畫,或者根據您的心臟內容進行壁紙處理。session
我獲得了一些反饋意見「應該改變這個詞」,但更多的是當時的社區須要一個詞,好比咱們須要Ajax,HTML5,Web 2.0 - 這就是咱們的想法。不管這個詞是否完美契合,它都證實它有腿,開發人員和設計師理解這些概念。框架
我故意歷來沒有把這個術語推到那裏,我只是將它放在幾個關鍵的地方(最值得注意的是書),我認爲這是+保羅愛爾蘭人在幾個月後(不少?)發表演講時直接引用術語polyfill ,當這個術語確實獲得了大量的曝光時(我認爲這也有助於添加Modernizr HTML5墊片和polyfill頁面)。測試
模擬將來API的墊片,爲舊版瀏覽器提供後備功能。
這是一個例子:sessionStorage
在全部最新的瀏覽器(IE8及更高版本)中均可用,但不在IE7及更低版本中。
polyfill可用於插入對未提供的舊瀏覽器的支持sessionStorage
。
如今有了polyfiller,做爲開發人員,我能夠依賴於使用Web Storage API(用於會話),而沒必要在個人代碼或fork中進行測試以處理不一樣的狀況。
另外一個例子是在IE中提供畫布支持。這其實是能夠看到聚合物部分的地方。若是沒有本機畫布,咱們能夠使用Silverlight提供畫布支持。若是Silverlight不可用,咱們可使用excanvas下拉到使用VML (請注意,excanvas實際上也包含一個Silverlight橋,我但願它首先嚐試它)。使用這兩個腳本爲開發人員提供(至關)可靠的畫布備份,若是它不是瀏覽器中的本機。
在研發期間,我一直在尋找填充缺失API的墊片和技術,但它們並非很是漸進的加強。我想要一個表明這個想法的單詞,有一個「東西」能夠插入瀏覽器,但不是漸進式加強,但也不是優雅的降級。
Polyfilling彷佛符合個人想法(在我腦海中!)。
Ployfilla是一種英國產品,在美國被稱爲Spackling Paste。考慮到這一點:將瀏覽器視爲一個有裂縫的牆。這些polyfills有助於消除裂縫,併爲咱們提供一個漂亮的光滑牆壁瀏覽器。
最近在JS Conf,Paul Irish發佈了一個polyfill和shims的列表 - 一個很棒的資源列表,可讓開發人員免受舊瀏覽器的痛苦。
看起來polyfilling有一些腿,因此讓咱們開始使用它們,並拖動舊的(甚至更新的)瀏覽器達到咱們的指望。
polyfill是一個歷史產品, 在前端框架突飛猛進的時代, 不多有人在造輪子, 瀏覽器的標準庫也是突飛猛進, Github等知名網站已經宣佈放棄IE瀏覽器 ,這咋額養一個環境下, 咱們不多在討論polyfill, 閱後即瞎吧~