fbpx
Wikipedia

Polyfill (programming)

In software development, a polyfill is code that implements a feature of the development environment that does not natively support the feature. Most often, it refers to JavaScript code that implements an HTML5 or CSS web standard, either an established standard (supported by some browsers) on older browsers, or a proposed standard (not supported by any browsers) on existing browsers. Polyfills are also used in PHP and Python.[1]

Polyfills allow web developers to use an API regardless of whether or not it is supported by a browser, and usually with minimal overhead. Typically they first check if a browser supports an API, and use it if available, otherwise using their own implementation.[2][3] Polyfills themselves use other, more supported features, and thus different polyfills may be needed for different browsers. The term is also used as a verb: polyfilling is providing a polyfill for a feature.

Definition edit

The term is a neologism, coined by Remy Sharp, who required a word that meant "replicate an API using JavaScript (or Flash or whatever) if the browser doesn’t have it natively" while co-writing the book Introducing HTML5 in 2009.[4][5] Formally, "a shim is a library that brings a new API to an older environment, using only the means of that environment."[2] Polyfills exactly fit this definition; the term shim was also used for early polyfills.[6] However, to Sharp shim connoted non-transparent APIs and workarounds, such as spacer GIFs for layout, sometimes known as shim.gif, and similar terms such as progressive enhancement and graceful degradation were not appropriate, so he invented a new term.[5] The term is based on the multipurpose filling paste brand Polyfilla, a paste used to cover up cracks and holes in walls, and the meaning "fill in holes (in functionality) in many (poly-) ways." The word has since gained popularity, particularly due to its use by Paul Irish and in Modernizr documentation.[5][7]

The distinction that Sharp makes is:[4]

What makes a polyfill different from the techniques we have already, like a shim, is this: if you removed the polyfill script, your code would continue to work, without any changes required in spite of the polyfill being removed.

This distinction is not drawn by other authors.[2] At times various other distinctions are drawn between shims, polyfills, and fallbacks, but there are no generally accepted distinctions: most consider polyfills a form of shim.[8] The term polyfiller is also occasionally found.[9]

Examples edit

core-js edit

core-js[10] is one of the most popular[11] JavaScript standard library polyfill. Includes polyfills for ECMAScript up to the latest version of the standard: promises, symbols, collections, iterators, typed arrays, many other features, ECMAScript proposals, some cross-platform WHATWG / W3C features and proposals like URL. You can load only required features or use it without global namespace pollution. It can be integrated with Babel, which allows it to automatically inject required core-js modules into your code.

HTML5 Shiv edit

In IE versions prior to 9, unknown HTML elements like <section> and <nav> would be parsed as empty elements, breaking the page's nesting structure and making those elements impossible to style using CSS. One of the most widely used polyfills, html5shiv,[a] exploits another quirk of IE to work around this bug: calling document.createElement("tagname") for each of the new HTML5 elements, which causes IE to parse them correctly. It also includes basic default styling for those HTML5 elements.

-prefix-free edit

Though most polyfills target out-of-date browsers, some exist to simply push modern browsers forward a little bit more. Lea Verou's -prefix-free polyfill is such a polyfill, allowing current browsers to recognise the unprefixed versions of several CSS3 properties instead of requiring the developer to write out all the vendor prefixes. It reads the page's stylesheets and replaces any unprefixed properties with their prefixed counterparts recognised by the current browser.

Selectivizr edit

Keith Clark's Selectivizr is a popular polyfill that makes many CSS3 selectors work in IE 8 and below. It reads the page's stylesheets looking for a number of known CSS3 selectors, then uses a JavaScript selector library to query the document for elements matching those selectors, applying the styles directly to those elements. It supports several JavaScript selector libraries such as jQuery.

Flexie edit

Possibly one of the most anticipated features of CSS3, Flexible Box Layout (a.k.a. Flexbox) promises to be an extremely powerful tool for laying out interface elements. WebKit and Mozilla engines have supported a preliminary draft syntax for years. Flexie implements support for that same syntax in IE and Opera. However, the draft spec has undergone a drastic revision to a new (and much more powerful) syntax, which is not yet supported by Flexie. Flexie can still be used along with the old syntax, but the developer must make sure they include the new syntax for future browsers as well.

CSS3 PIE edit

PIE ("Progressive Internet Explorer") implements some of the most popular missing CSS3 box decoration properties in IE, including border-radius and box-shadow for IE 8 and below, and linear-gradient backgrounds for IE 9 and below. Invoked as a HTC behavior (a proprietary IE feature), it looks for the unsupported CSS3 properties on specific elements and renders those properties using VML for IE 6–8 and SVG for IE 9. Its rendering is mostly indistinguishable from native browser implementations and it handles dynamic DOM modification well.

JSON 2 edit

Douglas Crockford originally wrote json2.js as an API for reading and writing his (then up-and-coming) JSON data format. It became so widely used that browser vendors decided to implement its API natively and turn it into a de facto standard; Since json2.js now implements features native to newer browsers into older browsers, it has become a polyfill instead of a library.

es5-shim edit

ECMAScript 5th Edition ("ES5") brings some useful new scripting features, and since they're syntactically compatible with older JavaScript engines they can mostly be polyfilled by patching methods onto built-in JS objects. This es5-shim polyfill does it in two parts: es5-shim.js contains those methods that can be fully polyfilled, and es5-sham.js contains partial implementations of the other methods which rely too much on the underlying engine to work accurately.

FlashCanvas edit

FlashCanvas is an implementation of the HTML5 Canvas API using an Adobe Flash plug-in. A rare commercial polyfill, it comes in a paid version, as well as a free version, which lacks a few advanced features like shadows.

MediaElement.js edit

John Dyer's MediaElement.js polyfills support for <video> and <audio> elements, including the HTML5 MediaElement API, in older browsers using Flash or Silverlight plug-ins. It also provides an optional media player UI for those elements, which is consistent across all browsers.

BrowserID edit

Authentication protocol proposed by Mozilla, failed to gain traction.[12]

Webshims Lib edit

Alexander Farkas's Webshims Lib aggregates many other polyfills together into a single package and conditionally loads only those needed by the visiting browser.

Hyphenopoly.js edit

Hyphenopoly.js enables automatic hyphenation if it is not already supported by the browser for the respective document language.[13]

See also edit

Notes edit

  1. ^ The use of the term shiv here is a pun or mistake on shim.[4]

References edit

  1. ^ Thormeier, Pascal (2023-06-09). Mastering CSS Grid: A comprehensive and practical guide to creating beautiful layouts with CSS Grid. Packt Publishing Ltd. p. 195. ISBN 978-1-80461-616-1.
  2. ^ a b c Luis Ángel Pérez Castillo (2019). Speaking JavaScript.
  3. ^ "It typically checks if a browser supports an API. If it doesn’t, the polyfill installs its own implementation. That allows you to use the API in either case."
  4. ^ a b c Bruce Lawson; Remy Sharp. "Introducing Polyfills". Introducing HTML5. pp. 276–277.
  5. ^ a b c Sharp, Remy (8 October 2010). "What is a polyfill?". Retrieved 13 January 2012.
  6. ^ Ian Hickson (2008-01-23). "Mistakes, Sadness, Regret". This piece of information makes building an HTML5 compatibility shim for IE7 far easier than had previously been assumed.
  7. ^ . GitHub. Archived from the original on 2010-09-28.
  8. ^ "What is the difference between a shim and a polyfill?".
  9. ^ Chuck Hudson; Tom Leadbetter (2011). HTML5 Developer's Cookbook. p. 121.
  10. ^ "Core-js". GitHub. 26 October 2021.
  11. ^ "Airbnb-js-shims vs core-js vs core-js-pure vs es5-shim vs es6-shim vs js-polyfills vs polyfill-library vs polyfill-service | NPM trends".
  12. ^ . Mozilla Developer Network. 30 June 2012. Archived from the original on 3 August 2012. Retrieved 9 July 2012.
  13. ^ "Hyphenopoly.js". GitHub. 25 September 2022.

External links edit

  • "List of polyfills providing HTML5 facilities". GitHub: Modernizr project.
  • Manian, Divya; Irish, Paul; Branyen, Tim; Montgomery, Connor; Verschaeve, Arthur; et al. (eds.). "HTML5 Polyfill List by Feature". HTML5 Please. The recommendations... represent the collective knowledge of developers who have been deep in the HTML5 trenches
  • "What are PolyFills in Javascript?". More on Few. Sep 5, 2013.

polyfill, programming, other, uses, polyfill, disambiguation, software, development, polyfill, code, that, implements, feature, development, environment, that, does, natively, support, feature, most, often, refers, javascript, code, that, implements, html5, st. For other uses see Polyfill disambiguation In software development a polyfill is code that implements a feature of the development environment that does not natively support the feature Most often it refers to JavaScript code that implements an HTML5 or CSS web standard either an established standard supported by some browsers on older browsers or a proposed standard not supported by any browsers on existing browsers Polyfills are also used in PHP and Python 1 Polyfills allow web developers to use an API regardless of whether or not it is supported by a browser and usually with minimal overhead Typically they first check if a browser supports an API and use it if available otherwise using their own implementation 2 3 Polyfills themselves use other more supported features and thus different polyfills may be needed for different browsers The term is also used as a verb polyfilling is providing a polyfill for a feature Contents 1 Definition 2 Examples 2 1 core js 2 2 HTML5 Shiv 2 3 prefix free 2 4 Selectivizr 2 5 Flexie 2 6 CSS3 PIE 2 7 JSON 2 2 8 es5 shim 2 9 FlashCanvas 2 10 MediaElement js 2 11 BrowserID 2 12 Webshims Lib 2 13 Hyphenopoly js 3 See also 4 Notes 5 References 6 External linksDefinition editThe term is a neologism coined by Remy Sharp who required a word that meant replicate an API using JavaScript or Flash or whatever if the browser doesn t have it natively while co writing the book Introducing HTML5 in 2009 4 5 Formally a shim is a library that brings a new API to an older environment using only the means of that environment 2 Polyfills exactly fit this definition the term shim was also used for early polyfills 6 However to Sharp shim connoted non transparent APIs and workarounds such as spacer GIFs for layout sometimes known as shim gif and similar terms such as progressive enhancement and graceful degradation were not appropriate so he invented a new term 5 The term is based on the multipurpose filling paste brand Polyfilla a paste used to cover up cracks and holes in walls and the meaning fill in holes in functionality in many poly ways The word has since gained popularity particularly due to its use by Paul Irish and in Modernizr documentation 5 7 The distinction that Sharp makes is 4 What makes a polyfill different from the techniques we have already like a shim is this if you removed the polyfill script your code would continue to work without any changes required in spite of the polyfill being removed This distinction is not drawn by other authors 2 At times various other distinctions are drawn between shims polyfills and fallbacks but there are no generally accepted distinctions most consider polyfills a form of shim 8 The term polyfiller is also occasionally found 9 Examples editThis section needs additional citations for verification Please help improve this article by adding citations to reliable sources in this section Unsourced material may be challenged and removed July 2023 Learn how and when to remove this template message core js edit core js 10 is one of the most popular 11 JavaScript standard library polyfill Includes polyfills for ECMAScript up to the latest version of the standard promises symbols collections iterators typed arrays many other features ECMAScript proposals some cross platform WHATWG W3C features and proposals like URL You can load only required features or use it without global namespace pollution It can be integrated with Babel which allows it to automatically inject required core js modules into your code HTML5 Shiv edit In IE versions prior to 9 unknown HTML elements like lt section gt and lt nav gt would be parsed as empty elements breaking the page s nesting structure and making those elements impossible to style using CSS One of the most widely used polyfills html5shiv a exploits another quirk of IE to work around this bug calling document createElement tagname for each of the new HTML5 elements which causes IE to parse them correctly It also includes basic default styling for those HTML5 elements prefix free edit Though most polyfills target out of date browsers some exist to simply push modern browsers forward a little bit more Lea Verou s prefix free polyfill is such a polyfill allowing current browsers to recognise the unprefixed versions of several CSS3 properties instead of requiring the developer to write out all the vendor prefixes It reads the page s stylesheets and replaces any unprefixed properties with their prefixed counterparts recognised by the current browser Selectivizr edit Keith Clark s Selectivizr is a popular polyfill that makes many CSS3 selectors work in IE 8 and below It reads the page s stylesheets looking for a number of known CSS3 selectors then uses a JavaScript selector library to query the document for elements matching those selectors applying the styles directly to those elements It supports several JavaScript selector libraries such as jQuery Flexie edit Possibly one of the most anticipated features of CSS3 Flexible Box Layout a k a Flexbox promises to be an extremely powerful tool for laying out interface elements WebKit and Mozilla engines have supported a preliminary draft syntax for years Flexie implements support for that same syntax in IE and Opera However the draft spec has undergone a drastic revision to a new and much more powerful syntax which is not yet supported by Flexie Flexie can still be used along with the old syntax but the developer must make sure they include the new syntax for future browsers as well CSS3 PIE edit PIE Progressive Internet Explorer implements some of the most popular missing CSS3 box decoration properties in IE including border radius and box shadow for IE 8 and below and linear gradient backgrounds for IE 9 and below Invoked as a HTC behavior a proprietary IE feature it looks for the unsupported CSS3 properties on specific elements and renders those properties using VML for IE 6 8 and SVG for IE 9 Its rendering is mostly indistinguishable from native browser implementations and it handles dynamic DOM modification well JSON 2 edit Douglas Crockford originally wrote json2 js as an API for reading and writing his then up and coming JSON data format It became so widely used that browser vendors decided to implement its API natively and turn it into a de facto standard Since json2 js now implements features native to newer browsers into older browsers it has become a polyfill instead of a library es5 shim edit ECMAScript 5th Edition ES5 brings some useful new scripting features and since they re syntactically compatible with older JavaScript engines they can mostly be polyfilled by patching methods onto built in JS objects This es5 shim polyfill does it in two parts es5 shim js contains those methods that can be fully polyfilled and es5 sham js contains partial implementations of the other methods which rely too much on the underlying engine to work accurately FlashCanvas edit FlashCanvas is an implementation of the HTML5 Canvas API using an Adobe Flash plug in A rare commercial polyfill it comes in a paid version as well as a free version which lacks a few advanced features like shadows MediaElement js edit John Dyer s MediaElement js polyfills support for lt video gt and lt audio gt elements including the HTML5 MediaElement API in older browsers using Flash or Silverlight plug ins It also provides an optional media player UI for those elements which is consistent across all browsers BrowserID edit Main article Mozilla Persona Authentication protocol proposed by Mozilla failed to gain traction 12 Webshims Lib edit Alexander Farkas s Webshims Lib aggregates many other polyfills together into a single package and conditionally loads only those needed by the visiting browser Hyphenopoly js edit Hyphenopoly js enables automatic hyphenation if it is not already supported by the browser for the respective document language 13 See also editAdapter pattern Shim computing Wrapper library Adaptive web design Backwards compatibilityNotes edit The use of the term shiv here is a pun or mistake on shim 4 References edit Thormeier Pascal 2023 06 09 Mastering CSS Grid A comprehensive and practical guide to creating beautiful layouts with CSS Grid Packt Publishing Ltd p 195 ISBN 978 1 80461 616 1 a b c Luis Angel Perez Castillo 2019 Speaking JavaScript It typically checks if a browser supports an API If it doesn t the polyfill installs its own implementation That allows you to use the API in either case a b c Bruce Lawson Remy Sharp Introducing Polyfills Introducing HTML5 pp 276 277 a b c Sharp Remy 8 October 2010 What is a polyfill Retrieved 13 January 2012 Ian Hickson 2008 01 23 Mistakes Sadness Regret This piece of information makes building an HTML5 compatibility shim for IE7 far easier than had previously been assumed HTML5 Cross browser Polyfills GitHub Archived from the original on 2010 09 28 What is the difference between a shim and a polyfill Chuck Hudson Tom Leadbetter 2011 HTML5 Developer s Cookbook p 121 Core js GitHub 26 October 2021 Airbnb js shims vs core js vs core js pure vs es5 shim vs es6 shim vs js polyfills vs polyfill library vs polyfill service NPM trends navigator id Mozilla Developer Network 30 June 2012 Archived from the original on 3 August 2012 Retrieved 9 July 2012 Hyphenopoly js GitHub 25 September 2022 External links edit List of polyfills providing HTML5 facilities GitHub Modernizr project Manian Divya Irish Paul Branyen Tim Montgomery Connor Verschaeve Arthur et al eds HTML5 Polyfill List by Feature HTML5 Please The recommendations represent the collective knowledge of developers who have been deep in the HTML5 trenches What are PolyFills in Javascript More on Few Sep 5 2013 Retrieved from https en wikipedia org w index php title Polyfill programming amp oldid 1208868571, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.