Похоже, что оба они используются в кругах веб-разработки, см., Например, HTML5 Cross Browser Polyfills , где написано:
Итак, здесь мы собираем все прокладки, запасные варианты и полифиллы ...
Или есть проект es5-shim .
В моем текущем проекте мы используем несколько из них, и я хочу поместить их все в один каталог. Итак, как мне назвать этот каталог --- shims
или polyfills
?
terminology
naming
vocabulary
polyfills
shim
Доменик
источник
источник
Ответы:
Прокладка является любой кусок кода , который выполняет перехват вызова API и обеспечивает уровень абстракции. Это не обязательно ограничено веб-приложением или HTML5 / CSS3.
Polyfill является типом прокладки , что дооснащения устаревших браузеров с современной HTML5 / CSS3 функций , которые обычно с помощью Javascript или Flash.
Отвечая на ваш конкретный вопрос, позвоните в ваш каталог,
shims
если вы хотите, чтобы каталог был общим.источник
шайба
Если вы знакомы с шаблоном адаптера, то вы знаете, что такое прокладка. Shims перехватывает вызовы API и создает абстрактный слой между вызывающей стороной и целью. Обычно прокладки используются для обратной совместимости. Например ES5-регулировочная шайба пакет NPM позволит вам писать ECMAScript 5 синтаксис (ES5) и не волнует , если браузер работает ES5 или нет. Возьмите Date.now в качестве примера. Это новая функция в ES5, где синтаксис в ES3 будет новым Date (). GetTime () . Если вы используете ES5 тонкие прокладки вы можете написать Date.now и если браузер вы используете в опорах ES5 это будет просто работать. Однако, если браузер работает в ES3 двигатель ES5-прокладка будет перехватывать вызов Date.nowи просто вернуть новый Date (). getTime () вместо этого. Этот перехват называется шимминг. Соответствующий исходный код из es5-shim выглядит следующим образом:
Polyfill
Полифиллинг - это действительно специализированная версия шимминга. Polyfill - это реализация недостающих функций в API, в то время как шим не обязательно относится к реализации отсутствующих функций, чем к исправлению функций. Я знаю, что они кажутся слишком расплывчатыми, но там, где прокладки используются в качестве более широкого термина, polyfill используется для описания оболочек, которые обеспечивают обратную совместимость для старых браузеров. Таким образом, в то время как прокладки используются для сокрытия старых грехов, полифиллы используются для возврата будущих улучшений во времени. Например, в IE7 нет поддержки sessionStorage, но полифилл в пакете sessionstorage npm добавит эту функцию в IE7 (и более ранние версии), используя такие методы, как хранение данных в свойстве name окна или использование файлов cookie.
источник
MyShim.Date.now();
Пожалуйста, исправьте меня, если я ошибаюсь.Из того, что я понимаю:
Полифилл - это код, который обнаруживает отсутствие определенного «ожидаемого» API и реализует его вручную. Например
Шим - это код, который перехватывает существующие вызовы API и реализует другое поведение. Идея здесь состоит в том, чтобы нормализовать определенные API в разных средах. Таким образом, если два браузера реализуют один и тот же API по-разному, вы можете перехватить вызовы API в одном из этих браузеров и привести его поведение в соответствие с другим браузером. Или, если у браузера есть ошибка в одном из его API, вы можете снова перехватить вызовы этого API, а затем обойти ошибку.
источник
Ссылаясь на Акселя Раушмайера из его книги « Говоря на JavaScript» :
источник
Шим. Shim - это библиотека, которая переносит новый API в более старую среду, используя только средства этой среды.
Polyfill. В октябре 2010 года Реми Шарп написал в блоге термин «полифилл» [через Рика Уолдрона]:
Polyfill - это фрагмент кода (или плагин), который предоставляет технологию, которую вы, разработчик, ожидаете, что браузер предоставит изначально. Сглаживание ландшафта API, если хотите.
источник
Об этом написана фантастическая статья, написанная несколько лет назад:
Что такое полифилл?
В статье (2) просто противопоставляется как таковой:
Shim: кусок кода, который вы можете добавить (т.е.
JavaScript
), который исправит некоторую функциональность, но чаще всего имеет собственный API .Polyfill: что-то, что вы можете добавить (то есть
JavaScript
), и оно будет безмолвно работать, имитируя существующие API-интерфейсы браузера , которые иначе не поддерживаются.источник
shim.gif
). Он очень не диктует, чтобы слова использовались таким образом, и, говоря «мне», он молчаливо признает, что его использование не является универсальным.