Data compression: jak kompresja danych oszczędza miejsce, transfer i czas
Data compression, czyli kompresja danych, to zestaw metod zmniejszania objętości plików przy zachowaniu ich pełnej użyteczności. Dobrze wdrożona data compression skraca czas ładowania witryny, obniża koszt transferu i pozwala zmieścić kilkukrotnie więcej kopii zapasowych na tym samym dysku. Mechanizm sprowadza się do usuwania powtarzalności: algorytm odnajduje sekwencje bajtów pojawiające się wielokrotnie i zastępuje je krótszymi odwołaniami do słownika. Im bardziej przewidywalne dane, tym większy zysk — plik z logami serwera potrafi skurczyć się o dziewięćdziesiąt procent, a zdjęcie zapisane w formacie RAW zaledwie o kilka. Dla osoby prowadzącej sklep, blog albo firmowe zaplecze różnica jest wymierna: strona ładująca się w 1,2 sekundy zamiast 3,8 sekundy notuje niższy współczynnik odrzuceń, a rachunek za serwer nie rośnie razem z ruchem. Poniżej pokazuję, jak dobrać algorytm i gdzie kompresja daje najwięcej.
Jak działa data compression — słownik, entropia i realne granice
Każdy algorytm kompresji opiera się na dwóch filarach: modelowaniu statystycznym i kodowaniu entropijnym. Pierwszy przewiduje, jaki bajt pojawi się następny, drugi przypisuje częstym symbolom krótsze kody binarne. Rodzina LZ77, wykorzystywana w ZIP, Gzip i PNG, dodaje do tego słownik przesuwnego okna, w którym silnik szuka powtarzających się sekwencji.
Istnieje twarda granica opisana przez entropię Shannona. Danych już spakowanych albo zaszyfrowanych nie da się skurczyć drugi raz — próba wrzucenia archiwum ZIP do kolejnego ZIP-a zwykle powiększa plik o kilkanaście bajtów nagłówka. To najczęstszy błąd w skryptach backupowych pisanych na szybko, bez pomiaru wyniku przed wdrożeniem.
Kompresja kosztuje moc procesora, więc każda decyzja to kompromis. Zstandard na poziomie trzecim pakuje gigabajt logów w kilka sekund, ten sam plik na poziomie dziewiętnastym potrafi zająć kilka minut przy zysku rzędu czterech procent. Przy transmisji w czasie rzeczywistym wybieramy ustawienia szybkie, przy archiwum wysyłanym raz — najmocniejsze dostępne.
Współczynnik kompresji a czas dekompresji
Rozpakowywanie jest zwykle wielokrotnie szybsze niż pakowanie i to ono decyduje o odczuciach użytkownika. LZ4 odtwarza dane z prędkością liczoną w gigabajtach na sekundę, natomiast Brotli na jedenastym poziomie potrzebuje sporo czasu przy kompresji, ale w przeglądarce rozpakowuje się praktycznie natychmiast, bez wpływu na płynność renderowania.
Kompresja stratna i bezstratna: kiedy stosować którą
Kompresja bezstratna odtwarza plik bit w bit, dlatego jest jedynym akceptowalnym wyborem dla dokumentów, kodu źródłowego, zrzutów baz danych i plików księgowych. Należą do niej ZIP, 7z, Zstandard, FLAC oraz PNG. Cena za wierność to niższy współczynnik redukcji, zwykle w przedziale od czterdziestu do osiemdziesięciu procent.
Kompresja stratna trwale usuwa informacje, których ludzkie oko lub ucho i tak nie zarejestruje. Tak działają JPEG, WebP, AVIF, MP3 oraz kodeki H.264 i H.265. Zysk bywa dziesięciokrotny, ale każde kolejne zapisanie tego samego pliku pogłębia degradację, dlatego oryginały trzymamy zawsze w formacie bezstratnym.
Praktyczna reguła jest prosta: archiwum, umowa, faktura i kod idą bezstratnie, materiał publikowany w sieci idzie stratnie. Poniższe zestawienie pokazuje typowe wyniki, które sam mierzyłem na katalogach fotografii produktowej oraz na dobowych logach serwera aplikacyjnego o wielkości kilku gigabajtów.
| Format | Typ kompresji | Typowa redukcja | Najlepsze zastosowanie |
|---|---|---|---|
| ZIP / Deflate | bezstratna | 40-60% | dokumenty, wysyłka archiwów |
| Zstandard | bezstratna | 60-85% | backupy, logi, zrzuty baz |
| Brotli | bezstratna | 15-25% mniej niż Gzip | HTML, CSS, JavaScript |
| WebP | stratna | 25-35% mniej niż JPEG | zdjęcia w sklepie i na blogu |
| AVIF | stratna | 40-50% mniej niż JPEG | grafiki hero i fotografie |
Data compression w grafice, wideo i projektowaniu stron internetowych
Fotografia produktowa to miejsce, gdzie oszczędności są największe. Zdjęcie z lustrzanki o rozdzielczości 4000 na 3000 pikseli waży około ośmiu megabajtów. Ten sam kadr, na przykład klawiatura mechaniczna na białym tle, po skalowaniu do 1600 pikseli i eksporcie do WebP z jakością osiemdziesiąt zajmuje mniej więcej sto dwadzieścia kilobajtów.
Grafiki tworzone ręcznie zachowują się inaczej niż fotografie. Ilustracje rysowane na urządzeniu takim jak tablet graficzny Wacom warto eksportować do SVG, jeśli mają płaskie wypełnienia i mało gradientów. Plik wektorowy dodatkowo kurczy się o kolejne siedemdziesiąt procent po włączeniu kompresji serwerowej, ponieważ jest zwykłym tekstem XML.
Przy doborze rozmiarów liczy się realny sprzęt odbiorcy. Typowy monitor do komputera pracuje w rozdzielczości 1920 na 1080 pikseli, więc wysyłanie grafiki o szerokości czterech tysięcy pikseli oznacza marnowanie transferu. Atrybuty srcset i sizes pozwalają serwować trzy warianty pliku i pozostawić przeglądarce wybór najlżejszego z nich.
Dojrzałe projektowanie stron internetowych traktuje budżet wagowy jak wymóg projektowy, a nie jak późniejszą optymalizację. Ustalenie limitu na poziomie miliona bajtów dla pierwszego widoku wymusza dyscyplinę już na etapie makiet: mniej krojów pisma, mniej bibliotek, kadry przycięte zamiast skalowanych w przeglądarce i wideo w kodeku nowej generacji.

Kompresja na serwerze a pozycjonowanie strony w Google
Przeglądarka wysyła nagłówek Accept-Encoding, a serwer odpowiada tym, co potrafi: gzip albo br. Brotli daje średnio piętnaście do dwudziestu pięciu procent lepszy wynik na plikach tekstowych. Włączenie modułu w Nginx to kilka linii konfiguracji i restart usługi, bez ingerencji w kod aplikacji czy szablony.
Na hostingu współdzielonym ustawienia bywają zablokowane, dlatego przy większym ruchu sensowniejszy jest własny serwer, choćby najtańszy OVH VPS z dwoma rdzeniami za kilkadziesiąt złotych miesięcznie. Pełna kontrola nad konfiguracją oznacza możliwość wstępnego pakowania statycznych zasobów raz, zamiast kompresowania ich przy każdym żądaniu użytkownika.
Efekt widać w metrykach, na których opiera się pozycjonowanie strony w Google. Lżejsze zasoby skracają Largest Contentful Paint, a wskaźnik ten wpływa na ocenę Core Web Vitals. Sama kompresja nie zastąpi treści ani linków, ale usuwa barierę techniczną, która realnie hamuje pozycjonowanie strony w konkurencyjnych, nasyconych niszach zakupowych.
Panel administracyjny i feedy produktowe
Kompresja obejmuje także zaplecze. Po wpisaniu adresu wordpress logowanie i wejściu do kokpitu warto sprawdzić, czy pliki JSON z API są pakowane. Feed do Google Merchant liczący dziesięć tysięcy ofert waży kilkadziesiąt megabajtów, a po kompresji Gzip schodzi do kilku, co skraca czas pobierania przez robota.
Backupy, bazy danych i rachunek za przestrzeń w chmurze
Zrzut bazy MySQL sklepu ze średnim katalogiem zajmuje około trzech gigabajtów. Po przepuszczeniu przez Zstandard na poziomie dziesiątym schodzi do mniej więcej czterystu megabajtów, a czas przywracania rośnie o kilkanaście sekund. Przy trzydziestu kopiach dobowych oszczędność sięga osiemdziesięciu gigabajtów przestrzeni dyskowej miesięcznie.
Koszty przechowywania liczy się za gigabajt, więc kompresja przekłada się wprost na fakturę. Google Workspace cena za użytkownika startuje od kilkudziesięciu złotych miesięcznie i obejmuje ustalony limit miejsca, a każdy dodatkowy pakiet to kolejny wydatek. Spakowane archiwa pozwalają zmieścić się w podstawowym planie znacznie dłużej.
W sklepie z peryferiami efekt widać najszybciej w bibliotece mediów. Sesja zdjęciowa, na której pojawia się klawiatura gamingowa mechaniczna oraz kompaktowa klawiatura mechaniczna 60 procent, to zwykle czterysta ujęć i kilkanaście gigabajtów materiału. Oryginały trafiają do archiwum bezstratnego, a na witrynę idą warianty AVIF ważące poniżej stu kilobajtów.
Jak sprawdzić, czy kompresja działa na mojej stronie?
Najprostszy test zajmuje minutę. Otwórz narzędzia deweloperskie przeglądarki, przejdź do zakładki sieci, odśwież stronę i sprawdź nagłówek odpowiedzi content-encoding. Jeżeli widnieje tam br albo gzip, serwer pakuje pliki poprawnie. Porównaj również kolumnę z rozmiarem przesłanym i rozmiarem po rozpakowaniu — dla arkusza stylów różnica powinna sięgać siedemdziesięciu procent. Drugi sposób to zewnętrzny tester nagłówków HTTP, który wyświetli listę typów MIME objętych kompresją. Bardzo częsty błąd polega na tym, że administrator włącza pakowanie dla dokumentów HTML, lecz pomija pliki JSON, SVG oraz czcionki webowe. Na koniec uruchom audyt szybkości, który wskaże konkretne zasoby i policzy, ile kilobajtów da się jeszcze odzyskać bez zmiany szablonu.
Czy data compression pogarsza jakość zdjęć produktowych?
Przy rozsądnych ustawieniach różnica jest niewidoczna dla klienta. Eksport do WebP z parametrem jakości w przedziale od siedemdziesięciu pięciu do osiemdziesięciu pięciu zachowuje detale faktury, odbicia światła i czytelność opisów na obudowie sprzętu. Problem pojawia się w dwóch sytuacjach. Pierwsza to zapisywanie pliku stratnego wielokrotnie: każda kolejna edycja i ponowny eksport nakładają artefakty, które kumulują się wokół krawędzi i kontrastowych przejść. Druga to zbyt agresywne ustawienie poniżej sześćdziesięciu, przy którym gładkie tła zaczynają się pasmować. Rozwiązanie jest standardowe w każdej pracowni: archiwum trzyma pliki bezstratne w pełnej rozdzielczości, a wersje publikowane generuje skrypt automatycznie przy każdej aktualizacji katalogu.
Co zrobić, gdy plik po kompresji jest większy niż oryginał?
To normalne zachowanie, nie usterka narzędzia. Materiał już spakowany, zaszyfrowany albo z natury losowy ma entropię bliską maksymalnej, więc algorytm nie znajduje powtórzeń i dokłada wyłącznie własne nagłówki, zwykle od kilkunastu do kilkuset bajtów. Dotyczy to archiwów ZIP, plików JPEG, MP4, MP3 i kontenerów wideo. Zamiast pakować je ponownie, warto zmienić strategię: zastosować format o lepszym kodeku, obniżyć rozdzielczość źródła albo skorzystać z deduplikacji, która wykrywa identyczne bloki między wieloma plikami. Przy bardzo małych plikach tekstowych, poniżej mniej więcej stu bajtów, narzut również przewyższa zysk, dlatego serwery zwykle mają ustawiony minimalny próg rozmiaru dla kompresji odpowiedzi.
