0Pricing
React Academy · Lekcja

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

  1. Podstawowe pojęcia SWR: stale-while-revalidate
  2. Hook useSWR: pobieranie, ładowanie i błędy
  3. Mutacje i optymistyczne aktualizacje z SWR
  4. SWR a React Query: wybór właściwego narzędzia
← Powrót do React Academy