Kompresja – gzip

Wprowadzenie

Szybkość wczytywania stron w znacznym stopniu możemy przyspieszyć korzystając z kompresji.  Jako webdeveloperzy nie mamy wpływu na szybkość połączenia czy trasę jaka musza pokonać pakiety pomiędzy serwerem www  a osoba odwiedzającą stronę. Możemy jednak, przyspieszyć ten proces poprzez zmniejszenie rozmiaru danych które zostają wysłane.

Począwszy od HTTP/1.1 przeglądarki internetowe obsługują kompresje poprzez nagłówek Accept-Encoding

Accept-Encoding: gzip, deflate

Jeśli serwer www zobaczy taki nagłówek w odpowiedzi do klienta może przesłać dane w formie skompresowanej. Informuje o tym przeglądarkę poprzez zamieszczenie nagłówka Content-Encoding

 Content-Encoding: gzip

Gzip jest najpopularniejszym sposobem kompresji, drugim najczęściej spotykanym, jednak mniej wydajnym jest deflate. Pierwsza metoda kompresji, zmniejsza rozmiar przesyłanych informacji o okolo 70%.

Każdy kij ma dwa końce.

Jeśli serwujemy skompresowana wersje strony, niektóre przeglądarki mogą wyświetlić ja nie do końca tak jak byśmy tego chcieli. Na pocieszenie, jak się zapewne domyślasz chodzi wyłącznie o starsze, wychodzące już z użycia wersje tych programów.

Co należy kompresowac?

Przede wszystkim wszystkie pliki HTML.  Style, oraz skrypty również nie zaszkodzi poddać kompresji. Pomijamy natomiast grafikę czy dokumenty pdf gdyż one już są skompresowane, poddając je dodatkowej nie tylko marnujemy niepotrzebnie zasoby serwera, ale ponosimy ryzyko ze plik będzie zajmował więcej.

Jak się za to zabrać?

Sa dwa sposoby w jaki możemy ten proces zrealizować.

Poprzez plik .htaccess, umieszczając:

# Kompresuje wszystkie pliki html i tekstowe
AddOutputFilterByType DEFLATE text/html text/plain text/xml

# Lub kompresuj wszystkie pliki z danym rozszerzeniem

SetOutputFilter DEFLATE

W tym przykładzie użyłem metody kompresji deflate

Możemy również kazać php serwować skompresowana wersje pliku. Rozszerzenie pliku który kompresujemy musimy zmienić na .php żeby serwer wiedział co z tym zrobić
Na samym początku pliku umieszczamy:

 if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) ob_start("ob_gzhandler"); else ob_start();

Tym razem jako metodę kompresji wybrałem gzip.

Oczywiście jeśli przeglądarka nie obsługuje kompresji, wysłana zostanie zwykła wersja.

Na koniec narzędzie online, którym możemy sprawdzić czy nasza strona faktycznie została skompresowana.

Podziel się: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • StumbleUpon
  • del.icio.us
  • Gwar
  • TwitThis
  • Facebook
  • Wykop
środa, Kwiecień 21st, 2010 Optymalizacja

1 Komentarz to Kompresja – gzip

  • Internauta pisze:

    ob_gzhandler ma wbudowaną instrukcję sprawdzania akceptowalnego kodowania gzip i nie jest potrzebne dodatkowe obciążanie kodu tym.

    Dodatkowo wartość $_SERVER['HTTP_ACCEPT_ENCODING'] niekoniecznie może istnieć. Mój system ją „zjada” i serwer nie otrzymuje tego nagłówka, więc sypnie Ci noticem.

  • zdjęcie

    Wojciech Wierzgacz
    Kraków, Małopolskie, Polska
    e-mail: wojtek.ww@gmail.com
    Telefon (8:00 - 18:00): 604883034


    Koder PHP z trzyletnim doświadczeniem, student zaoczny informatyki stosowanej. Nawiążę współpracę, podejmę się realizacji projektów. Jestem samoukiem i lubię to co robię.

    mapa strony