polyfill

Polyfill 是一段代码(通常是 Web 上的 JavaScript),用于在不支持现代功能的旧浏览器上提供这些功能。

例如,polyfill 可以用来在 IE7 中使用专有的 IE 过滤器模拟 text-shadow 的功能,或者通过 JavaScript 动态调整样式来模拟 rem 单位或媒体查询,或者实现任何你需要的其他功能。

不完全使用 polyfill 的原因是,原生实现具有更好的功能和更高的性能。API 的原生实现比 polyfill 更强大、速度更快。例如,Object.create polyfill 只包含非原生实现 Object.create 所可能具备的功能。

有时,polyfill 也被用来解决浏览器以不同方式实现相同功能的问题。polyfill 利用某个浏览器中的非标准功能,为 JavaScript 提供符合标准的方式来访问该功能。尽管如今这种使用 polyfill 的原因已经非常罕见,但在 IE6 和 Netscape 时代尤其普遍,那时每个浏览器对 JavaScript 的实现都大相径庭。jQuery 的第一个版本就是一个早期的 polyfill 示例。它本质上是浏览器特定解决方法的集合,旨在为 JavaScript 开发者提供一个适用于所有浏览器的通用 API。当时,JavaScript 开发者在努力让他们的网站在所有设备上都能正常工作时遇到了巨大的问题,因为浏览器之间存在如此大的差异,网站可能需要根据用户的浏览器进行根本性地不同编程,并拥有截然不同的用户界面。因此,JavaScript 开发者只能访问极少数在所有浏览器中或多或少保持一致的 JavaScript API。如今,使用 polyfill 来处理浏览器特定的实现已经不那么常见了,因为现代浏览器大多根据标准语义实现了一整套广泛的 API。

另见