We test browser support with a test suite for each feature. A browser is considered compliant only if it passes all the tests, so this is a reasonably comprehensive test rather than a naive feature-detect. To view the test suite for a feature in the browser you're using right now, click the Tests link in the feature list. The results below are generated using browsers hosted by Sauce Labs.
IE | Firefox | Chrome | Safari | Your browser | ||
---|---|---|---|---|---|---|
Array.from¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Array.isArray¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Array.of¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Array.prototype.@@iterator¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Array.prototype.contains¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
| ||||||
Array.prototype.entries¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Array.prototype.every¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Array.prototype.fill¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Array.prototype.filter¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Array.prototype.find¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Array.prototype.findIndex¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Array.prototype.forEach¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Array.prototype.includes¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Array.prototype.indexOf¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Array.prototype.keys¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Array.prototype.lastIndexOf¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Array.prototype.map¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Array.prototype.reduce¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Array.prototype.reduceRight¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Array.prototype.some¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Array.prototype.values¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
AudioContext¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
CustomEvent¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
DOMTokenList¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
DOMTokenList.prototype.@@iterator¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Date.now¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Date.prototype.toISOString¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Document¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Element¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Element.prototype.after¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Element.prototype.append¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Element.prototype.before¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Element.prototype.classList¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Element.prototype.cloneNode¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Element.prototype.closest¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Element.prototype.matches¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Element.prototype.placeholder¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Element.prototype.prepend¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Element.prototype.remove¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Element.prototype.replaceWith¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Event¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
| ||||||
Event.DOMContentLoaded¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Event.focusin¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Event.hashchange¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Function.prototype.bind¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
HTMLDocument¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
HTMLPictureElement¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
IntersectionObserver¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Intl¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
| ||||||
JSON¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Map¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
| ||||||
Math.acosh¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Math.asinh¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Math.atanh¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Math.cbrt¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Math.clz32¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Math.cosh¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Math.expm1¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Math.hypot¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Math.imul¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Math.log10¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Math.log1p¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Math.log2¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Math.sign¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Math.sinh¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Math.tanh¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Math.trunc¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Node.prototype.contains¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
NodeList.prototype.@@iterator¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Number.isNaN¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Object.assign¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Object.create¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Object.defineProperties¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Object.defineProperty¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
| ||||||
Object.getOwnPropertyDescriptor¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Object.getOwnPropertyNames¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Object.getPrototypeOf¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Object.is¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Object.keys¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Object.setPrototypeOf¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Promise¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
| ||||||
Set¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
| ||||||
String.prototype.contains¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
String.prototype.endsWith¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
String.prototype.includes¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
String.prototype.repeat¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
String.prototype.startsWith¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
String.prototype.trim¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Symbol¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Symbol.hasInstance¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Symbol.isConcatSpreadable¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Symbol.iterator¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Symbol.match¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Symbol.replace¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Symbol.search¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Symbol.species¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Symbol.split¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Symbol.toPrimitive¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Symbol.toStringTag¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Symbol.unscopables¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
URL¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
| ||||||
UserTiming¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
WeakMap¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
WeakSet¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
Window¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
XMLHttpRequest¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
atob¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
console¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
console.assert¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
console.clear¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
console.count¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
console.debug¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
console.dir¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
console.dirxml¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
console.error¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
console.exception¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
console.group¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
console.groupCollapsed¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
console.groupEnd¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
console.info¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
console.log¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
console.markTimeline¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
| ||||||
console.table¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
console.time¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
console.timeEnd¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
console.timeStamp¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
console.timeline¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
console.timelineEnd¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
console.trace¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
console.warn¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
devicePixelRatio¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
| ||||||
document.getElementsByClassName¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
document.head¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
document.querySelector¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
document.visibilityState¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
| ||||||
fetch¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
| ||||||
getComputedStyle¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
localStorage¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
location.origin¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
matchMedia¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
navigator.geolocation¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
navigator.sendBeacon¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
performance.now¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
requestAnimationFrame¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
screen.orientation¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
| ||||||
setImmediate¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
~html5-elements¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 | ||
~viewport¶ |
78910111213 | 203033414244 | 303540424648 | 5.189 |
The table above lists a data size for each polyfill, which is the size of the polyfill including a feature detect, after minification, and before gzip. Two very important things to remember about these sizes are:
The following table shows the total size of the polyfill bundle for the default set, in all our test browsers:
Browser | Version | Size (raw) | Size (min) | Size (gzip) |
---|---|---|---|---|
chrome | 30 | 43.9KB | 20.1KB | 6.9KB |
chrome | 35 | 31.7KB | 13.4KB | 4.3KB |
chrome | 40 | 18.1KB | 7.7KB | 2.7KB |
chrome | 42 | 16.9KB | 7.1KB | 2.5KB |
chrome | 46 | 11.7KB | 5.2KB | 1.8KB |
chrome | 48 | 11.7KB | 5.2KB | 1.8KB |
firefox | 20 | 45.5KB | 21.0KB | 7.1KB |
firefox | 30 | 9.2KB | 3.9KB | 1.4KB |
firefox | 33 | 5.6KB | 2.5KB | 0.9KB |
firefox | 41 | 4.1KB | 1.8KB | 0.6KB |
firefox | 42 | 4.1KB | 1.8KB | 0.6KB |
firefox | 44 | 4.1KB | 1.8KB | 0.6KB |
ie | 7 | 83.5KB | 35.8KB | 11.2KB |
ie | 8 | 97.0KB | 42.6KB | 13.3KB |
ie | 9 | 62.5KB | 30.6KB | 10.3KB |
ie | 10 | 47.8KB | 23.8KB | 7.9KB |
ie | 11 | 47.2KB | 23.4KB | 7.9KB |
ie | 12 | 24.4KB | 13.2KB | 4.9KB |
ie | 13 | 19.7KB | 8.8KB | 3.0KB |
safari | 8 | 17.9KB | 7.5KB | 2.6KB |
safari | 9 | 14.4KB | 6.2KB | 2.1KB |
safari | 5.1 | 62.9KB | 27.0KB | 8.9KB |
android | 4.4 | 33.6KB | 15.2KB | 5.5KB |
android | 4.3 | 34.0KB | 15.4KB | 5.5KB |
android | 4.2 | 34.0KB | 15.4KB | 5.5KB |
android | 4.1 | 34.0KB | 15.4KB | 5.5KB |
ios_saf | 9.1 | 5.4KB | 2.3KB | 0.8KB |
ios_saf | 9.2 | 5.0KB | 2.1KB | 0.8KB |
The alias default
includes a set of polyfills that comprise features with high demands, small polyfill sizes, good performance and at least one good native implementation in a stable browser. The set evolves over time to include new features as they become a more stable part of the web platform.
Although you cannot request an immutable version of a polyfill, you can reduce the risk of future releases of the polyfill service breaking compatibility with your code by using an immutable default set. Each time we make a release, if we have changed the features included in the default set we will issue a new immutable alias for the set, which won't change when the default set changes again. The components of these sets are shown below:
Alias | Constituents |
---|---|
default-3.3 | Array.isArray, Array.prototype.every, Array.prototype.filter, Array.prototype.forEach, Array.prototype.indexOf, Array.prototype.lastIndexOf, Array.prototype.map, Array.prototype.reduce, Array.prototype.reduceRight, Array.prototype.some, atob, CustomEvent, Date.now, Date.prototype.toISOString, Document, document.querySelector, document.visibilityState, DOMTokenList, Element, Element.prototype.classList, Element.prototype.cloneNode, Element.prototype.closest, Element.prototype.matches, Event, Event.DOMContentLoaded, Event.focusin, Event.hashchange, Function.prototype.bind, JSON, Object.assign, Object.create, Object.defineProperties, Object.defineProperty, Object.getOwnPropertyNames, Object.getPrototypeOf, Object.keys, requestAnimationFrame, String.prototype.includes, String.prototype.trim, Window, XMLHttpRequest, ~html5-elements |
default-3.4 | Added Array.from, Array.of, Array.prototype.fill, Element.prototype.after, Element.prototype.append, Element.prototype.before, Element.prototype.prepend, Element.prototype.remove, Element.prototype.replaceWith, Node.prototype.contains, Number.isNaN, Promise, String.prototype.endsWith, String.prototype.startsWith, URL, location.origin |
default-3.5 | Added Object.getOwnPropertyDescriptor |
default-3.6 | Added Map, Set |