В чем разница между прокладкой и полифилл?


оба, похоже, используются в кругах веб-разработки, см. например HTML5 Cross Browser Polyfills, который говорит:

Итак, здесь мы собираем все прокладки, откаты, и polyfills...

или там es5-shim.

в моем текущем проекте мы используем несколько из них, и я хочу вставить их все в том же каталоге. Итак, как же мне назвать этот каталог - - -shims или polyfills?

6 323

6 ответов:

  • A сим - это любой фрагмент кода, который выполняет перехват вызова API и обеспечивает уровень абстракции. Это не обязательно ограничивается веб-приложением или HTML5 / CSS3.

  • A полифилл это тип прокладки это модифицирует устаревшие браузеры с современными функциями HTML5 / CSS3, обычно используя Javascript или Flash.

отвечая на ваш конкретный вопрос, я каталог shims Если вы хотите сохранить общий каталог.

сим

Если вы знакомы с шаблоном адаптера, то вы знаете, что такое прокладка. Shims перехватывает вызовы API и создает абстрактный слой между вызывающим и целевым объектами. Обычно прокладки используются для обратной совместимости. Например, es5-shim пакет npm позволит вам написать синтаксис ECMAScript 5 (ES5) и не заботиться о том, работает ли браузер ES5 или нет. Возьмите дата.сейчас в качестве примера. Это новая функция в ES5, где синтаксис в ES3 будет новая дата().getTime (). Если вы используете es5-shim можно писать дата.сейчас и если браузер, в котором вы работаете, поддерживает ES5, он просто запустится. Однако, если браузер работает на движке ES3 es5-shim перехватит вызов дата.сейчас и просто вернуть новая дата().getTime () вместо. Этот перехват называется шиммингом. Соответствующий исходный код из es5-shim выглядит так это:

if (!Date.now) {
    Date.now = function now() {
        return new Date().getTime();
    };
}

полифилл

Polyfilling на самом деле просто специализированная версия прокладки. Polyfill - это реализация отсутствующих функций в API, в то время как прокладка не обязательно будет связана с реализацией отсутствующих функций, а с исправлением функций. Я знаю, что это кажется слишком расплывчатым, но там, где оболочки используются как более широкий термин, polyfill используется для описания оболочек, которые обеспечивают обратную совместимость для старых браузеров. Так в то время как прокладки используются для сокрытия старых грехов, полифиллы используются для возвращения будущих улучшений во времени. В качестве примера нет поддержки sessionStorage в IE7, но polyfill в sessionstorage пакет npm добавит эту функцию в IE7 (и старше) с помощью таких методов, как хранение данных в свойстве name окна или с помощью файлов cookie.

из того, что я понимаю:

polyfill-это код, который определяет, отсутствует ли определенный" ожидаемый " API, и вручную реализует его. Е. Г.

if (!Function.prototype.bind) { Function.prototype.bind = ...; }

оболочка-это код, который перехватывает существующие вызовы API и реализует различное поведение. Идея здесь состоит в том, чтобы нормализовать определенные API в разных средах. Таким образом, если два браузера реализуют один и тот же API по-разному, вы можете перехватить вызовы API в одном из этих браузеров и привести его поведение в соответствие с другой браузер. Или, если браузер имеет ошибку в одном из своих API, вы можете снова перехватить вызовы этого API, а затем обойти ошибку.

со ссылкой на Аксель Rauschmayer из книги Говоря JavaScript:

  • прокладка-это библиотека, которая приносит новый API в старую среду, используя только средства этой среды.
  • полифилл-это прокладка для API браузера. Он обычно проверяет, если браузер поддерживает API. Если это не так, polyfill устанавливает свой собственный реализация. Это позволяет использовать API в в любом случае. Этот термин polyfill происходит от продукта для улучшения дома; согласно Реми Острый:

    Polyfilla-это британский продукт, известный как Spackling Paste в США. Имея это в виду: подумайте о браузерах как о стене с трещинами в ней. Эти [polyfills] помогите сгладить трещины и дать нам хорошую гладкую стену браузеров для работы.

ШИМ. Оболочка-это библиотека, которая приносит новый API в старую среду, используя только средства этой среды.

полифилл. В октябре 2010 года Реми Шарп написал в блоге о термине "полифилл" [через Рика Уолдрона]:

polyfill-это фрагмент кода (или плагин), который предоставляет технологию, которую вы, разработчик, ожидаете, что браузер предоставит изначально. Выравнивание ландшафта API, если хотите.

фантастическая статья, написанная об этом несколько лет назад, которая хорошо объясняет это:

Что такое полифилл?

в статье (2) просто противопоставляются как таковые:

оболочка: кусок кода, который вы могли бы добавить (т. е. JavaScript), Что бы исправить некоторые функциональные возможности, но это было бы чаще всего это собственный API.

Polyfill: что-то вы могли бы упасть в (т. е. JavaScript) и он будет молча работать, чтобы имитировать существующие API браузера, которые в противном случае не поддерживается.