咱们入门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, 阅后即瞎吧~