Calce
Si está familiarizado con el patrón del adaptador, entonces sabe lo que es una cuña. Shims intercepta las llamadas a la API y crea una capa abstracta entre la persona que llama y el objetivo. Típicamente, las cuñas se usan para la compatibilidad con versiones anteriores. Por ejemplo, el paquete es5-shim npm le permitirá escribir la sintaxis de ECMAScript 5 (ES5) y no le importará si el navegador ejecuta ES5 o no. Tome Date.now como ejemplo. Esta es una nueva función en ES5 donde la sintaxis en ES3 sería nueva Date (). GetTime () . Si usa el es5-shim , puede escribir Date.now y si el navegador en el que está ejecutando admite ES5, simplemente se ejecutará. Sin embargo, si el navegador está ejecutando el motor ES3, es5-shim interceptará la llamada a Date.nowy simplemente devolver new Date (). getTime () en su lugar. Esta intercepción se llama shimming. El código fuente relevante de es5-shim se ve así:
if (!Date.now) {
Date.now = function now() {
return new Date().getTime();
};
}
Polyfill
Polyfilling es realmente solo una versión especializada de shimming. Polyfill se trata de implementar características faltantes en una API, mientras que una cuña no necesariamente se trata tanto de implementar características faltantes como de corregirlas. Sé que esto parece demasiado vago, pero cuando las cuñas se usan como un término más amplio, polyfill se usa para describir las cuñas que proporcionan compatibilidad hacia atrás para los navegadores más antiguos. Entonces, mientras que las cuñas se usan para encubrir viejos pecados, los polyfills se usan para traer mejoras futuras en el tiempo.
Como ejemplo, no hay soporte para sessionStorage en IE7, pero el polyfill en el paquete sessionstorage npm agregará esta característica en IE7 (y versiones anteriores) mediante el uso de técnicas como almacenar datos en la propiedad de nombre de la ventana o mediante cookies.