zoukankan      html  css  js  c++  java
  • What is a Polyfill?(译)

    原文地址:What is a Polyfill?

    polyfill 或者说polyfiller是一段代码(或者插件),它可以提供给开发者们希望浏览器原生支持的技术。实现你想要的任何api。

    是从哪里创造polyfill这个词的呢?

    2009年的时候,我正在编写Introducing HTML5。我坐在咖啡店(就像你们那样)思考一个词语,它的意思是'如果浏览器本身并没有这个api,使用JavaScript(或Flash或其他什么)再造一个API'。

    对于我来说,Shim的意思是你可以添加一段代码,它可以修复完善一些功能,但是大多数情况下它拥有自己的api。我想要一些可以插入的东西,它会自己默默的工作(还记得旧的shim.gif吗?实际上它要求你插入一张图片来填充空的td单元格 - 我想要一些能自动为我工作的东西)。

    我知道我要做的不是逐步升级,因为我的工作是以要求使用JavaScript和最新技术为基准的,因此目前这个术语还无法为我工作。

    我知道这也不是正常的降级,因为如果没有原生共嗯那个和没有Javascript(假设使用Javascript作为polyfill)的的话,它根本无法工作。

    因此我想要一个简单易懂的词,并且可以大概想像出它能干什么。我只是稍微想到Polyfill这个词,但是它符合我的要求。Poly的意思是它可以使用多种技术来解决问题 - 但是它不限于使用JavaScript,并且fill的寓意可以是填补浏览器该技术的空白。它并不意味着"旧浏览器"(因为我们在新的浏览器中也需要polyfill)。

    同样对我来说,Polyfilla(在美国被称为Spackling)这个产品是一种糊剂,可以粘贴到墙壁上以覆盖裂缝和孔洞。我非常喜欢用可视化的方式来说明我们是如何完善浏览器的。当墙壁填平之后,你可以随意绘画,也可以贴上满意的墙纸。

    我收到一些反馈说"这个词语需要修改",但是当时的社区更多的是需要一些名词,就像我们需要Ajax、HTML5、Web 2.0一样 - 这些打消了我们的想法。不管这些名词是否完美适合,都已证明它具有优势,并且开发者和设计师都能理解这些概念。

    我从来没有故意把它放在那,我只是把它放在了几个关键的位置(书中最值得注意的地方)。我想这是在几个月后(很多?)+Paul Irish发表演讲的时候直接提到了这个名词,这才是这个术语大量曝光的时间(我认为增加Modernizr HTML5 shims 和 polyfill page也有帮助)。

    定义

    Alex Sexton将Polyfilling归类为一种逐步升级的方式。我认为总结的很好.

    Paul将它定义为:

    一种模拟未来Api的填补,为旧浏览器提供后备功能.
    

    一些例子

    这里有一个示例:sessionStorage在所有最新的浏览器(IE8及更高版本)中可用,但在IE7及以下版本中不可用。

    对于不提供sessionStorage的较旧的浏览器,可以使用polyfill [插件支持](http://gist.github.com/350433)。

    另一个例子是在IE中提供canvas支持。这确实是可以看到poly部分的地方。如果没有原生的canvas,我们可以提供canvas support using Silverlight。如果Silverlight不可用,我们可以利用excanvas(请注意,excanvas实际上也包含了期望的的Silver桥梁)来使用VML。如果浏览器中没有原生支持,这两个脚本可以为开发者提供(相当)可靠的canvas备份。

    它的起源和未来
    今年年初,我与Bruce Lawson合作编写Introducing HTML5 。在研发期间,我一直在研究shims和填充缺少的API的技术。但是他们不是十分明显的逐步升级。我想用一个词来表达这个想法,即有一种东西可以插入进浏览器,但不是逐步升级也不是正常降级。

    Polyfill似乎很合适我想要表达的(在我的脑海中!)。

    Ployfilla是英国的一种产品,在美国被称为Spackling Paste。牢记这一点:将浏览器视为一堵裂缝。这些polyfill有助于消除裂缝,并为我们提供一道光滑的浏览器墙。

    我在六月的HTML5 talk中暂时使用了新术语,即[ThinkVitamin](http://thinkvitamin.com/online-conferences/html5/),但是我不想这样做,因为担心尝试太难而不推出新术语。但是,我确实将其介绍给HTML5简介,我只能假定它近期已经发生了。

    最近在[JS Conf](http://jsconf.us/2010/),[Paul Irish](http://paulirish.com/)发布了[polyfills和shims列表](http://github.com / Modernizr / Modernizr / wiki / HTML5-Cross-browser-Polyfills)- 很棒的资源列表,可为开发人员减轻使用旧版浏览器的痛苦。

    看起来polyfilling有一些优势,所以让我们开始使用它们,并将旧的(甚至是更新的)浏览器提高到我们期望的水平。

  • 相关阅读:
    9.11 eventbus
    9.10,,,实现new instanceof apply call 高阶函数,偏函数,柯里化
    9.9 promise实现 写完了传到gitee上面了,这里这个不完整
    9.5cors配置代码
    9.5 jsonp 实现
    9.5 http tcp https总结
    9.3 es6 class一部分 and es5 class 发布订阅
    8.30 cookie session token jwt
    8.30vue响应式原理
    warning: LF will be replaced by CRLF in renard-wx/project.config.json. The file will have its original line endings in your working directory
  • 原文地址:https://www.cnblogs.com/xingguozhiming/p/13430877.html
Copyright © 2011-2022 走看看