Polyfill
Polyfill to fragment kodu, najczęściej napisany w JavaScript, który dostarcza nowoczesną funkcję przeglądarce lub środowisku uruchomieniowemu, jeszcze jej natywnie nieobsługującemu. Dzięki temu deweloper może korzystać z nowych możliwości języka, mając pewność, że kod zadziała także na starszych przeglądarkach.
Jak działa polyfill?
Polyfill najpierw sprawdza, czy dana funkcja jest już dostępna w środowisku. Jeśli tak — nie robi nic i pozwala działać natywnej, szybszej implementacji. Jeśli funkcji brakuje, polyfill „dokłada" własną wersję, uzupełniając brakujący element interfejsu programistycznego. Ten mechanizm nazywa się wykrywaniem funkcji (feature detection) i zapewnia, że kod nie nadpisuje niepotrzebnie tego, co już działa.
- Feature detection — warunkowe sprawdzenie obecności metody lub obiektu przed jego zdefiniowaniem.
- Uzupełnienie API — dostarczenie brakującej funkcji zgodnej ze standardem.
- Przezroczystość — po załadowaniu polyfilla reszta aplikacji korzysta z funkcji tak, jakby była natywna.
Zastosowanie w praktyce
Polyfille są kluczowe wszędzie tam, gdzie liczy się zgodność międzyprzeglądarkowa:
- Nowe API przeglądarki — np. dostarczenie obsługi metody tablicowej lub obiektu Promise w starszych przeglądarkach.
- Aplikacje o szerokim zasięgu — sklepy i portale, które muszą działać na wielu urządzeniach i wersjach oprogramowania.
- Współpraca z transpilerem — polyfille często idą w parze z Babelem, który tłumaczy składnię, podczas gdy polyfill dokłada brakujące funkcje.
Warto ładować tylko te polyfille, które są rzeczywiście potrzebne — nadmiar zwiększa rozmiar plików i spowalnia stronę. Nowoczesne narzędzia budowania potrafią dobierać zestaw polyfilli automatycznie na podstawie deklarowanego zakresu obsługiwanych przeglądarek.
Nazwa „polyfill" nawiązuje do masy szpachlowej (ang. Polyfilla) używanej do wypełniania ubytków w ścianach — polyfill w podobny sposób „zapełnia dziury" w możliwościach przeglądarki. Wraz z tym, jak nowe funkcje stają się powszechnie wspierane, odpowiadające im polyfille tracą rację bytu i można je usuwać, odchudzając kod. Dlatego dobrą praktyką jest okresowy przegląd, które polyfille są wciąż potrzebne w świetle aktualnie obsługiwanych przeglądarek. Warto też pamiętać, że polyfille dostarczają brakującą funkcjonalność, ale rzadko dorównują wydajnością implementacjom natywnym — nie należy więc ładować ich „na zapas", jeśli docelowe środowisko obsługuje daną funkcję samodzielnie.
Powiązane pojęcia
Najczęstsze pytania
Czym różni się polyfill od transpilera?
Transpiler (np. Babel) przekształca nowoczesną składnię na starszą, zrozumiałą dla przeglądarki. Polyfill natomiast dostarcza brakującą funkcję lub obiekt w czasie działania kodu. Oba narzędzia często stosuje się razem, bo rozwiązują różne aspekty zgodności.
