В чем разница между прокладкой и 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-интерфейсы браузера, которые в противном случае не поддерживаются.