Magisterkę czas zacząć.

Zacząłem zbierać materiały do pracy magisterskiej pod tymczasowym tytułem „Inteligentny agent jako sposób optymalizacji współczynnika wykorzystania łącza”.

Przy okazji zahaczyłem trochę praktyki: ‘standardowa’ kompresja danych.
Można do tego celu wykorzystać kilka metod:

Zacząłem zbierać materiały do pracy magisterskiej pod tymczasowym tytułem „Inteligentny agent jako sposób optymalizacji współczynnika wykorzystania łącza”.

Przy okazji zahaczyłem trochę praktyki: ‘standardowa’ kompresja danych.
Można do tego celu wykorzystać kilka metod:

1. Dynamicznie kompresować dane przy użyciu modułu apache mod_deflate lub mod_gzip – wystarczy odhashować LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so dla apache2 lub załadować odpowiedni moduł jeśli korzystamy z Apache v. 1.x w pliku konfiguracyjnym apache (najczęściej httpd.conf), po tym należy zrestartować serwer apache (/etc/init.d/apache2 restart)
Oczywiście, nic nie jest takie proste jak się wydaje, samo załadowanie modułu do Apache nie wystarcza.
Należy także dodać odpowiednią dyrektywę w wpliku .htaccess (jeśli nie mamy dostępu do httpd.conf a moduł jest raportowany np. przez phpinfo()), lub w wspomnianym wyżej httpd.conf

AddOutputFilterByType text/html text/xml application/xml text/javascript text/css

Oczywiście, należy zmienić typy mime podane w powyższym przykładzie na odpowiadające nam (raczej nie zaleca się kompresji obrazów, pdf‘ów i inny binarnych plików które są w postaci skompresowanej.
Dobrze by było zachować jakąś informację o stopniu kompresji, do tego celu można dopisać następujące polecenia do pliku konfiguracyjnego apache/vhosta/modułu (proszę sobie wybrać odpowiednie, lub samemu stworzyć format logu)

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" (%{ratio}n)" combineddeflate
CustomLog /var/log/apache2/access_log combineddeflate

Trochę bardziej skomplikowany sposób logowania

DeflateFilterNote Input input_info
DeflateFilterNote Output output_info
DeflateFilterNote Ratio ratio_info LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate
CustomLog /var/log/apache2/deflate_log deflate

Oczywiście, pasowało by też sprawdzać czy klient (przeglądarka) obsługuje poprawnie skompresowane pliki i w zależności od User-Agent wybierać odpowiednią metodę kompresji/lub zrezygnować z kompresji (niektóre przeglądarki, np. starsze wersje Mozilli wysyłały nagłówek Accept-Encoding: gzip,deflate, lecz nie potrafiły zdekompresować otrzymanych danych).

2. Dynamicznie kompresować za pomocą odpowiedniej funkcji w php – należy dodać do naszego pliku php na początku, przed wysłaniem jakichkolwiek danych do klienta

ob_start("gzhandler")

Nie przejmujemy się nagłówkami, zostaną dołączone automagicznie, jeśli tylko przeglądarka zadeklaruje możliwość dekompresji za pomocą Accept-Encoding: gzip,deflate

3. Jeżeli mamy dużo statycznych plików css, javascript to możemy je skompresować standardowym gzip’em, w linkach umieścić odpowiednie odwołania do skompresowanych plików, wymusić za pomocą np. .htaccess odpowiednie nagłówki:

AddType "text/javascript" .jgz
Header set Content-Encoding: gzip
Header set Transfer-Encoding: gzip

lub

AddType "text/javascript" .jgz
Header set Transfer-Encoding: gzip

Narażamy się tym samym na stratę użytkowników korzystających z starszych przeglądarek, które nie obsługują kompresji, skompresowane w ten sposób pliki nie zostaną otworzone.

Ps. Jeżeli korzystacie z Outpost Firewall, to należy włączyć obsługę gzip, ponieważ standardowa konfiguracja wycina nagłówek Accept-Encoding
W tym celu trzeba zmienić wartość klucza rejestru HKEY_LOCAL_MACHINE\SOFTWARE\Agnitum\Outpost Firewall\EnableGzipEncoding na 1.

Dodaj komentarz