Шим
Якщо ви знайомі з схемою адаптера, знаєте, що таке лайка. Shims перехоплює виклики API і створює абстрактний шар між абонентом і ціллю. Зазвичай прокладки використовують для зворотної сумісності. Наприклад, пакет es5-shim npm дозволить вам написати синтаксис ECMAScript 5 (ES5), і не буде байдуже, у браузері працює ES5 чи ні. Візьміть Date.now як приклад. Це нова функція в ES5, де синтаксис у ES3 буде новим Date (). GetTime () . Якщо ви використовуєте es5-shim, ви можете написати Date.now, і якщо браузер, який ви працюєте, підтримує ES5, він просто запуститься. Однак якщо у браузері працює двигун ES3, es5-shim перехопить виклик Date.nowі просто поверніть новий Date (). getTime () замість цього. Таке перехоплення називається мерехтливим. Відповідний вихідний код від es5-shim виглядає так:
if (!Date.now) {
Date.now = function now() {
return new Date().getTime();
};
}
Поліфіл
Поліфункція - це справді лише спеціалізована версія шиммінгу. Polyfill має на увазі реалізацію відсутніх функцій в API, тоді як shim не обов'язково стосується впровадження відсутніх функцій, як про виправлення функцій. Я знаю, що це здається занадто розпливчастим, але там, де шимми використовуються як більш широкий термін, поліфіл використовується для опису лайм, які забезпечують зворотну сумісність для старих браузерів. Тоді як обшивки використовуються для приховування старих гріхів, поліфіли використовуються для повернення майбутніх удосконалень у часі.
Як приклад, немає підтримки для sessionStorage в IE7, але поліфайл у пакеті npm sessionstorage додасть цю функцію в IE7 (і старші) за допомогою таких методів, як зберігання даних у властивості імені вікна або за допомогою cookie-файлів.