Polyfill

Fragment kodu dostarczający nowoczesną funkcję w starszych przeglądarkach, które jej nie obsługują. Pozwala używać nowych API bez utraty zgodności.

Polyfill to fragment kodu (najczęściej w JavaScript), który dostarcza nowoczesną funkcję językową lub API w środowisku, które samo z siebie jej nie ma — zwykle w starszej przeglądarce. Mówiąc prościej: udajesz, że stara przeglądarka umie coś nowego, doklejając jej brakujący kawałek implementacji. Dzięki temu piszesz kod pod aktualny standard, a użytkownicy na archaicznym sprzęcie i tak dostają działającą stronę.

Nazwa to żart przeniesiony z budowlanki: Polyfilla to brytyjska marka szpachli do dziur w ścianie. Polyfill robi dokładnie to samo z dziurami w przeglądarce — wypełnia braki, zanim ktoś się o nie potknie.

Jak to działa

Polyfill najpierw sprawdza, czy dana funkcja już istnieje. Jeśli tak — nie robi nic i schodzi z drogi. Jeśli nie — dopisuje własną implementację do odpowiedniego obiektu, np. Array.prototype albo globalnego window. To kluczowa różnica wobec zwykłej biblioteki: polyfill celowo naśladuje standardowe API, więc gdy w końcu porzucisz wsparcie dla starych przeglądarek, po prostu usuwasz polyfill i nic w kodzie nie musisz zmieniać.

Warto odróżnić go od transpilacji. Narzędzie jak Babel przepisuje nową składnię (np. arrow functions, async/await) na starszą. Polyfill dokłada brakujące obiekty i metody w czasie działania — bo samej składni nie da się „doszpachlować”, trzeba ją przetłumaczyć przed wysłaniem do przeglądarki.

Przykład z praktyki

Klasyk to fetch albo Promise w starych wersjach Internet Explorera. Zamiast pisać własną wersję, sięgasz po gotowca:

npm install whatwg-fetch core-js

i importujesz go na samej górze wejściowego pliku, zanim wykonasz cokolwiek innego. Popularny jest też serwis polyfill (np. polyfill.io), który po nagłówku User-Agent wysyła dokładnie te łatki, których dana przeglądarka potrzebuje — nowoczesny Chrome dostaje pusty plik, a staruszek pełen zestaw.

Na co uważać

  • Nie ładuj wszystkiego naraz. Komplet polyfilli z core-js to spory ciężar. Używaj tylko tego, co realnie wspierasz — np. przez browserslist i @babel/preset-env z opcją useBuiltIns: "usage".
  • Sprawdź swoją grupę docelową. W 2026 roku polyfille pod IE są najczęściej zbędnym balastem. Dane z analityki powiedzą Ci więcej niż przeczucie.
  • Uważaj na zaufanie do zewnętrznego CDN. Historia domeny polyfill.io z 2024 roku (przejęcie i wstrzykiwanie złośliwego kodu) pokazała, że cudzy skrypt na Twojej stronie to ryzyko — rozważ self-hosting.

Pojęcia powiązane: transpilacja, Babel, shim, feature detection, browserslist, progressive enhancement, core-js.