399 votes

Quelle est la signification des polyfills en HTML5?

Quelle est la signification des polyfills en HTML5? J'ai vu ce mot sur de nombreux sites à propos de HTML5, par exemple HTML5-Cross-Browser-Polyfills.

Alors ici, nous rassemblons tous les shims, les solutions de remplacement et les polyfills afin d'implanter des fonctionnalités HTML5 dans les navigateurs qui ne les prennent pas en charge nativement.

En fait, je ne comprends pas ce que signifie polyfills.

Est-ce une nouvelle technique HTML5 ou une bibliothèque JavaScript? Je n'ai jamais entendu ce mot avant HTML5.

Et quelle est la différence entre shims, les solutions de remplacement et les polyfills?

1 votes

Vous pouvez en savoir plus sur blogs.msdn.com/b/jennifer/archive/2011/08/04/…

0 votes

@user3400622 Merci pour le lien, l'explication dans le lien est très claire.

0 votes

@user3400622 le lien mène à "Page non trouvée".

393voto

Calvin Froedge Points 3569

Un polyfill est une solution de secours pour les navigateurs, créée en JavaScript, qui permet à des fonctionnalités que vous attendez de fonctionner dans les navigateurs modernes de fonctionner dans les navigateurs plus anciens, par exemple pour prendre en charge le canevas (une fonctionnalité HTML5) dans les anciens navigateurs.

C'est une sorte de technique HTML5, car elle est utilisée en conjonction avec HTML5, mais elle ne fait pas partie de HTML5, et vous pouvez avoir des polyfills sans avoir HTML5 (par exemple, pour prendre en charge des techniques CSS3 que vous voulez).

Voici un bon article:

http://remysharp.com/2010/10/08/what-is-a-polyfill/

Voici une liste complète de Polyfills et de Shims:

https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-browser-Polyfills

6 votes

Donc cela signifie que ie7.js est également un polyfill

1 votes

Oui: "De nombreux correctifs incluant la transparence PNG, les styles/sélecteurs CSS, les correctifs de bugs de rendu, etc." Cela ajoute cette fonctionnalité via javascript que le navigateur ne prend pas déjà en charge.

1 votes

Je pense que le mot Polyfills est apparu après HTML5. Est-ce que Shim est différent de Polyfills?

64voto

Jarvis Points 51

Tout d'abord, clarifions ce qu'est un polyfill : Un polyfill ne fait pas partie de la norme HTML5. Un polyfill n'est pas limité au Javascript, même s'il est souvent mentionné dans ce contexte.

Le terme polyfill lui-même fait référence à un code qui "vous permet d'avoir une fonctionnalité spécifique que vous attendez dans les navigateurs actuels ou "modernes" pour fonctionner également dans d'autres navigateurs qui n'ont pas le support de cette fonctionnalité intégré. "

Source et exemple de polyfill ici:

http://www.programmerinterview.com/index.php/html5/html5-polyfill/

46voto

Ranjeet Mane Points 381

Un polyfill est un morceau de code (ou plugin) qui fournit la technologie que vous, le développeur, attendez du navigateur pour qu'il la fournisse nativement.

2 votes

Bien expliqué.

0 votes

Court, concise et direct. Cela devrait être la réponse acceptée.

17voto

Richard Shepherd Points 464

Un polyfill est un remplacement qui remplace l'appel original par un appel à un shim.

Par exemple, supposons que vous voulez utiliser l'objet navigator.mediaDevices, mais que tous les navigateurs ne le prennent pas en charge. Vous pourriez imaginer une bibliothèque qui fournit un shim que vous pourriez utiliser comme ceci :

    MediaShim.mediaDevices.getUserMedia(...);

Dans ce cas, vous appelez explicitement un shim au lieu d'utiliser l'objet ou la méthode d'origine. Le polyfill, en revanche, remplace les objets et les méthodes sur les objets d'origine.

Par exemple :

    navigator.mediaDevices.getUserMedia(...);

Dans votre code, il semble que vous utilisiez l'objet navigator.mediaDevices standard. Mais en réalité, le polyfill (adapter.js dans l'exemple) l'a remplacé par le sien.

Celui avec lequel il a été remplacé est un shim. Celui-ci détectera si la fonctionnalité est nativement supportée et l'utilisera si c'est le cas, ou il contournant en utilisant d'autres API sinon.

Ainsi, un polyfill est une sorte de shim "transparent". Et c'est ce que Remy Sharp (qui a inventé le terme) voulait dire en disant : "si vous retirez le script de polyfill, votre code continuera de fonctionner, sans aucun changement requis malgré la suppression du polyfill".

11 votes

Qu'est-ce qu'un shim?

4 votes

@Oliver Watkins Si vous êtes familier avec le modèle d'adaptateur, alors vous savez ce qu'est un shim. Les shims interceptent les appels d'API et créent une couche abstraite entre l'appelant et la cible. Typiquement, les shims sont utilisés pour la compatibilité ascendante

0 votes

@AnuragRatna Je n'utiliserais pas 'intercepter' pour éviter la confusion... Intercepter fait généralement référence au code qui intercepte (de manière transparente), c'est-à-dire sans que l'appelant le sache. Les shims fournissent des appels API pour assurer la compatibilité ascendante.

3voto

Un polyfill en développement web est du code qui implémente une fonctionnalité sur les navigateurs web qui ne supportent pas la fonctionnalité. Il fait généralement référence à une bibliothèque JavaScript qui implémente une norme web HTML5 ou CSS, soit une norme établie (prise en charge par certains anciens navigateurs) soit une norme proposée (non supportée par aucun navigateur) sur les navigateurs existants. "Un polyfill est un shim pour une API de navigateur", selon la définition.

La norme HTML5 n'inclut pas de polyfill. Les polyfills ne se limitent pas à Javascript, malgré le fait qu'ils soient fréquemment mentionnés dans ce contexte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X