Przejdź do treści
Warsztat

Strona przez chwilę pokazuje się bez stylów. Znalazłem przyczynę w hookach czyszczenia cache

Odwiedzający trafiali na stronę wyglądającą jak surowy HTML z lat dziewięćdziesiątych. Winowajcą nie był motyw ani CDN, a hook czyszczący cały katalog cache przy każdym nowym wpisie.

6 min czytania
Strona przez chwilę pokazuje się bez stylów. Znalazłem przyczynę w hookach czyszczenia cache

👁 111 przeczytań

// w skrócie
  • Przyczyną chwilowego wyświetlania strony bez stylów był hook wtyczki cache, który przy każdej publikacji usuwał zminifikowane pliki CSS i JS razem z resztą cache.
  • Serwis publikujący kilkanaście wpisów dziennie miał kilkanaście takich okien na dobę, podczas gdy serwis z dwoma tekstami tygodniowo praktycznie tego nie zauważy.
  • Rozwiązanie polega na ograniczeniu czyszczenia przy publikacji wyłącznie do samego wpisu, strony głównej, listingu kategorii i kanału RSS - plik CSS nie zmienia się przy nowym wpisie.

Na kilku podstronach przez moment widać było surowy HTML bez formatowania - nagłówki jeden pod drugim, linki na niebiesko, zero układu kolumn. Efekt pojawiał się tylko czasem i tylko dla części odwiedzających, więc długo nie dawał się złapać. Przyczyną okazał się hook wtyczki cache, który przy każdej publikacji czyścił całość razem z plikami CSS i JS.

Wniosek w jednym akapicie

Jeśli wtyczka cache przy publikacji nowego wpisu czyści cały katalog cache razem ze zminifikowanymi plikami CSS i JS, to na krótką chwilę kasuje pliki, do których wygenerowany wcześniej HTML już się odwołuje. Przeglądarka dostaje dokument z linkiem do arkusza stylów, którego fizycznie nie ma na dysku, i renderuje go bez stylów. Rozwiązanie jest banalne: czyścić punktowo sam wpis, stronę główną, listing kategorii i kanał RSS. Nowy artykuł nie zmienia zawartości pliku CSS, więc nie ma żadnego powodu, żeby ten plik znikał.

Jak wyglądał objaw

Strona bez stylów to klasyczny FOUC, czyli flash of unstyled content. Zwykle tłumaczy się go asynchronicznym wczytywaniem czcionek albo krytycznym CSS wstrzykiwanym z opóźnieniem. Tutaj mechanizm był inny i prostszy: arkusz nie wczytywał się z opóźnieniem, tylko go nie było.

Dokument HTML serwowany z cache zawierał odwołanie do konkretnego zminifikowanego pliku ze znacznikiem w nazwie. Taki znacznik jest generowany w momencie tworzenia pliku i wpisywany na sztywno do HTML-a. Jeśli plik zostanie usunięty, a HTML pozostanie, odwołanie wisi w powietrzu. Serwer odpowiada czterysta czterech, przeglądarka wzrusza ramionami i rysuje treść bez żadnego formatowania.

Okno było wąskie - liczone w sekundach, czasem dziesiątkach sekund, zależnie od tego, kiedy ktoś wszedł i jak szybko odbudowała się minifikacja. Dlatego w testach ręcznych problem nie występował prawie nigdy. Odświeżało się stronę, wszystko działało, temat zamykano jako niereprodukowalny.

Skąd wzięło się kilkanaście czyszczeń na dobę

Wtyczka wołała przy każdej publikacji czyszczenie całości razem z plikami CSS i JS. Przy kilkunastu wpisach dziennie katalog był czyszczony kilkanaście razy na dobę. Każde takie czyszczenie to jedno potencjalne okno, w którym HTML wskazuje na nieistniejący arkusz.

Warto zwrócić uwagę na skalę: to nie jest awaria, która zdarza się raz w miesiącu przy aktualizacji motywu. To zdarzenie powtarzalne, wpisane w normalny rytm pracy redakcji. Im więcej publikujesz, tym częściej otwierasz okno. Serwis, który publikuje dwa teksty w tygodniu, praktycznie tego nie zauważy. Serwis newsowy z kilkunastoma wpisami dziennie będzie miał kilkanaście okien dziennie i regularne skargi czytelników, że wordpress wolno działa albo wygląda jak zepsuty.

Pełne czyszczenie kontra punktowa inwalidacja

Tabela poniżej pokazuje, co faktycznie zmieniło się w zachowaniu systemu po zmianie strategii. Zawiera wyłącznie te dane, które udało się jednoznacznie odczytać z konfiguracji i logów - bez szacunków i bez uśrednień, których nie mam czym poprzeć.

ElementPrzed poprawkąPo poprawce
Zakres czyszczenia przy publikacjiCałość razem z plikami CSS i JSSam wpis, strona główna, kategorie, kanał RSS
Czyszczenia katalogu na dobęKilkanaścieBrak czyszczeń całości wywołanych publikacją
Zminifikowane CSS po publikacjiUsuwane i odbudowywaneZostaje bez zmian
Ryzyko HTML-a z linkiem do nieistniejącego arkuszaWystępuje przy każdym czyszczeniuWyeliminowane dla scenariusza publikacji

Kluczowa obserwacja jest logiczna, nie pomiarowa: nowy artykuł nie zmienia zawartości pliku CSS. Reguły stylów są takie same przed i po opublikowaniu tekstu. Nie ma więc technicznego uzasadnienia, żeby publikacja treści pociągała za sobą regenerację assetów.

Co powinno wywoływać pełne czyszczenie

To już moja opinia, oparta na tym jednym wdrożeniu, a nie twarda reguła. Pełne czyszczenie razem z CSS i JS zostawiłbym dla trzech sytuacji: zmiany w plikach motywu, aktualizacji lub zmiany konfiguracji wtyczek wpływających na front, oraz ręcznego kliknięcia przez administratora, który wie, co robi. Wszystko inne - nowy wpis, edycja starego, zmiana kategorii, nowy komentarz - powinno unieważniać wyłącznie adresy URL, których treść faktycznie się zmienia.

W praktyce lista adresów do unieważnienia przy publikacji jest krótka i przewidywalna. Sam wpis, bo dopiero się pojawił. Strona główna, bo wyświetla listę najnowszych. Listing kategorii, do których wpis należy. Kanał RSS, bo czytniki i agregatory zaciągają go niezależnie. Poza tym nic więcej nie zmienia zawartości.

Litespeed cache konfiguracja - na co patrzeć

Nie przepłacaj za te subskrypcje

Prowadzę sklep z rocznymi dostępami do narzędzi AI - te same konta, o których piszę wyżej, tylko taniej niż w cenniku producenta.

Zobacz, co jest dostępne

Nazwa wtyczki jest tu drugorzędna, bo wzorzec powtarza się w wielu rozwiązaniach cache dla WordPressa. Szukaj w ustawieniach dwóch rzeczy, które często siedzą w osobnych zakładkach i nie są ze sobą wizualnie powiązane.

Pierwsza to reguły automatycznego czyszczenia przy publikacji - zwykle lista checkboxów z zakresami typu strona główna, archiwa, autor, tagi, wszystko. Druga to opcje minifikacji i łączenia CSS oraz JS, a przy nich osobny przełącznik odpowiadający za usuwanie wygenerowanych plików przy czyszczeniu cache. Problem powstaje dopiero wtedy, gdy oba zestawy ustawień są włączone jednocześnie i powiązane tym samym zdarzeniem.

Jeśli wtyczka pozwala rozdzielić te dwie warstwy - cache stron i cache assetów - rozdziel je. Jeśli nie pozwala, zostaje modyfikacja zachowania z poziomu kodu: podpięcie się pod hook publikacji, zastąpienie wywołania czyszczenia całości serią punktowych unieważnień. Rozwiązanie na poziomie ustawień jest lepsze, bo nie ginie przy aktualizacji wtyczki.

Jak to sprawdzić u siebie

  1. Otwórz stronę główną w trybie incognito i podejrzyj źródło. Skopiuj pełny adres pliku CSS z sekcji head - tego zminifikowanego, ze znacznikiem w nazwie.
  2. Wklej ten adres do drugiej karty i upewnij się, że plik się otwiera i zwraca treść, a nie błąd.
  3. W panelu opublikuj testowy wpis. Nie edytuj motywu, nie zmieniaj żadnych ustawień - tylko publikacja treści.
  4. Natychmiast po publikacji odśwież kartę z adresem pliku CSS. Jeśli dostajesz czterysta czterery, masz potwierdzenie: publikacja treści usuwa assety.
  5. W tym samym momencie otwórz stronę główną w trzeciej karcie. Jeśli zobaczysz surowy HTML bez formatowania, widzisz dokładnie to, co widzą czytelnicy.
  6. Sprawdź, czy adres pliku CSS w źródle nowo wygenerowanej strony jest już inny niż ten skopiowany w kroku pierwszym. Zmiana znacznika potwierdza regenerację.
  7. Wejdź w ustawienia wtyczki i odszukaj regułę czyszczenia przy publikacji. Ogranicz ją do wpisu, strony głównej, kategorii i kanału RSS.
  8. Odszukaj osobno opcję odpowiadającą za usuwanie zminifikowanych CSS i JS przy czyszczeniu cache i odwiąż ją od zdarzenia publikacji.
  9. Powtórz kroki od pierwszego do piątego. Plik CSS powinien przetrwać publikację ze tym samym znacznikiem w nazwie.
  10. Obserwuj przez kilka dni normalnej pracy redakcji. Przy kilkunastu wpisach dziennie efekt albo wróci szybko, albo nie wróci wcale - trzeciej opcji nie ma.
Google · Twoje źródłaPromptowy wyżej w Twoim Google - jednym kliknięciemDodaj do preferowanych źródeł

Skąd te liczby

Wszystkie dane pochodzą z jednego wdrożenia na serwisie publikującym kilkanaście wpisów dziennie. Liczba czyszczeń katalogu na dobę została odczytana z konfiguracji wtyczki i skorelowana z liczbą publikacji - wtyczka wołała przy każdej publikacji czyszczenie całości razem z plikami CSS i JS, co przy kilkunastu wpisach dziennie dawało kilkanaście czyszczeń na dobę. Zakres poprawki, czyli punktowe czyszczenie wpisu, strony głównej, kategorii i kanału RSS, to zmiana konfiguracji wprowadzona i zweryfikowana procedurą opisaną w sekcji powyżej. Nie mierzyłem czasów odbudowy minifikacji ani udziału dotkniętych sesji - tych liczb po prostu nie mam i nie będę ich szacował. Pomiar i wdrożenie poprawki: 22.09.2026.

// Newsletter

Cały tydzień w AI, w jednym mailu

Wybrane premiery, narzędzia i analizy. Raz w tygodniu, prosto do skrzynki.

Zapisz się za darmo →
Za darmo. Wypisujesz się jednym kliknięciem.

Najczęstsze pytania

Dlaczego strona przez chwilę wygląda jak surowy HTML bez formatowania?

Strona pokazuje się bez stylów, gdy przeglądarka dostaje dokument HTML odwołujący się do pliku CSS, który fizycznie nie istnieje na dysku - serwer zwraca błąd 404, a przeglądarka renderuje treść bez formatowania. Dzieje się tak, gdy wtyczka cache usuwa zminifikowane pliki CSS i JS w trakcie odbudowywania cache po publikacji nowego wpisu.

Jak sprawdzić, czy moja wtyczka cache usuwa pliki CSS przy publikacji wpisu?

Należy skopiować adres zminifikowanego pliku CSS ze źródła strony, opublikować testowy wpis, a następnie natychmiast odświeżyć kartę z tym adresem - jeśli pojawia się błąd 404, publikacja usuwa assety. Warto też otworzyć stronę główną zaraz po publikacji i sprawdzić, czy widać surowy HTML bez formatowania.

Co powinno wywoływać pełne czyszczenie cache razem z plikami CSS i JS?

Pełne czyszczenie razem z CSS i JS powinno być wywoływane tylko przy zmianach w plikach motywu, aktualizacji lub zmianie konfiguracji wtyczek wpływających na front oraz ręcznym kliknięciu przez administratora. Nowy wpis, edycja starego, zmiana kategorii ani nowy komentarz nie zmieniają zawartości pliku CSS, więc nie ma powodu, żeby go usuwać.

Jakie adresy URL powinny być czyszczone przy publikacji nowego wpisu?

Przy publikacji nowego wpisu należy czyścić punktowo tylko cztery elementy: sam wpis, stronę główną, listing kategorii, do których wpis należy, oraz kanał RSS. Poza tymi adresami żadna inna treść faktycznie się nie zmienia przy publikacji.

// czytaj też

Podobne tematy na Promptowym

Piotr Olszewski

Piotr Olszewski

ADMINISTRATOR

Piotr Olszewski - twórca i autor Promptowego, polskiego serwisu o sztucznej inteligencji. Codziennie śledzi premiery modeli, narzędzia i regulacje AI, i tłumaczy je prostym, konkretnym językiem.

// mapa strony

🛒 Sklep Kinetyka Google AI Gemini Pro 170 zł CapCut Pro 460 zł/rok n8n Cloud Starter 320 zł/rok Zobacz wszystko →
promptowy w liczbach 0tekstów w archiwum0newsów z ostatnich 7 dni0modeli wideo w obserwatorium0zagadek w grach
× powiększenie