兔宝宝游戏网 游戏攻略 手游攻略 polyfill是什么意思,shim和polyfill有什么区别

polyfill是什么意思,shim和polyfill有什么区别

时间:2025-03-11 16:16:08 作者:兔宝宝游戏网 浏览:26

polyfills,最近不少朋友在找shim和polyfill有什么区别的相关介绍,兔宝宝游戏网给大家详细的介绍一下,希望对大家有帮助。

1、polyfill是什么意思:

在JavaScript的世界里,有两个词经常被提到,shim和polyfill.它们指的都是什么,又有什么区别?
一个shim是一个库,它将一个新的API引入到一个旧的环境中,而且仅靠旧环境中已有的手段实现
一个polyfill就是一个用在浏览器API上的shim.我们通常的做法是先检查当前浏览器是否支持某个API,如果不支持的话就加载对应的polyfill.然后新旧浏览器就都可以使用这个API了.术语polyfill来自于一个家装产品Polyfilla:

Polyfilla是一个英国产品,在美国称之为Spackling Paste(译者注:刮墙的,在中国称为腻子).记住这一点就行:把旧的浏览器想象成为一面有了裂缝的墙.这些[polyfills]会帮助我们把这面墙的裂缝抹平,还我们一个更好的光滑的墙壁(浏览器)
Paul Irish发布过一个Polyfills的总结页面“HTML5 Cross Browser Polyfills”.es5-shim是一个shim(而不是polyfill)的例子,它在ECMAScript 3的引擎上实现了ECMAScript 5的新特性,而且在Node.js上和在浏览器上有完全相同的表现(译者注:因为它能在Node.js上使用,不光浏览器上,所以它不是polyfill).

2、如何使用js-polyfills:

Polyfills是一种保证使用现代代码的绝佳办法,同时还能支持旧版浏览器。但是目前polyfills使用起来很困难,因此我们开发了一种全新的服务以便简化其使用方法。在此,邀请读者使用并改进它。

挑战

下面是我们正在尝试解决的一些问题:

  • 开发者对哪些特性需要使用polyfill不是很清楚。例如你在某个旧版本的IE浏览器(因为你有很大数量的用户还在使用它)中载入网站,发现网站不工作,你不得不慢慢调试来搞清楚到底是哪个特性导致了这个问题。有时候问题很清楚,但大多时候并非如此,尤其是旧版浏览器往往缺少好的开发者工具的时候。

  • 针对每个特性都有很多polyfill可供选择。很难确定哪一个能最忠实地模拟缺少的特性。

  • 有一些大的polyfill捆绑着很多你不需要的polyfill,例如ES6,它全面覆盖了一系列的特性集。为了解决一个简单的问题而向浏览器植入所有的这些代码其实是不必要的。

  • 较新版本的浏览器不需要polyfill,但一般来说polyfill可用于所有种类的浏览器。虽然这是为了提高与旧版浏览器的兼容性,但这也降低了新版浏览器的性能。我们不愿意做出这种妥协。我们更愿意在原本不具备某个特性的浏览器上使用polyfill。

  • 我们的解决办法:以polyfill为服务

    为了解决这些问题,我们开发了polyfill服务。这有点像是验光师先对你的眼睛验光检查,然后针对你的视力问题配置眼镜。我们将对浏览器做同样的事情。下面解释它是如何工作的:

  • 开发人员在他们的页面中插入一个脚本标记作为导入polyfill服务的端点。

  • 该服务分析浏览器的user-agent标头和必需特性列表(或是使用一个默认的可使用polyfill服务的列表),然后搭建浏览器所需的polyfill列表。

  • 按照正确的依赖顺序表定制polyfill。

  • 通过CDN 压缩服务包并提供服务(对此我们衷心感谢Fastly的支持)。

  • 我们真的需要这个解决办法吗?你可以这样思考:Modernizris是一个大型的特性检测包,所有对它的合理使用都得益于自定义的安装配置,但是很大数量的Modernizris用户仅仅使用了它的默认安装,这常常是来自于 cdnjs.com 或是html5boilerplate 的某个部件。但是,如果不使用Modernizris的特性检测功能,那你为什么安装这个工具呢?可能你误解了库文件的功能,单纯地以为Modernizris会“修补东西”?不得不承认,第一次听到这个名字的时候笔者正是这样想的,以至于后来发现Modernizris不但没有起到作用,反而拖了现代浏览器的后腿,笔者感到有些失望。

    然而,Polyfill服务却是真正起到了作用。不想花时间去深入了解旧版本浏览器缺点的你一点儿错也没有。让别人先弄明白问题所在,然后我们在不需要了解细节的情况下就能直接受益。

    如何使用

    最简单的使用情况是:


  • 这包含了我们默认的 polyfill设置。这个默认设置是我们人工挑选的一个特性列表,我们认为这个列表中所包含的特性对于现代网络开发来说不可或缺,而且相对应的polyfill相当小且十分精确。如果你想指定添加某个polyfill特性,只需要这么做:




  • 如果有必要在解析自己的代码之前加载polyfill的话,你可以移除async和defer属性,或是使用一个脚本加载器(不需要任何polyfill的加载器!)

    测试与文档特性支持

    我们所支持特性的完整表格在特性矩阵中。为了搭建这个网格,我们使用了Sauce Lab的自动测试平台,它截获了polyfill在每个浏览器中的测试,然后记录结果。

    User-Agent 分析? 你确定?

    是的,我们确定。下面是为什么UA分析要比特性检测好的原因:

  • 在一些情形中,针对同一特性我们有多个polyfill可供选择,这是因为一些浏览器提供非顺从实施方式,因此只需要你敲打成型即可,而其他浏览器则没有提供任何的实施。但若是有UA检测,你能够选择相应的polyfill。

  • 有了UA检测,第一个HTTP请求就能直接由polyfill代码应答。如果我们使用了特性检测,第一个请求将会为特性检测代码服务,而第二个请求则需要用于获取特定的polyfill。

  • 几乎所有的大型网站都使用UA检测。这并不是说与之相关的特征就是不好的。显然,好的UA规则要比差劲的UA规则更难编写。而且我们并没有排除借助特性检测使用该服务的可能。

总结:以上内容就是针对polyfill是什么意思,shim和polyfill有什么区别的详细介绍,大家可以参考一下。

标题:polyfill是什么意思,shim和polyfill有什么区别
链接:http://www.qzj2.com/article/43778.html
版权:文章转载自网络,如有侵权,请联系删除!
资讯推荐
更多
海龟汤题目和答案全套恐怖高难度,细思极恐的冷门海龟汤

海龟汤题目和答案全套恐怖高难度,细思极恐的冷门海龟汤,细思极恐海龟汤大全及答案汤面:有兄弟三人,感情非常好

2025-03-11
gta5武器秘籍大全(完整版)无限子弹,gta5的武器秘籍有哪些

gta5武器秘籍大全,完整版无限子弹,gta5的武器秘籍有哪些,gta5武器全满代码是:IFWEREARCHMAN。其他秘籍:一、武

2025-03-11
梦幻西游义绝墨魂笔3x攻略(神器义绝墨魂笔之踪攻略)

梦幻西游义绝墨魂笔3x攻略,可以这么说,这个神器是3X神器挑战里最难刷的了,对于没刷过的朋友来说更难,那么怎么刷

2025-03-11
公交车里抓着摇曳的手环诗情,清晨时见雾青草沾雨露是什么歌

公交车里抓着摇曳的手环诗情,清晨时见雾青草沾雨露是什么歌,是马良的《醒着醉》里的歌词。醒着醉作词:马良作

2025-03-11