section polyfill terminology naming vocabulary polyfills shim

terminology - section - ¿Cuál es la diferencia entre un shim y un polyfill?



javascript polyfill (6)

Calce. Un shim 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 una pieza de código (o complemento) que proporciona la tecnología que usted, el desarrollador, espera que el navegador proporcione de forma nativa. Aplanar el paisaje API si lo desea.

Ambos parecen ser utilizados en círculos de desarrollo web, ver por ejemplo HTML5 Polyfills de navegador cruzado , que dice:

Así que aquí estamos recogiendo todas las calzas, fallas y rellenos de polietileno ...

O bien, está el proyecto es5-shim .

En mi proyecto actual estamos usando varios de estos, y quiero guardarlos todos en el mismo directorio. Entonces, ¿cómo debería llamar a este directorio --- shims o polyfills - polyfills ?


Citando a Axel Rauschmayer de su libro Speaking JavaScript :

  • Un shim es una biblioteca que trae una nueva API a un entorno anterior, utilizando solo los medios de ese entorno.
  • Un polyfill es un shim para una API de navegador. Por lo general, comprueba si un navegador soporta una API. Si no lo hace, el polyfill instala su propia implementación. Eso le permite utilizar la API en cualquier caso. El término polyfill proviene de un producto de mejoras para el hogar; según Remy Sharp :

    Polyfilla es un producto del Reino Unido conocido como Spackling Paste en los Estados Unidos. Con eso en mente: piense en los navegadores como una pared con grietas en ella. Estos [polyfills] ayudan a suavizar las grietas y nos dan una buena pared de navegadores para trabajar.


De lo que entiendo:

Un polyfill es un código que detecta si falta una cierta API "esperada" y la implementa manualmente. P.ej

if (!Function.prototype.bind) { Function.prototype.bind = ...; }

Un shim 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. Por lo tanto, si dos navegadores implementan la misma API de manera diferente, podría interceptar las llamadas a la API en uno de esos navegadores y alinear su comportamiento con el otro. 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.


Un artículo fantástico escrito sobre esto hace unos años que lo explica bien:

¿Qué es un Polyfill?

En el artículo los (2) están simplemente contrastados como tales:

Shim: un fragmento de código que podría agregar (es decir, JavaScript ) que solucionaría algunas funciones, pero con mayor frecuencia tendría su propia API .

Polyfill: algo que podría incluir (es decir, JavaScript ) y que funcionaría de forma silenciosa para imitar las API de navegador existentes que de otra forma no son compatibles.


Calce

Si está familiarizado con el patrón del adaptador, entonces sabe qué es una cuña. Shims intercepta las llamadas a la API y crea una capa abstracta entre la persona que llama y el destino. Normalmente, las calzas se utilizan para la compatibilidad hacia atrás. Por ejemplo, el paquete es5-shim npm le permitirá escribir la sintaxis ECMAScript 5 (ES5) y no le importa si el navegador ejecuta ES5 o no. Tome Date.now como un ejemplo. Esta es una nueva función en ES5 donde la sintaxis en ES3 sería la nueva Fecha (). GetTime () . Si usa el es5-shim , puede escribir Date.now y si el navegador 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.now y devolverá la nueva 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(); }; }

Relleno de polietileno

Polyfilling es realmente una versión especializada de shimming. Polyfill se trata de implementar características faltantes en una API, mientras que un shim no necesariamente sería tanto de implementar características faltantes como de corregir características. Sé que esto parece demasiado vago, pero cuando las calzas se usan como un término más amplio, polyfill se usa para describir cuñas que proporcionan una compatibilidad con versiones anteriores para los navegadores más antiguos. Entonces, mientras que las calzas se usan para encubrir los pecados antiguos, los rellenos de polietileno se usan para traer mejoras futuras al pasado. Como ejemplo, no hay soporte para sessionStorage en IE7, pero el polyfill en el paquete sessionpmorage npm agregará esta función en IE7 (y versiones anteriores) mediante el uso de técnicas como el almacenamiento de datos en la propiedad de nombre de la ventana o el uso de cookies.


  • Un shim es cualquier pieza de código que realiza la intercepción de una llamada de 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 cuña que actualiza los navegadores heredados con las características modernas de HTML5 / CSS3 que usualmente usan Javascript o Flash.

Respondiendo a su pregunta específica, shims su directorio si desea mantener el directorio genérico.