czerwca 21

Kompresja danych - sposób na niski transfer

Tag: PHPMatheW @ 17:14. . Post odwiedzany 1556 razy. Trackback

Wielokrotnie każdy człowiek zajmujący się tworzeniem witryn internetowych zmagał się zapewne z niskim transferem danych, na który pozwalał jego serwer. Często przez przekroczenie transferu strona przestawała działać, aż do rozpoczęcia kolejnej jednostki czasowej, w której nadany jest transfer (najczęściej miesiąca). Oczywiście, gdy nie ma się z administratorem serwera za pan brat :P

Jako, że manuserwis.com ma coraz więcej odwiedzin, to i jego wykorzystanie transferu zwiększało się co chwila. Właściwie w każdym miesiącu przekraczaliśmy go i tylko dzięki uprzejmości administratora udało zwiększyć sie go do ponad 50 GB na miesiąc. Niestety dzisiaj znowu natrafiłem na ten sam problem - błąd 503, który w przypadku naszego serwera znaczy jedno - koniec transferu :P Dzięki temu natknąłem sie na zagadnienie kompresji danych wysyłanych do przeglądarki, które może przynieść znaczną poprawę.

Wszystko dzieki buforowaniu danych - a więc kumulowania wyświetlanych danych w buforze, dzięki czemu to co chcemy wyświetlić na ekranie internauty, zostanie wysłane dopiero po przetworzeniu skryptu. Buforowanie to rozległy temat, którego nie będę tu omawiać - polecam manual PHP oraz tekst na php.pl Buforowanie wyjścia z PHP.

Nas zainteresuje pewna właściwość buforowania oraz biblioteki zlib, która koniecznie musi być zainstalowana na naszym serwerze. Aby to sprawdzić piszemy:

PHP:
  1. if(extension_loaded('zlib')) echo 'Rozszerzenie zlib jest zainstalowane';
  2. else echo 'Rozszerzenie zlib nie jest zainstalowane';

Aby skorzystać z kompresji danych cały wyświetlany kod otaczamy w dwóch linijkach:

PHP:
  1. ob_start("ob_gzhandler");
  2. echo '<html>';
  3. # costam wyswietlamy

I tyle. W przypadku mojej strony kompresja była bardzo duża - z 36997 bajtów zrobiło się 10306, a więc dane zmniejszyły się ponad trzykrotnie! Oczywiście należy pamiętać, że buforowanie spowalnia nieco pracę skryptu, a także to, że teoretycznie nie wszystkie przeglądarki umieją korzystać z kompresji - jednak skrypt PHP sam to rozpozna i w razie czego wyśle stronę normalnie.

Oczywiście zawsz problemy wystębują przy IE. Specjalnie dla niego wstawiamy taką linijkę na początku skryptu:

PHP:
  1. session_cache_limiter("must-revalidate");

Podobne wpisy

Dodaj do: Dodaj do del.icio.us Dodaj do Wykop.pl Dodaj do Google Reader lub Google IG
Licencja: Creative Commons Uznanie autorstwa-Użycie niekomercyjne-Bez utworów zależnych 2.5 Polska.

Zostaw komentarz