Preconnect i DNS-prefetch – kiedy warto używać

Preconnect i DNS-prefetch – kiedy warto używać

Preconnect i DNS-prefetch to dwa mechanizmy, które potrafią znacząco wpłynąć na czas ładowania strony, zwłaszcza gdy korzystasz z zewnętrznych serwisów, fontów czy CDN-ów. W praktyce poprawne zastosowanie tych wskazówek może skrócić czas do załadowania krytycznych zasobów, ale niewłaściwe użycie przynosi marnowanie zasobów i potencjalne problemy prywatności. Poniżej znajdziesz wyczerpujące omówienie, kiedy i jak stosować te techniki oraz jakie są ich ograniczenia.

Czym są preconnect i DNS-prefetch

DNS-prefetch i preconnect należą do tzw. resource hints — podpowiedzi przeglądarce, aby przygotowała połączenia do zewnętrznych domen zanim nastąpi żądanie zasobu. Oba mechanizmy redukują opóźnienia związane z nawiązywaniem połączeń sieciowych, ale działają na różnych etapach procesu ładowania:

  • DNS-prefetch inicjuje jedynie rozwiązywanie nazwy domeny (DNS lookup). Dzięki temu przeglądarka ma już adres IP, gdy później zażądasz zasobu.
  • Preconnect idzie dalej — oprócz DNS wykonuje także TCP handshake i negocjację TLS, co oznacza, że połączenie jest już otwarte i gotowe do przesyłu danych.

W praktyce użycie preconnect może skrócić czas dostarczenia pierwszego bajtu (TTFB), podczas gdy DNS-prefetch redukuje tylko opóźnienie związane z samym rozpoznaniem domeny. Oba mechanizmy są wykonywane w tle i nie blokują głównego wątku renderowania, ale ich uruchamianie zużywa zasoby sieciowe i systemowe.

Składnia i atrybuty

Standardowe, najczęściej używane deklaracje wyglądają tak:

<link rel=”dns-prefetch” href=”//example.com”>

<link rel=”preconnect” href=”https://example.com” crossorigin>

Użycie atrybutu crossorigin przy preconnect jest istotne, gdy łączysz się z zasobami wymagającymi poświadczeń lub chcesz przed nawiązaniem połączenia otrzymać dostęp do zasobów z odpowiednimi nagłówkami CORS (np. fonty).

Kiedy warto używać

Nie każda domena wymaga preconnect lub dns-prefetch. Optymalny wybór zależy od tego, jak krytyczny jest zasób i jak wcześnie strona zażąda połączenia. Oto najważniejsze scenariusze, w których zastosowanie tych mechanizmów ma sens:

  • Zasoby krytyczne ładowane z zewnętrznych serwisów: fonty (webfonts), biblioteki skryptów, CSS hostowane na CDN — jeśli są potrzebne do wyrenderowania pierwszego ekranu, preconnect może przyspieszyć LCP i FCP.
  • Serwisy analityczne i reklamowe — gdy skrypty są ładowane dopiero po chwili, można użyć dns-prefetch, aby zredukować opóźnienie przy ich późniejszym załadowaniu.
  • Połączenia API lub microservices, które są wywoływane zaraz po załadowaniu strony — preconnect skraca czas do pierwszego żądania.
  • Jeśli domena jest wielokrotnie używana na stronie (np. CDN hostujący wiele obrazów), wcześniejsze rozwiązywanie DNS ma sens.

Uwaga: w środowisku, gdzie większość ruchu przebiega po HTTP/2 lub HTTP/3 i korzysta z jednego połączenia do serwera, korzyści z preconnect mogą być mniejsze. Jednocześnie dla wielu domen zewnętrznych (third-party) preconnect może nadal dawać realne zyski.

Jak właściwie wdrożyć

Wdrożenie powinno być oparte na analizie rzeczywistych żądań Twojej strony. Najpierw ustal, które domeny są krytyczne dla użytkownika podczas pierwszego renderu, a potem dodaj wskazówki. Poniżej znajduje się praktyczny przewodnik:

Krok 1 — audyt żądań

  • Sprawdź, jakie domeny są wywoływane na pierwszym widoku (network waterfall w DevTools).
  • Zidentyfikuj zasoby blokujące renderowanie (fonty, CSS, skrypty synchroniczne).

Krok 2 — wybór mechanizmu

  • Jeśli potrzebujesz tylko szybszego rozpoznania domeny, użyj dns-prefetch.
  • Jeśli chcesz, by połączenie było gotowe (TCP/TLS), wybierz preconnect i pamiętaj o crossorigin tam, gdzie to konieczne.
  • Nie nakładaj preconnect na domeny, z których ładujesz rzadko lub tylko po długim czasie od załadowania strony.

Krok 3 — umieszczenie w kodzie

Wstaw linki w sekcji <head> tak, aby przeglądarka mogła je wykonać jak najwcześniej. Przykłady:

<link rel=”dns-prefetch” href=”//fonts.gstatic.com”>

<link rel=”preconnect” href=”https://fonts.gstatic.com” crossorigin>

W niektórych przypadkach warto użyć kombinacji: dns-prefetch dla wielu domen oraz preconnect dla kilku najważniejszych. Dzięki temu przeglądarka nie otworzy równocześnie zbyt wielu połączeń, a najbardziej krytyczne będą gotowe.

Analiza wpływu na wydajność i metryki

Przed i po wdrożeniu resource hints warto zmierzyć ich wpływ na kluczowe metryki. Najważniejsze z nich to:

  • LCP (Largest Contentful Paint) — często poprawia się, gdy fonty lub obrazy krytyczne szybciej zaczynają się ładować dzięki preconnect.
  • TTFB (Time To First Byte) — może spaść jeśli preconnect uprzednio wykona handshake.
  • FCP (First Contentful Paint) — także może zyskać przy szybszym dostępie do zasobów.

Narzędzia do pomiaru:

  • Chrome DevTools (zakładka Network i Performance)
  • Lighthouse — aby uzyskać sugestie i porównać audyty przed/po
  • WebPageTest — szczegółowe waterfally i breakdown opóźnień

Pamiętaj jednak, że zmiany wprowadzone na jednej stronie testowej mogą nie odzwierciedlać wszystkich wariantów użytkowników (różne sieci, przeglądarki, urządzenia). Testuj na reprezentatywnych środowiskach i z wykorzystaniem rzeczywistych użytkowników (RUM).

Najczęstsze błędy i dobre praktyki

Zastosowanie preconnect i dns-prefetch bez zastanowienia może prowadzić do błędów. Oto lista typowych pułapek oraz rekomendowane praktyki:

  • Preconnect do zbyt wielu domen — otwieranie wielu połączeń jednocześnie zwiększa obciążenie sieci i może działać odwrotnie do zamierzonego. Stosuj preconnect tylko tam, gdzie to istotne.
  • Pominięcie crossorigin przy preconnect do fontów — spowoduje to, że połączenie może nie działać zgodnie z oczekiwaniami przy żądaniach wymagających CORS.
  • Mylenie z prefetch i preload — to trzy różne mechanizmy: prefetch służy do pobierania zasobów na przyszłość (np. do następnej strony), preload informuje przeglądarkę o krytycznym zasobie, a preconnect/dns-prefetch dotyczą połączeń.
  • Brak monitoringu — wprowadź metryki i sprawdzaj wpływ zmian w czasie, aby upewnić się, że nie następuje pogorszenie doświadczenia dla części użytkowników.
  • Ignorowanie warstwy sieciowej — jeśli większość użytkowników korzysta z HTTP/2+ i jednej wspólnej domeny, korzyści mogą być minimalne; analiza ruchu powinna poprzedzać wdrożenie.

Dobre praktyki krótkie podsumowanie

  • Używaj preconnect dla kilku, naprawdę krytycznych domen.
  • Stosuj dns-prefetch tam, gdzie preconnect byłby nadmiarowy.
  • Dodaj crossorigin tam, gdzie zasoby tego wymagają (np. webfonts).
  • Testuj i mierz efekty na rzeczywistych użytkownikach.

Bezpieczeństwo i prywatność

Warto pamiętać, że każde wcześniejsze nawiązanie połączenia z domeną third-party może mieć konsekwencje prywatności: serwisy reklamowe lub analityczne mogą już „widzieć” połączenia z Twojej strony, nawet jeśli nie załadowały jeszcze skryptów. Dlatego:

  • Oceniaj zaufanie do domen, z którymi łączysz się automatycznie.
  • Unikaj preconnect do domen, które mogą zbierać dane wrażliwe, jeśli nie jest to konieczne.
  • Dokumentuj decyzje dotyczące resource hints w zespole, aby zachować spójność i audytowalność.

Stosując się do powyższych zasad, możesz osiągnąć realne przyspieszenie strony bez nadmiernego obciążenia infrastruktury i bez negatywnego wpływu na prywatność użytkowników.