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.