shim VS polyfill

在JavaScript中有兩個(gè)詞經(jīng)常被提到:shim和polyfill特漩。它們指的都是什么黔攒,又有什么區(qū)別?

shim

一個(gè)shim是一個(gè)庫匆赃,它將一系列新的师郑、標(biāo)準(zhǔn)的API引入到一個(gè)舊的環(huán)境中,而且僅靠舊環(huán)境中已有的手段實(shí)現(xiàn)舊版兼容漫蛔。
例如我們經(jīng)常聽到的es5-shim嗜愈,它是在es3的引擎上實(shí)現(xiàn)了es5的特性,但用到的都是es3的技術(shù)莽龟,而且在Node.js上和在瀏覽器上有完全相同的表現(xiàn)蠕嫁,所以它是shim。

polyfill

polyfill是解決跨瀏覽器API兼容性問題的shim毯盈,相當(dāng)于一段代碼剃毒。
我們通常的做法是先檢查當(dāng)前瀏覽器是否支持某個(gè)API,如果不支持的話就加載對應(yīng)的polyfill搂赋,然后新舊瀏覽器就都可以使用這個(gè)API了赘阀。


比較有趣的是,polyfill這個(gè)詞源于英國的填強(qiáng)面料脑奠,中文俗稱"膩?zhàn)?”基公,把舊的瀏覽器想象成為一面有了裂縫的墻,而膩?zhàn)涌梢园堰@面墻的裂縫抹平宋欺,還我們一個(gè)光滑的"瀏覽器"墻面轰豆。

Remy在自己2010年10月8日的博客中介紹了這個(gè)新詞的來源:What is a Polyfill?
他給出的定義是:

A polyfill, or polyfiller, is a piece of code (or plugin) that provides the technology that you, the developer, expect the browser to provide natively. Flattening the API landscape if you will.(一段代碼或插件迄靠,可以讓開發(fā)人員使用應(yīng)有的技術(shù)秒咨,就像瀏覽器原生提供該功能一樣。換句話說掌挚,它能幫你抹平API之墻雨席。)

文中也提到了Paul的定義:

A shim that mimics a future API providing fallback functionality to older browsers.(一種模仿未來API并為舊瀏覽器提供后備功能的“襯墊”)

怎樣區(qū)分polyfill和shim?

  • 如果瀏覽器X支持標(biāo)準(zhǔn)規(guī)定的功能吠式,那么polyfill可以讓瀏覽器Y的行為與瀏覽器X一樣陡厘。
  • 而前面所說的es5-shim在es3的引擎上實(shí)現(xiàn)了es5的特性,但用到的都是es3的技術(shù)特占,而且在Node.js上和在瀏覽器上有完全相同的表現(xiàn)糙置,所以它是shim。

比如是目,jQuery不是polyfill谤饭,但下面這段代碼是:

// 首先包含jQuery
if (!document.querySelectorAll) {
  Element.prototype.querySelectorAll = function (q) {
    return $(this).find(q).get();
  };

  // document對象不是Element對象的后代,因此手工重寫
  document.querySelectorAll = Element.prototype.querySelectorAll;
}

參考資料

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市揉抵,隨后出現(xiàn)的幾起案子亡容,更是在濱河造成了極大的恐慌,老刑警劉巖冤今,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闺兢,死亡現(xiàn)場離奇詭異,居然都是意外死亡戏罢,警方通過查閱死者的電腦和手機(jī)屋谭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來龟糕,“玉大人桐磁,你說我怎么就攤上這事◆嬲海” “怎么了所意?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵淮逊,是天一觀的道長催首。 經(jīng)常有香客問我,道長泄鹏,這世上最難降的妖魔是什么郎任? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮备籽,結(jié)果婚禮上舶治,老公的妹妹穿的比我還像新娘。我一直安慰自己车猬,他們只是感情好霉猛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著珠闰,像睡著了一般惜浅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上伏嗜,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天坛悉,我揣著相機(jī)與錄音,去河邊找鬼承绸。 笑死裸影,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的军熏。 我是一名探鬼主播轩猩,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了均践?” 一聲冷哼從身側(cè)響起画饥,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎浊猾,沒想到半個(gè)月后抖甘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡葫慎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年衔彻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片偷办。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡艰额,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出椒涯,到底是詐尸還是另有隱情柄沮,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布废岂,位于F島的核電站祖搓,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏湖苞。R本人自食惡果不足惜拯欧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望财骨。 院中可真熱鬧镐作,春花似錦、人聲如沸隆箩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捌臊。三九已至杨蛋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間娃属,已是汗流浹背六荒。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留矾端,地道東北人掏击。 一個(gè)月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像秩铆,于是被迫代替她去往敵國和親砚亭。 傳聞我的和親對象是個(gè)殘疾皇子灯变,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 以前對瀏覽器兼容性問題只是大概知道一些點(diǎn),沒想到這次真正著手去做的時(shí)候捅膘,還是碰到了很多問題添祸。剛開始的時(shí)候一邊解決問...
    沮溺閱讀 27,817評論 2 11
  • 如何去除inline-block的間隙 描述:在html中,如果有幾個(gè)inline-block的元素并排出現(xiàn)寻仗,同時(shí)...
    居客俠閱讀 472評論 0 0
  • 因?yàn)槲蚁矚g寫 從初中老師說刃泌,“寫日記可以記錄生活,可以提升寫作能力”開始署尤,我就一直有記錄想法的習(xí)慣耙替。雖然有些斷斷續(xù)...
    原圓閱讀 182評論 0 4
  • 大寶剛出生的兩年,婆婆的照顧可謂是無微不至曹体,幾乎24小時(shí)捧在手心俗扇。看到小區(qū)里有婆婆媽媽們跳舞箕别,也就是艷羨艷羨铜幽,給她...
    微乴問閱讀 224評論 0 0
  • 身體管理訓(xùn)練營今天是第五天了。由于一整天都在忙串稀,群里就沒有細(xì)看除抛,晚上在整理大家日記一一回復(fù)指導(dǎo)中,得知有一名群員放...
    文姐28101閱讀 172評論 0 0