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