Przejdź do treści głównej
SiteScan.top

Cache i kompresja: darmowa szybkość, po którą nikt się nie schyla

Cache-Control, który naprawdę cache'uje, dlaczego hash w nazwie pliku zmienia wszystko i ustawienie kompresji wciąż brakujące na połowie witryn.

Infrastruktura · Opublikowano: 30 sierpnia 2026 · 3 min czytania · Анна Ковалёва

Większość pracy nad wydajnością jest kosztowna: przepisać komponenty, odroczyć skrypty, pokłócić się o framework. Dwa ustawienia takie nie są. Leżą w pliku konfiguracyjnym, zajmują popołudnie i wciąż są błędne na sporej części produkcyjnych witryn.

Najpierw kompresja

Tekst kompresuje się o siedemdziesiąt do osiemdziesięciu procent. HTML, CSS, JavaScript, JSON, SVG — to wszystko tekst. Jeśli odpowiedź nie ma Content-Encoding, wysyłasz czterokrotnie więcej bajtów bez powodu.

Brotli wygrywa z gzipem o mniej więcej piętnaście procent na tej samej treści i jest wspierany wszędzie, gdzie to istotne; gzip zostaw jako zapas. Dwa częste błędy: kompresowanie obrazów (JPEG i PNG są już skompresowane — wydajesz CPU na nic) oraz zapominanie, że ustawienie działa per typ MIME, więc subdomena serwująca JSON z innej konfiguracji po cichu wysyła go surowo.

Cache-Control uczciwie

Nagłówek odpowiada na dwa pytania: czy wolno to przechować i jak długo. Użytecznych wzorców jest niewiele.

Zasoby z hashem — /app.4f2a91.js:

Cache-Control: public, max-age=31536000, immutable

Rok i bez rewalidacji. Bezpieczne właśnie dlatego, że nazwa pliku zmienia się razem z treścią. To największa dostępna wygrana i działa tylko wtedy, gdy build faktycznie hashuje nazwy.

HTML:

Cache-Control: no-cache

Wbrew nazwie to nie jest "nie cache'uj". To "przechowaj, ale przed użyciem dopytaj". Przeglądarka wysyła If-None-Match i zwykle dostaje 304 bez treści — szybko i nigdy nieświeże.

Odpowiedzi spersonalizowane:

Cache-Control: private, no-store

Dla wszystkiego, czego współdzielony cache trzymać nie może: konto, koszyk, wszystko za logowaniem.

Błędy, które kosztują najwięcej

Krótki max-age na plikach z hashem. max-age=600 na nazwie zawierającej hash treści przekreśla całą korzyść.

Długi max-age na plikach bez hasha. /logo.png w cache na rok oznacza, że redesign nie dotrze do nikogo, kto był wcześniej.

Brak ETag lub Last-Modified na HTML. Bez walidatora przeglądarka nie może spytać "czy się zmieniło"; pobiera cały dokument od nowa.

Źle ustawiony Vary. Vary: User-Agent rozdrabnia cache CDN na tysiące niemal identycznych wpisów i prawie nigdy nie jest tym, o co ci chodziło.

Udowodnij, zamiast zakładać

Konfiguracja to jedno, a to, co realnie dociera do przeglądarki, to drugie: CDN, proxy albo panel hostingu mogą przepisać nagłówki po drodze. Kontrola idzie po każdej odpowiedzi i po całej witrynie:

dla każdej odpowiedzi:
  czy jest content-encoding na text/*?
  czy cache-control pasuje do klasy zasobu?
  czy dokumenty mają etag albo last-modified?

Uruchamiaj po każdym wdrożeniu. Ta klasa regresji jest bezgłośna — nic się nie psuje, witryna po prostu zwalnia, a rachunek za transfer rośnie — i właśnie dlatego przeżywa lata, gdy nikt nie patrzy.

Przeczytaj także

Sprawdź, ile z tego dotyczy Twojej strony

Darmowe skanowanie pokaże uszkodzone linki, błędy JS i problemy z wydajnością w minutę.