在前端的世界里,shim
和polyfill
经常被提到。它们指的都是什么, 又有什么区别呢。我的理解是
shim
中文翻译为楔子,垫子。指一些做兼容性的库,用来弥补旧浏览器对新特性支持的不足,仅靠旧浏览器已有的API实现一些新特性,一般都会预先加载,这样新旧浏览器可以使用同一套包含新特性的代码。比如es5-shim
是一个shim
,它在ECMAScript 3
的引擎上实现了ECMAScript 5
的新特性, 而且在Node.js上和在浏览器上有完全相同的表现。
polyfill
中文翻译为填充物,国内称为腻子。把旧的浏览器想象成一面有了裂缝的墙,polyfills
会帮助我们把这面墙的裂缝抹平。polyfill
可以理解为一个用在浏览器API上的shim
。我们通常的做法是先检查当前浏览器是否支持某个API,如果不支持的话就加载对应的polyfill
。
作为前端,我们理解和使用polyfill
其实就可以了。
参考资料