我们入门JavaScript的时候都写过polyfill: 比如手写一个弹窗, 手动模拟实现一个表格, 这些魔力的对象都是浏览器原生支持的, 虽然当我成为JS专家之后再也没造过轮子, 但是最近才发现我们之前写的那么多轮子其实都叫polyfill: 其实就是为了那些没有实现原生功能的浏览器服务的, (主要是IE) 相信没有IE浏览器的话也许就不存在polyfilll这个专业名词了.......

polyfill或polyfiller是一段代码(或插件),它提供了开发人员期望浏览器本机提供的技术。如果愿意,可以展平API环境。

What the Hack is Polyfill ??

polyfill来自/创造该术语的地方

我坐在咖啡店(就像你一样)以为我想要一个单词,意思是“如果浏览器没有它,则使用JavaScript(或Flash或其他)复制API原生地”。

对我来说,Shim意味着你可以添加的一段代码可以修复某些功能,但它通常会拥有自己的API。我想要一些你可以投入的东西,它会默默地工作(记住旧的shim.gif?需要你实际插入图像来修复空td单元格 - 我想要一些能自动完成这项工作的东西)。

我知道我所追求的不是渐进增强,因为我正在努力的基线需要JavaScript和最新技术。所以现有的术语对我不起作用。

我也知道这不是优雅的降级,因为没有原生功能而没有JavaScript(假设你的polyfill使用JavaScript),它根本不起作用。

所以我想要一个简单易懂的词,并且可以想象出这件事会做什么的模糊概念。Polyfill只是来找我,但它符合我的要求。Poly意味着它可以使用任何数量的技术来解决 - 它不仅限于使用JavaScript完成,填充将填补浏览器所需技术的漏洞。它也没有暗示“旧浏览器”(因为我们也需要填充新的浏览器)。

同样对我来说,Polyfilla产品(在美国腻子)是一种糊状物,可以放入墙壁以覆盖裂缝和孔洞。我真的很喜欢可视化我们如何修复浏览器的想法。一旦墙壁平坦,您可以根据自己的喜好进行绘画,或者根据您的心脏内容进行壁纸处理。

我得到了一些反馈意见“应该改变这个词”,但更多的是当时的社区需要一个词,比如我们需要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 ConfPaul Irish发布了一个polyfill和shims列表 - 一个很棒的资源列表,可以让开发人员免受旧浏览器的痛苦。

看起来polyfilling有一些腿,所以让我们开始使用它们,并拖动旧的(甚至更新的)浏览器达到我们的期望。

polyfill是一个历史产品, 在前端框架日新月异的时代, 很少有人在造轮子, 浏览器的标准库也是日新月异, Github等知名网站已经宣布放弃IE浏览器 ,这咋额养一个环境下, 我们很少在讨论polyfill, 阅后即瞎吧~

最新文章

  1. 【笔记】MySQL查询排名
  2. PHP入门part4
  3. 关于激活Bentley软件详细步骤介绍(再补充一个)
  4. 编写unit test以及自动化测试WebDriver
  5. 解决cocopods不提示第三方库名字的方法
  6. 对于unallocated space的翻译 我想说几句话
  7. poj 2551 Ones
  8. 怎么样调试正在运行的exe?
  9. UVa1585 Score
  10. Java代码优化(转)
  11. Python识别网站验证码
  12. 诡异的php 输出缓冲
  13. Problem 2285 迷宫寻宝
  14. gethostbyname用法
  15. python 如何把小数变成百分数格式
  16. 14-03 java BigInteger类,BigDecimal类,Date类,DateFormat类,Calendar类
  17. 我的Java之旅 第七课 JAVA WEB 会话管理
  18. Kinect2.0点云数据获取
  19. dotnet core webapi 发布部署到docker的步骤
  20. WZY社区

热门文章

  1. iPhone手机屏幕的尺寸180330更新
  2. Oracle分组函数以及数据分组
  3. AME_AME审批中子元素的概念和用途(概念)
  4. Dev BarManager使用方法
  5. bug list
  6. [转载]Class-AB Amplifier 笔记
  7. 多主机共享ssh Public/Private Key
  8. 【Android】4.4 示例--列出手机上的所有联系人
  9. Spring Cloud Summary
  10. [转帖]Android平台下OpenGL初步