Ambos parecen ser utilizados en círculos de desarrollo web, ver, por ejemplo, HTML5 Cross Browser Polyfills , que dice:
Así que aquí estamos recolectando todas las cuñas, retrocesos y polyfills ...
O, está el proyecto es5-shim .
En mi proyecto actual estamos usando varios de estos, y quiero pegarlos todos en el mismo directorio. Entonces, ¿cómo debo llamar a este directorio --- shims
o polyfills
?
terminology
naming
vocabulary
polyfills
shim
Domenic
fuente
fuente
Respuestas:
Una cuña es cualquier pieza de código que realiza la intercepción de una llamada API y proporciona una capa de abstracción. No está necesariamente restringido a una aplicación web o HTML5 / CSS3.
Un polyfill es un tipo de shim que adapta navegadores heredados con características modernas de HTML5 / CSS3 que usualmente usan Javascript o Flash.
Responda su pregunta específica, llame a su directorio
shims
si desea mantener el directorio genérico.fuente
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í:
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.
fuente
MyShim.Date.now();
Por favor, corrígeme si estoy equivocado.Por lo que entiendo:
Un polyfill es un código que detecta si falta una determinada API "esperada" y la implementa manualmente. P.ej
Una cuña es un código que intercepta las llamadas API existentes e implementa un comportamiento diferente. La idea aquí es normalizar ciertas API en diferentes entornos. Entonces, si dos navegadores implementan la misma API de manera diferente, puede interceptar las llamadas a la API en uno de esos navegadores y hacer que su comportamiento se alinee con el otro navegador. O, si un navegador tiene un error en una de sus API, podría interceptar nuevamente las llamadas a esa API y luego evitar el error.
fuente
Citando a Axel Rauschmayer de su libro Speaking JavaScript :
fuente
Calce. Una cuña es una biblioteca que trae una nueva API a un entorno anterior, utilizando solo los medios de ese entorno.
Polyfill En octubre de 2010, Remy Sharp escribió en su blog sobre el término "polyfill" [a través de Rick Waldron]:
Un polyfill es un código (o complemento) que proporciona la tecnología que usted, el desarrollador, espera que el navegador proporcione de forma nativa. Acoplar el paisaje API si lo desea.
fuente
Un fantástico artículo escrito sobre esto desde hace unos años que lo explica bien:
¿Qué es un Polyfill?
En el artículo, los (2) simplemente se contrastan como tales:
Shim: un fragmento de código que podría agregar (es decir,
JavaScript
) que arreglaría algunas funcionalidades, pero que con frecuencia tendría su propia API .Polyfill: algo que podría colocar (es decir
JavaScript
) y funcionaría silenciosamente para imitar las API de navegador existentes que de otro modo no serían compatibles.fuente
shim.gif
). No está dictando que las palabras se usen de esta manera, y al decir "para mí" está reconociendo tácitamente que su uso no es universal.