Полифилл (программирование) - Polyfill (programming)

В Веб-разработка, а полифилл это код, который реализует функцию на веб-браузеры которые не поддерживают эту функцию. Чаще всего это относится к JavaScript библиотека который реализует HTML5 веб-стандарт, либо установленный стандарт (поддерживаемый некоторыми браузерами) в старых браузерах, либо предлагаемый стандарт (не поддерживаемый никакими браузерами) в существующих браузерах. Формально «полифилл - это прокладка для браузера API ".[1]

Полифиллы позволяют веб-разработчикам использовать API независимо от того, поддерживается он браузером или нет, и обычно с минимальными накладными расходами. Обычно они сначала проверяют, поддерживает ли браузер API, и используют его, если он доступен, в противном случае используют собственную реализацию.[1][2] Сами полифилы используют другие, более поддерживаемые функции, поэтому для разных браузеров могут потребоваться разные полифилы. Термин также используется как глагол: полифиллинг предоставляет полифил для объекта.

Определение

Срок - это неологизм, придуманный Реми Шарпом, который при написании книги потребовал слово, означающее «реплицировать API с помощью JavaScript (или Flash, или чего-то еще), если в браузере его нет изначально» Представляем HTML5 в 2009.[3][4] Формально «шайба - это библиотека который привносит новый API в старую среду, используя только средства этой среды. ",[1] и полифиллы точно соответствуют этому определению; период, термин прокладка также использовался для ранних полифиллов, таких как HTML5 Shiv.[5][а] Однако Sharp прокладка связанные непрозрачные API-интерфейсы и обходные пути, такие как spacer гифки для макета, иногда называемого shim.gif, и подобные термины, такие как прогрессивное улучшение и изящная деградация были неподходящими, поэтому он придумал новый термин.[4] Срок основан на универсальная паста для наполнения марка Полифилла, паста, используемая для заделки трещин и дыр в стенах, а значение "заполнить дыры (функционально) во многих (поли- ) способами ". С тех пор это слово приобрело популярность, особенно благодаря его употреблению Пол Айриш И в Modernizr документация.[4][6]

Sharp делает следующее различие:[3]

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

Это различие не проводится другими авторами.[1] Иногда проводятся различные другие различия между прокладками, полифилами и запасными частями, но общепринятых различий нет: большинство считает полифиллы формой прокладок.[7] Период, термин полифиллер также иногда встречается.[8]

Примеры

core-js

core-js - самый популярный и мощный JavaScript стандартная библиотека полифилл.[согласно кому? ] Включает полифиллы для ECMAScript до 2019: обещания, символы, коллекции, итераторы, типизированные массивы, многие другие функции, предложения ECMAScript, некоторые кроссплатформенные WHATWG / W3C особенности и предложения, такие как URL. Вы можете загружать только необходимые функции или использовать их без загрязнения глобального пространства имен. Интегрирован с Вавилон что позволяет автоматически вводить в ваш код необходимые модули core-js.

HTML5 Shiv

В версиях IE до 9 неизвестные элементы HTML, такие как <section> и <nav> будут анализироваться как пустые элементы, нарушая структуру вложенности страницы и делая эти элементы невозможными для стилизации с использованием CSS. Один из наиболее широко используемых полифилов, html5shiv, использует еще одну причуду IE для обхода этой ошибки: вызов document.createElement ("имя тега") для каждого из новых элементов HTML5, что заставляет IE правильно их анализировать. Он также включает базовый стиль по умолчанию для этих элементов HTML5.

-без префикса

Хотя большинство полифилов нацелены на устаревшие браузеры, некоторые существуют, чтобы просто подтолкнуть современные браузеры немного вперед. Леа Веру Полифил без префиксов - это такой полифилл, который позволяет текущим браузерам распознавать версии некоторых свойств CSS3 без префиксов вместо того, чтобы требовать от разработчика выписывать все префиксы поставщиков. Он читает таблицы стилей страницы и заменяет любые свойства без префикса их аналогами с префиксом, распознаваемыми текущим браузером.

Селективизр

Selectivizr Кейта Кларка - это популярный полифилл, который заставляет многие селекторы CSS3 работать в IE 8 и ниже. Он читает таблицы стилей страницы в поисках ряда известных селекторов CSS3, затем использует библиотеку селекторов JavaScript для запроса в документе элементов, соответствующих этим селекторам, применяя стили непосредственно к этим элементам. Он поддерживает несколько библиотек селекторов JavaScript, таких как jQuery.

Flexie

Возможно, одна из самых ожидаемых функций CSS3, Flexible Box Layout (a.k.a. Flexbox), обещает стать чрезвычайно мощным инструментом для размещения элементов интерфейса. Механизмы WebKit и Mozilla уже много лет поддерживают предварительный проект синтаксиса. Flexie реализует поддержку того же синтаксиса в IE и Opera. Однако черновой вариант спецификации претерпел радикальную переработку нового (и гораздо более мощного) синтаксиса, который еще не поддерживается Flexie. Flexie все еще можно использовать вместе со старым синтаксисом, но разработчик должен убедиться, что они включают новый синтаксис и для будущих браузеров.

CSS3 PIE

PIE ("Progressive Internet Explorer") реализует некоторые из наиболее популярных отсутствующих свойств оформления блока CSS3 в IE, включая border-radius и box-shadow для IE 8 и ниже, а также фоны с линейным градиентом для IE 9 и ниже. Вызывается как поведение HTC (проприетарная функция IE), он ищет неподдерживаемые свойства CSS3 в определенных элементах и ​​отображает эти свойства с помощью VML для IE 6–8 и SVG для IE 9. Его визуализация в основном неотличима от реализаций в собственном браузере. хорошо справляется с динамической модификацией DOM.

JSON 2

Дуглас Крокфорд изначально написал json2.js как API для чтения и записи его (затем перспективного) JSON формат данных. Он стал настолько широко используемым, что производители браузеров решили реализовать его API изначально и превратить его в де-факто стандарт; Поскольку json2.js теперь реализует функции, родные для новых браузеров, в старые браузеры, он стал полифилом вместо библиотеки.

es5-shim

ECMAScript 5th Edition («ES5») содержит некоторые новые полезные функции создания сценариев, и, поскольку они синтаксически совместимы со старыми механизмами JavaScript, их можно полифиллировать путем наложения методов на встроенные объекты JS. Этот полифил es5-shim состоит из двух частей: es5-shim.js содержит те методы, которые можно полностью заполнить, а es5-sham.js содержит частичные реализации других методов, которые слишком сильно зависят от базового движка для точной работы.

FlashCanvas

FlashCanvas - это реализация HTML5 Canvas API с использованием Adobe Flash плагин. Редкий коммерческий полифилл, он поставляется как в платной, так и в бесплатной версии, в которой отсутствуют некоторые расширенные функции, такие как тени.

MediaElement.js

Поддержка полифиллов MediaElement.js Джона Дайера для <video> и <audio> элементы, включая HTML5 MediaElement API, в старых браузерах, использующих плагины Flash или Silverlight. Он также предоставляет дополнительный пользовательский интерфейс медиаплеера для этих элементов, который одинаков для всех браузеров.

BrowserID

Протокол аутентификации, предложенный Mozilla, не получил поддержки.[9]

Webshims Lib

Webshims Lib Александра Фаркаса объединяет множество других полифиллов в единый пакет и условно загружает только те, которые необходимы браузеру, посещающему его.

Смотрите также

Примечания

  1. ^ Использование термина заточка вот каламбур или ошибка на прокладка.[3]

Рекомендации

  1. ^ а б c d Луис Анхель Перес Кастильо (2019). Говоря на JavaScript.
  2. ^ «Обычно он проверяет, поддерживает ли браузер API. Если нет, полифилл устанавливает свою собственную реализацию. Это позволяет вам использовать API в любом случае».
  3. ^ а б c Брюс Лоусон; Реми Шарп. «Представляем полифиллы». Представляем HTML5. стр.276–277.
  4. ^ а б c Резко, Реми. "Что такое полифилл?". Получено 13 января 2012.
  5. ^ Ян Хиксон (2008-01-23). «Ошибки, печаль, сожаление». Эта информация значительно упрощает создание прокладки совместимости HTML5 для IE7, чем предполагалось ранее.
  6. ^ «Кроссбраузерные полифиллы HTML5». Архивировано из оригинал 28 сентября 2010 г.
  7. ^ "В чем разница между прокладкой и полифиллом?".
  8. ^ Чак Хадсон; Том Ледбеттер (2011). Поваренная книга разработчика HTML5. п.121.
  9. ^ "navigator.id". Сеть разработчиков Mozilla. 30 июня 2012 г.

внешняя ссылка