Podstawowe pojęcia SWR: stale-while-revalidate
Zrozumieć strategię cache SWR: natychmiast udostępniać nieaktualne dane, ponownie je weryfikować w tle i aktualizować po pobraniu świeżych
Podstawowe pojęcia SWR: stale-while-revalidate to bezpłatna lekcja React Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej React Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs React Academy zawiera 4 lekcji w sumie.
Co oznacza skrót SWR
SWR to skrót od Stale-While-Revalidate — strategii cache'owania HTTP zdefiniowanej w RFC 5861. Strategia polega na natychmiastowym udostępnieniu użytkownikowi nieaktualnych (zbuforowanych) danych, a następnie ponownym zweryfikowaniu ich w tle i zaktualizowaniu interfejsu po nadejściu świeżych danych.
To podejście stawia na odczuwaną wydajność: użytkownicy widzą dane natychmiast, zamiast czekać na pełną podróż w obie strony przez sieć.
Korzyść dla doświadczenia użytkownika
Przy tradycyjnych wzorcach ładowania użytkownicy widzą wskaźnik ładowania przy każdej nawigacji. W przypadku SWR od razu widzą ostatnio znane dane, a interfejs jest dyskretnie aktualizowany w tle, jeśli dane uległy zmianie.
Dzięki temu aplikacje wydają się znacznie szybsze, a obciążenie poznawcze związane ze stanami ładowania jest mniejsze.
Kiedy SWR uruchamia rewalidację
SWR automatycznie przeprowadza rewalidację danych, gdy: okno przeglądarki ponownie zyskuje fokus (użytkownik przełącza karty i wraca), połączenie sieciowe zostaje przywrócone po pracy offline, wywołano mutate(), lub uruchamia się timer refreshInterval o konfigurowalnym interwale.
Te automatyczne wyzwalacze zapewniają aktualność danych bez konieczności ręcznego zarządzania logiką ponownego pobierania przez programistę.
Maszyna stanów SWR
Klucz SWR może znajdować się w jednym z kilku stanów: loading (brak danych w pamięci podręcznej, trwa pierwsze pobieranie), revalidating (dane są dostępne w pamięci podręcznej, trwa odświeżanie w tle), error (żądanie zakończyło się niepowodzeniem) lub success (dostępne są świeże dane).
Zrozumienie tych stanów pomaga budować poprawne szkielety ładowania i interfejsy obsługi błędów.
Globalna pamięć podręczna SWR
SWR utrzymuje globalną pamięć podręczną w pamięci operacyjnej, indeksowaną kluczem żądania (zwykle ciągiem URL). Każdy komponent, który żąda danych za pomocą tego samego klucza, otrzymuje tę samą wartość z pamięci podręcznej i uczestniczy w tym samym cyklu rewalidacji.
Ta automatyczna deduplikacja oznacza, że 10 komponentów może wywołać useSWR z tym samym kluczem, a mimo to zostanie wykonane tylko jedno żądanie sieciowe.
Funkcja fetcher
SWR oddziela logikę zarządzania pamięcią podręczną od faktycznego pobierania danych. Należy dostarczyć funkcję fetcher: funkcję asynchroniczną, która przyjmuje klucz i zwraca dane.
Funkcję fetcher można wymienić: można użyć fetch, axios, graphql-request lub dowolnego asynchronicznego źródła danych. SWR obsługuje cache'owanie i rewalidację niezależnie od sposobu działania funkcji fetcher.
Konfigurowanie globalnego fetchera
Należy opakować aplikację w SWRConfig z właściwością value zawierającą funkcję fetcher: value={{ fetcher: (url) => fetch(url).then(r => r.json()) }}. Każde wywołanie useSWR, w którym pominięto argument fetcher, korzysta z tej globalnej wartości domyślnej.
Dzięki temu konfiguracja API (bazowy URL, nagłówki uwierzytelniania) jest scentralizowana w jednym miejscu i nie trzeba jej powtarzać przy każdym wywołaniu hooka.
SWR a tradycyjne pobieranie danych
Klasyczny wzorzec wykorzystuje useEffect + useState do ręcznego zarządzania stanami ładowania, danych i błędów. SWR zastępuje to wszystko pojedynczym wywołaniem hooka, który automatycznie obsługuje cache'owanie, deduplikację, odświeżanie w tle i ponawianie żądań po błędach.
Redukcja ilości kodu jest znacząca: typowy komponent pobierający dane skraca się z ponad 20 wierszy do 3.
Projektowanie kluczy pamięci podręcznej
Klucz jednoznacznie identyfikuje żądanie. W prostych przypadkach należy użyć ciągu URL. W przypadku żądań sparametryzowanych należy użyć klucza tablicowego: [url, params], gdzie params jest stabilnym obiektem lub ciągiem znaków. null wyłącza żądanie.
Dobry projekt kluczy gwarantuje, że powiązane żądania współdzielą wpisy pamięci podręcznej, a niezależne żądania nie powodują kolizji.
Rewalidacja a narzut sieciowy
SWR inteligentnie zarządza rewalidacją: dedupingInterval (domyślnie 2 sekundy) zapobiega jednoczesnemu uruchomieniu wielu rewalidacji, gdy wiele komponentów zostanie zamontowanych naraz. W ramach okna deduplikacji dla każdego klucza wykonywane jest tylko jedno żądanie.
Zapobiega to problemom typu thundering herd, często spotykanym w dużych drzewach komponentów, w których wiele komponentów pobiera te same dane.
SWR w kontekście Next.js
SWR jest tworzony przez Vercel, firmę stojącą za Next.js, a integracja przebiega bezproblemowo. getServerSideProps lub getStaticProps mogą wstępnie pobrać dane, a SWR przeprowadza hydratację po stronie klienta na podstawie tej wstępnie pobranej wartości.
Dzięki temu otrzymujemy początkowy kod HTML renderowany po stronie serwera z automatyczną rewalidacją po stronie klienta podczas montowania, łącząc najlepsze cechy SSR i SWR.
Kiedy SWR przeprowadza rewalidację
Co z poniższych elementów domyślnie NIE wyzwala rewalidacji SWR?
Podsumowanie lekcji
SWR implementuje strategię Stale-While-Revalidate: natychmiast udostępnia dane z pamięci podręcznej, przeprowadza rewalidację w tle i aktualizuje interfejs po uzyskaniu świeżych danych. Rewalidacja jest uruchamiana przy odzyskaniu fokusu, ponownym połączeniu z siecią, wywołaniu mutate oraz podczas odpytywania. Globalna pamięć podręczna deduplikuje żądania między komponentami, a funkcję fetcher można w pełni wymienić.
Ten model znacznie upraszcza kod pobierający dane, zapewniając jednocześnie większą odczuwaną wydajność.
Często zadawane pytania
Czy lekcja „Podstawowe pojęcia SWR: stale-while-revalidate” jest bezpłatna?
Tak — pełny tekst „Podstawowe pojęcia SWR: stale-while-revalidate” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu React Academy, przejdź na CoddyKit PRO. Kurs React Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Podstawowe pojęcia SWR: stale-while-revalidate”?
Zrozumieć strategię cache SWR: natychmiast udostępniać nieaktualne dane, ponownie je weryfikować w tle i aktualizować po pobraniu świeżych Ćwiczysz React Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć React Academy?
Nie wymagamy żadnego doświadczenia. React Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Podstawowe pojęcia SWR: stale-while-revalidate”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji React Academy?
Tak. Każda lekcja React Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Podstawowe pojęcia SWR: stale-while-revalidate
- Hook useSWR: pobieranie, ładowanie i błędy
- Mutacje i optymistyczne aktualizacje z SWR
- SWR a React Query: wybór właściwego narzędzia