456 Stimmen

Was ist der Unterschied zwischen einer Zwischenlage und einem Polyfill?

Beide scheinen in Kreisen der Webentwicklung verwendet zu werden, siehe z. B. Browserübergreifende HTML5-Polyfills in dem es heißt:

Hier sammeln wir also alle Shims, Fallbacks und Polyfills...

Oder, es gibt die es5-shim Projekt.

In meinem aktuellen Projekt verwenden wir eine Reihe davon, und ich möchte sie alle im selben Verzeichnis unterbringen. Also, wie soll ich dieses Verzeichnis nennen? shims , oder polyfills ?

444voto

Arsalan Ahmed Punkte 4642
  • A Unterlegscheibe ist jedes Stück Code, das einen API-Aufruf abfängt und eine Abstraktionsebene bietet. Er ist nicht unbedingt auf eine Webanwendung oder HTML5/CSS3 beschränkt.

  • A Polyfill es un Art der Unterlegscheibe die ältere Browser mit modernen HTML5/CSS3-Funktionen nachrüstet, die normalerweise Javascript oder Flash verwenden.

Zur Beantwortung Ihrer konkreten Frage rufen Sie Ihr Telefonbuch an shims wenn Sie das Verzeichnis generisch halten wollen.

302voto

Kjetil Klaussen Punkte 6056

Shim

Wenn Sie mit dem Adaptermuster vertraut sind, dann wissen Sie, was eine Unterlegscheibe ist. Shims fangen API-Aufrufe ab und bilden eine abstrakte Schicht zwischen dem Aufrufer und dem Ziel. Normalerweise werden Shims für die Abwärtskompatibilität verwendet. Zum Beispiel die es5-shim npm-Paket können Sie ECMAScript 5 (ES5)-Syntax schreiben und sich nicht darum kümmern, ob der Browser ES5 ausführt oder nicht. Nehmen Sie Datum.jetzt als Beispiel. Dies ist eine neue Funktion in ES5, während die Syntax in ES3 wie folgt aussehen würde neues Datum().getTime() . Wenn Sie die es5-shim können Sie schreiben Datum.jetzt und wenn der Browser, in dem Sie laufen, ES5 unterstützt, wird es einfach laufen. Wenn der Browser jedoch die ES3-Engine ausführt es5-shim fängt den Aufruf von Datum.jetzt und einfach zurückgeben neues Datum().getTime() stattdessen. Dieses Abfangen wird als Shimming bezeichnet. Der entsprechende Quellcode von es5-shim sieht wie folgt aus:

if (!Date.now) {
    Date.now = function now() {
        return new Date().getTime();
    };
}

Polyfill

Polyfilling ist eigentlich nur eine spezielle Version von Shimming. Bei Polyfill geht es um die Implementierung fehlender Funktionen in einer API, während es bei einem Shim nicht unbedingt um die Implementierung fehlender Funktionen geht, sondern um die Korrektur von Funktionen. Ich weiß, dass diese Begriffe zu vage erscheinen, aber während Shims als ein breiterer Begriff verwendet werden, wird Polyfill verwendet, um Shims zu beschreiben, die Abwärtskompatibilität für ältere Browser bieten. Während Shims also dazu dienen, alte Sünden zu vertuschen, werden Polyfills dazu verwendet, zukünftige Verbesserungen in der Zeit zurückzubringen. Zum Beispiel gibt es keine Unterstützung für sessionStorage im IE7, aber das Polyfill in der sessionstorage Das npm-Paket fügt diese Funktion im IE7 (und älteren Versionen) hinzu, indem es Techniken wie das Speichern von Daten in der Namenseigenschaft des Fensters oder die Verwendung von Cookies verwendet.

103voto

Šime Vidas Punkte 172810

Soviel ich weiß:

Ein Polyfill ist ein Code, der erkennt, ob eine bestimmte "erwartete" API fehlt und diese manuell implementiert. Z.B..

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

Ein Shim ist Code, der vorhandene API-Aufrufe abfängt und ein anderes Verhalten implementiert. Die Idee dabei ist, bestimmte APIs über verschiedene Umgebungen hinweg zu normalisieren. Wenn also zwei Browser dieselbe API unterschiedlich implementieren, können Sie die API-Aufrufe in einem dieser Browser abfangen und sein Verhalten an das des anderen Browsers anpassen. Oder, wenn ein Browser einen Fehler in einer seiner APIs hat, können Sie wiederum die Aufrufe dieser API abfangen und den Fehler umgehen.

69voto

Bergi Punkte 565633

Unter Axel Rauschmayer aus seinem Buch Sprechen von JavaScript :

  • Ein Shim ist eine Bibliothek, die eine neue API in eine ältere Umgebung einbringt, indem sie nur die Mittel dieser Umgebung verwendet.
  • Ein Polyfill ist ein Shim für eine Browser-API. Es prüft normalerweise, ob ein Browser eine API unterstützt. Wenn dies nicht der Fall ist, installiert das Polyfill seine eigene Implementierung. Dadurch können Sie die API in beiden Fällen verwenden. Der Begriff Polyfill stammt von einem Heimwerkerprodukt; laut Remy Scharf :

    Polyfilla ist ein britisches Produkt, das in den USA als Spackling Paste bekannt ist. In diesem Sinne: Stellen Sie sich die Augenbrauen wie eine Wand mit Rissen vor. Diese [Polyfills] helfen, die Risse zu glätten und geben uns eine schöne glatte Wand von Browsern zum Arbeiten.

9voto

atconway Punkte 19796

In einem fantastischen Artikel, der vor einigen Jahren geschrieben wurde, wird dies gut erklärt:

Was ist ein Polyfill?

In dem Artikel werden die (2) einfach als solche gegenübergestellt:

Shim: ein Stück Code, das Sie hinzufügen könnten (z. B. JavaScript ), die einige Funktionen beheben würde, aber meistens würde sie eine eigene API .

Polyfill: etwas, das Sie einwerfen können (z. B. JavaScript ) und es würde stillschweigend funktionieren, um die vorhandene Browser-APIs die ansonsten nicht unterstützt werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X