- Opublikowano
Jak uciąłem kosztowne skoki transferu, wyłączając prefetch linków w Nuxcie
- Autorzy
Odkrycie: nieoczekiwany skok transferu
Kilka dni temu optymalizowałem odziedziczony projekt w Nuxt 3 i zauważyłem dziwne skoki „Fast Data Transfer” na Vercelu. Aplikacja nie robiła niczego ciężkiego, a mimo to zużycie sieci wyglądało na mocno przesadzone.
Jedna rzecz rzucała się w oczy: każdy wewnętrzny link doczytywał treść w momencie, w którym pojawiał się w viewporcie.
Okazało się, że mechanizm prefetcha w nuxt-link pobierał z wyprzedzeniem masę chunków — zamieniając zwykłą nawigację po stronie w proces żarłocznie zjadający transfer.
Co odkryłem: prefetch nie jest darmowy
Domyślnie Nuxt włącza smart prefetching — czyli gdy <nuxt-link> pojawi się na ekranie, framework automatycznie pobiera kod tamtej strony. Robi to przez IntersectionObserver i requestIdleCallback, co samo w sobie jest sprytne — ale w większych aplikacjach z dużą liczbą linków kończy się zalewem niepotrzebnych requestów.
W praktyce oznaczało to, że użytkownicy odpalali dziesiątki pobrań stron samym scrollowaniem. Wszystko to lądowało na moim rachunku od Vercela.
Poprawka: globalne wyłączenie prefetcha
Potrzebowałem szybkiego i skutecznego sposobu, żeby to zatrzymać. Zajrzenie do dokumentacji pokazało, że prefetch da się wyłączyć globalnie w nuxt.config.ts:
export default defineNuxtConfig({
experimental: {
defaults: {
nuxtLink: {
prefetch: false,
},
},
},
})
Albo prościej:
export default {
router: {
prefetchLinks: false,
},
}
Oba sposoby powstrzymują Nuxta przed wstrzykiwaniem tagów <link rel="prefetch"> dla chunków stron ([Nuxt][1], [Medium][2]).
Efekty: szybciej, lżej i taniej
- Zużycie transferu znacząco spadło
- Koszty „Fast Data Transfer” na Vercelu wróciły do normy
- Wydajność stron pozostała wysoka — bez marnowanych requestów
- Większa kontrola nad tym, co faktycznie jest prefetchowane
Wnioski
- Odziedziczone domyślne ustawienia — zwłaszcza takie jak smart prefetch — potrafią po cichu drenować transfer.
- Nuxt daje kontrolę — wyłącz prefetch globalnie, jeśli budżet znaczy dla ciebie więcej niż ultraagresywna szybkość nawigacji.
- Na stronach z dużą liczbą linków wyłącz go domyślnie i włączaj ręcznie tylko na kluczowych linkach.
- Dashboard kosztów na Vercelu pozwolił mi szybko namierzyć problem — to kluczowy element całego procesu optymalizacji.