Shim
Jika Anda terbiasa dengan pola adaptor, maka Anda tahu apa itu shim. Shims memotong panggilan API dan membuat lapisan abstrak antara pemanggil dan target. Biasanya shims digunakan untuk kompabilitas mundur. Misalnya paket es5-shim npm akan membiarkan Anda menulis sintaks ECMAScript 5 (ES5) dan tidak peduli apakah browser menjalankan ES5 atau tidak. Ambil Date.now sebagai contoh. Ini adalah fungsi baru di ES5 di mana sintaks di ES3 akan menjadi Date baru (). GetTime () . Jika Anda menggunakan es5-shim Anda dapat menulis Date.now dan jika browser yang Anda jalankan mendukung ES5 itu hanya akan berjalan. Namun, jika browser menjalankan mesin ES3 es5-shim akan mencegat panggilan ke Date.nowdan cukup kembalikan Date (). getTime () sebagai gantinya. Intersepsi ini disebut shimming. Kode sumber yang relevan dari es5-shim terlihat seperti ini:
if (!Date.now) {
Date.now = function now() {
return new Date().getTime();
};
}
Polyfill
Polyfilling sebenarnya hanya versi khusus shimming. Polyfill adalah tentang mengimplementasikan fitur-fitur yang hilang dalam API, sedangkan shim tidak harus sebanyak mengimplementasikan fitur-fitur yang hilang seperti halnya memperbaiki fitur. Saya tahu ini tampaknya terlalu samar, tetapi di mana shims digunakan sebagai istilah yang lebih luas, polyfill digunakan untuk menggambarkan shims yang memberikan kompabilitas ke belakang untuk browser yang lebih lama. Jadi, sementara shims digunakan untuk menutupi dosa-dosa lama, polyfill digunakan untuk mengembalikan perangkat tambahan di masa mendatang.
Sebagai contoh tidak ada dukungan untuk sessionStorage di IE7, tetapi polyfill dalam paket npm penyimpanan sesi akan menambahkan fitur ini di IE7 (dan lebih lama) dengan menggunakan teknik seperti menyimpan data di properti nama jendela atau dengan menggunakan cookie.