В чем разница между прокладкой и polyfill?
Оба, кажется, используются в кругах веб-разработки, см., например, HTML5 Cross Browser Polyfills, в котором говорится:
Итак, мы собираем все прокладки, запасные части и полиполки...
Или, там es5-shim проект.
В моем текущем проекте мы используем несколько из них, и я хочу привязать их все в одном каталоге. Итак, что я должен назвать этим каталогом --- shims
, или polyfills
?
Ответы
Ответ 1
Вызовите его прокладками, если вы хотите сохранить общий каталог. A polyfill - это тип прокладки, который модифицирует устаревшие браузеры с современными функциями HTML5/CSS3, обычно используя Javascript или Flash. С другой стороны, прокладка относится к любой части кода, которая выполняет перехват вызова API и обеспечивает уровень абстракции. Это не обязательно ограничивается веб-приложением или HTML5/CSS3.
Ответ 2
Shim
Если вы знакомы с шаблоном адаптера, вы знаете, что такое прокладка. 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(). Этот перехват называется shimming. Соответствующий исходный код из es5-shim выглядит следующим образом:
if (!Date.now) {
Date.now = function now() {
return new Date().getTime();
};
}
Polyfill
Polyfilling - это действительно просто специализированная версия shimming. Polyfill заключается в реализации недостающих функций в API, тогда как прокладка не обязательно будет такой же, как реализация недостающих функций, поскольку это касается исправления функций. Я знаю, что они кажутся чересчур неопределенными, но где прокладки используются в качестве более широкого термина, Polyfill используется для описания прокладок, которые обеспечивают обратную совместимость для старых браузеров. Таким образом, в то время как прокладки используются для покрытия старых грехов, полиполны используются для своевременного восстановления будущих улучшений.
В качестве примера нет поддержки sessionStorage в IE7, но Polyfill в пакете npm sessionstorage добавит эту функцию в IE7 (и старше), используя такие методы, как хранение данных в имени имени окна или с помощью файлов cookie.
Ответ 3
Из того, что я понимаю:
A polyfill - это код, который определяет, отсутствует ли какой-либо "ожидаемый" API и вручную его реализует. Например.
if (!Function.prototype.bind) { Function.prototype.bind = ...; }
Прокладка - это код, который перехватывает существующие вызовы API и реализует другое поведение. Идея здесь заключается в нормализации некоторых API-интерфейсов в разных средах. Таким образом, если два браузера реализуют один и тот же API по-разному, вы можете перехватить вызовы API в одном из этих браузеров и привести его поведение в соответствие с другим браузером. Или, если у браузера есть ошибка в одном из своих API, вы можете снова перехватить вызовы в этот API, а затем обойти ошибку.
Ответ 4
Цитируя Axel Rauschmayer из своей книги Говорящий JavaScript:
- Прокладка - это библиотека, которая привносит новый API в более старую среду, используя только средства этой среды.
- A polyfill - это прокладка для API браузера. Обычно он проверяет, является ли браузер поддерживает API. Если это не так, polyfill устанавливает собственные реализация. Это позволяет использовать API в любом случае. термин polyfill поступает из продукта домашнего улучшения; согласно Реми Sharp:
Полифилла - это британский продукт, известный как Spackling Paste в США. Имея это в виду: подумайте о браузерах как стене с трещинами в ней. Эти [polyfills] помогают сгладить трещины и дают нам приятную гладкую стену браузеров для работы.
Ответ 5
Shim. Прокладка - это библиотека, которая привносит новый API в более старую среду, используя только средства этой среды.
Polyfill. В октябре 2010 года Remy Sharp опубликовал блог о термине "polyfill" [через Рика Уолдрона]:
A polyfill - это часть кода (или плагина), которая предоставляет технологию, которую вы, разработчик, ожидаете от браузера. Сглаживание ландшафта API, если вы это сделаете.
Ответ 6
Фантастическая статья, написанная об этом с нескольких лет назад, которая объясняет это хорошо:
Что такое Polyfill?
В статье (2) просто противопоставляются как таковые:
Shim: фрагмент кода, который вы могли бы добавить (т.е. JavaScript
), который исправит некоторые функции, но чаще всего он имеет собственный API.
Polyfill: что-то, что вы могли бы зайти (т.е. JavaScript
), и было бы тихо работать, чтобы имитировать существующие API-интерфейсы браузера, которые в противном случае не поддерживаются.