shim和polyfill

在前端的世界里,shimpolyfill经常被提到。它们指的都是什么, 又有什么区别呢。我的理解是

shim

中文翻译为楔子垫子。指一些做兼容性的库,用来弥补旧浏览器对新特性支持的不足,仅靠旧浏览器已有的API实现一些新特性,一般都会预先加载,这样新旧浏览器可以使用同一套包含新特性的代码。比如es5-shim是一个shim,它在ECMAScript 3的引擎上实现了ECMAScript 5的新特性, 而且在Node.js上和在浏览器上有完全相同的表现。

polyfill

中文翻译为填充物,国内称为腻子。把旧的浏览器想象成一面有了裂缝的墙,polyfills会帮助我们把这面墙的裂缝抹平。polyfill可以理解为一个用在浏览器API上的shim。我们通常的做法是先检查当前浏览器是否支持某个API,如果不支持的话就加载对应的polyfill
作为前端,我们理解和使用polyfill其实就可以了。

参考资料

https://www.html.cn/archives/8339