shim和polyfill之间的区别是什么

在 javascript 的世界里,我们经常会遇到shim和polyfill两个术语,那么它们之间到底有什么区别呢?

Shim
Shim 通常是一个代码库,它给旧环境(并不一定特指浏览器环境)带来的往往是全新的 api,而且这些 api 只能在这个环境当中运行。

Polyfill
在 2010年10月,Remy Sharp在他的博客中对 polyfill 做了如下定义:

Polyfill 就是一系列的代码或者插件,它为开发者提供的技术特性,都是希望浏览器本就应该原生支持的,并且抹平了 api 之间的使用差异。

因此,一个 polyfill 就是一个浏览器层面的 shim。典型地像检测浏览器是否支持某一个 api,如果不支持就加载一个 polyfill,这样就可以让开发者在任何情况下无缝的使用那些 api 了。Polyfill 这个术语其实来自于一款家居装修产品:

Polyfilla 是英国生产的一种用来抹泥修墙的膏状物,它因能够很好地修复墙壁上的裂纹而被人们所熟知。所以,试想浏览器就相当于一堵有裂纹的墙,这些 polyfill 能够抹平墙壁上的裂纹,也就是浏览器之间的 api 差异,使开发者能够正常的在浏览器上使用这些技术特性。

举两个非常著名的例子:

一个是爱尔兰的 Paul 发布的 html5 跨浏览器 polyfills,里面收集了所有能够给浏览器植入 html5 功能的 polyfills 和 shims。

另一个是 es5-shim,它在 ES3 引擎的基础上对 ES5 的很多特性进行了改进,因为纯粹是语言相关的,所以很多在 nodejs 上才能使用的特性在浏览器端同样能够运行。

原文链接:http://2ality.com/2011/12/shim-vs-polyfill.html

一点其它的解释

shim:楔子,垫子polyfill:填充物
在js中:

  • shim一般指一些做兼容性的库,用来弥补旧浏览器对新特性支持的不足。都会预先加载,强调新旧浏览器使用同一套代码。
  • pollfill也会对浏览器的不足做补充,但一般都会用语句来判断此浏览器是否支持此特性,然后通过动态引入script标签的方法来加载。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值