Buforowanie (cache)
Moduł 6: Szybkość · Czas czytania: 9 minut
Cel lekcji: Po tej lekcji będą Państwo potrafili wyjaśnić, jakie rodzaje pamięci podręcznej (cache) istnieją, oraz poprawnie skonfigurować i sprawdzić pamięć podręczną strony (paginacache).
Kluczowe pojęcia: pamięć podręczna strony, pamięć podręczna przeglądarki, Cache-Control, pamięć podręczna obiektów, Redis, OPcache, CDN, wtyczka cache, LiteSpeed Cache, wyjątki (zalogowany, koszyk, finalizacja zamówienia), czyszczenie pamięci podręcznej, podwójne wtyczki cache
Cache: nie wykonuj tej samej pracy dwa razy
Pamięć podręczna (cache) przechowuje wynik wykonanej pracy, dzięki czemu następnym razem nie trzeba jej powtarzać. W witrynie WordPress istnieją cztery miejsca, w których to się dzieje, od największego do najmniejszego:
| Rodzaj | Co jest przechowywane | Gdzie | Efekt |
|---|---|---|---|
| Pamięć podręczna strony | Kompletny kod HTML strony | Na serwerze (lub w CDN) | Największy zysk: pomijane są PHP, wtyczki i baza danych |
| Pamięć podręczna przeglądarki | Arkusze stylów, skrypty, obrazy, czcionki | W przeglądarce odwiedzającego | Kolejna strona ładuje się szybciej, ponieważ pliki już tam są |
| Pamięć podręczna obiektów | Wyniki zapytań do bazy danych | W pamięci serwera (Redis, Memcached) | Pomaga tam, gdzie pamięć podręczna strony nie działa, np. przy zalogowanych użytkownikach i sklepach internetowych |
| OPcache | Przetłumaczony kod PHP | W pamięci PHP | PHP nie musi za każdym razem odczytywać plików od nowa; u większości dostawców hostingu jest domyślnie włączony |
Pamięć podręczna strony
Lekcja 1.2 pokazała to: bez pamięci podręcznej WordPress przy każdej wizycie tworzy całą stronę od nowa. Dzięki pamięci podręcznej strony pierwszy odwiedzający ją tworzy, a kolejni otrzymują zapisany kod HTML. Czas TTFB wynoszący sekundę może w ten sposób zmniejszyć się do kilku setnych sekundy, a Państwa pakiet hostingowy może obsłużyć znacznie więcej odwiedzających jednocześnie.
Sposób uzyskania pamięci podręcznej strony zależy od serwera WWW:
- LiteSpeed (wiele hostingów współdzielonych, w tym WebOké): serwer WWW ma własną pamięć podręczną. Bezpłatna wtyczka LiteSpeed Cache steruje nią z poziomu WordPressa: które strony mogą trafić do pamięci podręcznej, kiedy są czyszczone. Ponieważ pamięć podręczna znajduje się w serwerze WWW, PHP w ogóle nie jest uruchamiane dla zapisanej strony.
- Apache lub nginx: wtyczka cache, która zapisuje kod HTML jako pliki, np. WP Super Cache, W3 Total Cache lub płatna wtyczka, taka jak WP Rocket. Albo pamięć podręczna obsługiwana przez dostawcę hostingu na poziomie serwera.
- Zarządzany hosting WordPress często ma własną pamięć podręczną; w takim przypadku zwykle nie instaluje się wtyczki cache.
Proszę wybrać jedną opcję. Dwie wtyczki cache działające jednocześnie (na przykład LiteSpeed Cache i WP Rocket) przeszkadzają sobie nawzajem: podwójna praca, strony, które nie są czyszczone, dziwne błędy. Na serwerze LiteSpeed wtyczka LiteSpeed Cache współpracuje z pamięcią podręczną serwera WWW; inna wtyczka cache nie jest w stanie tego zrobić.
Co nie może trafić do pamięci podręcznej
Pamięć podręczna strony daje wszystkim ten sam kod HTML. To nie działa poprawnie w przypadku stron, które różnią się w zależności od odwiedzającego:
- zalogowani użytkownicy (pasek administracyjny, „Witaj, Lisa”);
- koszyk, finalizacja zamówienia i Moje konto w sklepie internetowym;
- strony z formularzem z jednorazowym kodem (nonce), który po pewnym czasie wygasa;
- strony, które na podstawie lokalizacji, języka lub pliku cookie pokazują coś innego.
Dobre wtyczki cache automatycznie pomijają zalogowanych użytkowników i znane strony WooCommerce. W przypadku innych wtyczek (sekcja dla członków, system rezerwacji) trzeba samodzielnie ustawić wyjątki. Oznaka, że coś idzie nie tak: odwiedzający widzi koszyk kogoś innego lub formularz pokazuje „wygasło” albo „nieprawidłowe żądanie”.
Czyszczenie: kiedy pamięć podręczna jest nieaktualna?
Jeśli zmodyfikują Państwo stronę, zapisana wersja musi zniknąć. Wtyczki cache przy zapisywaniu wpisu zwykle czyszczą tę stronę, stronę główną i archiwa. Przy zmianie menu, motywu lub widżetu często trzeba wyczyścić całą pamięć podręczną. Jeśli po zmianie widzą Państwo starą wersję, proszę wyczyścić pamięć podręczną (na pasku administracyjnym wtyczki cache) i sprawdzić efekt w oknie prywatnym, aby własna pamięć podręczna przeglądarki nie zakłócała wyniku.
Pamięć podręczna przeglądarki
Serwer informuje przeglądarkę za pomocą nagłówków, jak długo może przechowywać plik:
cache-control: public, max-age=31536000Oznacza to: przechowuj to przez rok. Dla arkuszy stylów, skryptów, czcionek i obrazów długi czas jest jak najbardziej odpowiedni, ponieważ WordPress przy nowej wersji dodaje za adresem inny parametr ?ver=, dzięki czemu przeglądarka widzi go jako nowy plik. Dla samego kodu HTML zwykle stosuje się krótki czas (lub brak), aby odwiedzający szybko widzieli zmiany.
Wielu dostawców hostingu i wtyczek cache zajmuje się tym automatycznie. W zadaniu tej lekcji sprawdzą to Państwo samodzielnie.
Pamięć podręczna obiektów i Redis
Pamięć podręczna strony nie pomaga przy zalogowanych użytkownikach ani przy koszyku. Tam pomaga pamięć podręczna obiektów: WordPress przechowuje wynik zapytań do bazy danych w pamięci, w programie takim jak Redis lub Memcached. Gdy następnym razem pojawi się to samo zapytanie, WordPress pobiera odpowiedź z pamięci zamiast z bazy danych.
Jest to szczególnie przydatne dla sklepów internetowych, witryn dla członków i witryn z wieloma zalogowanymi redaktorami. Dla zwykłej witryny informacyjnej z pamięcią podręczną strony różnica jest niewielka. Pamięć podręczna obiektów wymaga, aby dostawca hostingu oferował Redis lub Memcached; następnie włącza się ją za pomocą wtyczki (LiteSpeed Cache to potrafi, istnieją też osobne wtyczki).
CDN
CDN (content delivery network) to sieć serwerów w wielu miejscach na świecie, które przechowują kopie Państwa plików (a czasem całych stron). Odwiedzający otrzymuje je z najbliższego serwera. Pomaga to szczególnie w przypadku odwiedzających z daleka i przy dużym ruchu. Dla strony skierowanej do lokalnych odbiorców, obsługiwanej przez lokalny serwer, zysk jest niewielki. CDN z funkcją proxy (taki jak Cloudflare) zmienia również Państwa DNS i certyfikat (kurs DNS, lekcja 7.5); proszę nie robić tego bez zrozumienia, co to oznacza.
W praktyce: jak to wygląda w panelu
Jako przykład używamy LiteSpeed Cache na serwerze LiteSpeed. Inne wtyczki cache mają podobne ustawienia pod innymi nazwami.
- Proszę zainstalować i aktywować LiteSpeed Cache w Wtyczki > Dodaj nową.
- Proszę otworzyć LiteSpeed Cache > Cache: opcja „Włącz pamięć podręczną” jest włączona, opcja „Pamięć podręczna dla zalogowanych użytkowników” jest wyłączona (chyba że wiedzą Państwo, co robią).
- W przypadku sklepu internetowego: proszę sprawdzić w sekcji Pomiń, czy koszyk, finalizacja zamówienia i Moje konto są tam uwzględnione (przy WooCommerce dzieje się to automatycznie).
- Proszę na razie pozostawić wyłączone pozostałe elementy (optymalizacja CSS i JavaScript, obrazów). Proszę włączać je pojedynczo i testować po każdym kroku: to właśnie te elementy czasem psują motyw.
- Proszę sprawdzić w oknie prywatnym za pomocą narzędzi deweloperskich (F12, Sieć, pierwsze żądanie): przy drugim wczytaniu powinien pojawić się nagłówek
x-litespeed-cache: hit.
Podsumowanie
- Istnieją cztery rodzaje pamięci podręcznej: strony (największy zysk), przeglądarki, obiektów i OPcache.
- Na serwerze LiteSpeed wtyczka LiteSpeed Cache steruje pamięcią podręczną serwera WWW; na Apache lub nginx używa się innej wtyczki cache. Proszę wybrać jedną.
- Zalogowani użytkownicy, koszyk, finalizacja zamówienia i strony osobiste nie powinny trafiać do pamięci podręcznej strony.
- Proszę czyścić pamięć podręczną po zmianach w menu lub motywie i sprawdzać efekt w oknie prywatnym.
- Pamięć podręczna obiektów (Redis) pomaga w sklepach internetowych i przy zalogowanych użytkownikach; CDN pomaga głównie przy dużych odległościach i dużym ruchu.
Quiz
Zadanie
Zadanie A6.2: Czy Państwa pamięć podręczna stron działa? Proszę wpisać adres swojej strony. Program dwukrotnie wczyta stronę główną krótko po sobie, bez plików cookie, i przy drugim razie sprawdzi nagłówki wskazujące trafienie w pamięci podręcznej (x-litespeed-cache: hit, x-cache: HIT, cf-cache-status: HIT, wartość age większą od 0, lub nagłówek innej znanej pamięci podręcznej). Następnie program pobierze jeden arkusz stylów ze strony głównej i sprawdzi, czy przeglądarka może go przechowywać przez co najmniej siedem dni (cache-control: max-age lub expires). Proszę zanotować, z jakiej pamięci podręcznej Państwo korzystają.
Dalsza lektura
Te artykuły opisują kroki w panelach WebOké; w innych panelach działają one w podobny sposób.
- Instrukcja DirectAdmin 18.3: Moja strona internetowa działa wolno
- Instrukcja DirectAdmin 15.7: Redis
- Moja strona internetowa działa wolno lub zużywa zbyt dużo CPU: jak przyspieszyć jej działanie
- OPcache: 30 sekund opóźnienia przy zmianie pliku PHP
- Czy gzip jest włączony w DirectAdmin i LiteSpeed lub Apache
- Cache w WordPressie (developer.wordpress.org, w języku angielskim): https://developer.wordpress.org/advanced-administration/performance/cache/
