stringtranslate.com

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

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

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

Определение

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

Различие, которое проводит Шарп, заключается в следующем: [4]

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

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

Примеры

ядро-js

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

HTML5 Шив

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

-без префиксов

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

Селективизр

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

Флекси

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

CSS3-пирог

PIE («Прогрессивный 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-шим

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

FlashCanvas

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

МедиаЭлемент.js

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

идентификатор браузера

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

Вебшимс Либ

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

Гифенополия.js

Hyphenopoly.js включает автоматическую расстановку переносов, если она еще не поддерживается браузером для соответствующего языка документа. [13]

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

Примечания

  1. ^ Использование термина «шив» здесь является каламбуром или ошибкой в ​​отношении «шим». [4]

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

  1. ^ Тормайер, Паскаль (9 июня 2023 г.). Освоение CSS Grid: подробное и практическое руководство по созданию красивых макетов с помощью CSS Grid. Packt Publishing Ltd. с. 195. ИСБН 978-1-80461-616-1.
  2. ^ abcd Луис Анхель Перес Кастильо (2019). Говоря о JavaScript.
  3. ^ «Обычно он проверяет, поддерживает ли браузер API. Если нет, полифилл устанавливает свою собственную реализацию. Это позволяет вам использовать API в любом случае».
  4. ^ abc Брюс Лоусон; Реми Шарп. «Знакомство с полифилами». Представляем HTML5 . стр. 276–277.
  5. ^ abc Sharp, Реми (8 октября 2010 г.). «Что такое полифил?» . Проверено 13 января 2012 г.
  6. ^ Ян Хиксон (23 января 2008 г.). «Ошибки, Печаль, Сожаление». Эта информация значительно упрощает создание прокладки совместимости HTML5 для IE7, чем предполагалось ранее.
  7. ^ «Кросс-браузерные полифилы HTML5» . Гитхаб . Архивировано из оригинала 28 сентября 2010 г.
  8. ^ «В чем разница между прокладкой и полифилом?».
  9. ^ Чак Хадсон; Том Ледбеттер (2011). Поваренная книга разработчика HTML5 . п. 121.
  10. ^ "Core-js". Гитхаб . 26 октября 2021 г.
  11. ^ «Airbnb-js-shims против core-js против core-js-pure против es5-shim против es6-shim против js-polyfills против библиотеки полифиллов против полифилл-сервиса | Тенденции NPM» .
  12. ^ "навигатор.id". Сеть разработчиков Mozilla. 30 июня 2012 года. Архивировано из оригинала 3 августа 2012 года . Проверено 9 июля 2012 года .
  13. ^ "Hyphenopoly.js". Гитхаб . 25 сентября 2022 г.

Внешние ссылки