Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

Определение [ править ]

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

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

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

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

Примеры [ править ]

core-js [ править ]

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

HTML5 Shiv [ править ]

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

-prefix-free [ править ]

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

Selectivizr [ править ]

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

Флекси [ править ]

Возможно, одна из самых ожидаемых функций CSS3, Flexible Box Layout (также известная как 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 polyfills Джон Дайер поддержка <video>и <audio>элементов, в том числе API HTML5 MediaElement, в старых браузерах с использованием флэш - памяти или Silverlight плагинов. Он также предоставляет дополнительный пользовательский интерфейс медиаплеера для этих элементов, который одинаков для всех браузеров.

BrowserID [ изменить ]

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

Webshims Lib [ править ]

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

См. Также [ править ]

  • Шаблон адаптера
  • Прокладка (вычисление)
  • Библиотека обертки

Заметки [ править ]

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

Ссылки [ править ]

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

Внешние ссылки [ править ]

  • «Список полифиллов, предоставляющих возможности HTML5» . GitHub: проект Modernizr .
  • Маниан, Дивья; Ирландец, Пол ; Браньен, Тим; Монтгомери, Коннор; Вершаев, Артур; и другие. (ред.). «Список полифиллов HTML5 по функциям» . HTML5 Пожалуйста . Рекомендации ... представляют собой коллективные знания разработчиков, которые глубоко погрузились в окопы HTML5.
  • "Что такое PolyFills в Javascript?" . Подробнее о Few . 5 сентября 2013 г.