Tag Archives: apache2

Moduł dla apache2 mod_pagespeed od Google

Page Speed to zestaw narzędzi OpenSource od Google, które mają pomóc webmasterom w optymalizacji ich witryn. Ostatnio upubliczniony został moduł dla Apache2 o nazwie mod_pagespeed, który za pomocą szeregu filtrów modyfikuje odpowiedź mającą trafić do klienta.

1. Instalacja

Na maszynie z już zainstalowanym apache2 instalacja mod_pagespeed z paczek dostępnych na stronie projektu jest banalnie prosta. W sekcji mod_pagespeed odnajdujemy naszą platformę, w moim przypadku jest to Debian 64-bit, pobieramy paczkę z modułem, następnie otwieramy konsolę i z poziomu super-użytkownika przechodzimy do lokalizacji, gdzie zapisaliśmy pakiet. Instalujemy paczkę:

socjopata# dpkg -i mod-pagespeed-beta_current_amd64.deb
Zaznaczenie poprzednio niezaznaczonego pakietu mod-pagespeed-beta.
(Odczytywanie bazy danych ... 212669 files and directories currently installed.)
Rozpakowanie mod-pagespeed-beta (z mod-pagespeed-beta_current_amd64.deb) ...
Konfigurowanie mod-pagespeed-beta (0.9.1.1-r171) ...
Enabling module pagespeed.
Run '/etc/init.d/apache2 restart' to activate new configuration!

Jak widać w powyższym raporcie moduł został poprawnie zainstalowany i można go aktywować przez ponowne uruchomienie serwera apache. Można tego dokonać również przez jego przeładowanie:

/etc/init.d/apache2 reload

Gdyby wystąpiły problemy z niespełnionymi zależnościami dla modułu należy je uzupełnić:

apt-get -f install

2. Konfiguracja

Jednak przed przeładowaniem serwera zerknijmy do konfiguracji modułu, znajduje się ona w pliku /etc/apache2/mods-available/pagespeed.conf. Każda dyrektywa konfiguracyjna jest szczegółowo opisana w pliku konfiguracyjnym, więc nie ma sensu rozwodzić się nad nimi, aczkolwiek kilka z nich jest bardzo istotnych i należy im się przyjrzeć. Pierwszą jest

ModPagespeedDisableFilters

Ta dyrektywa globalnie wyłącza pewne filtry. Zdarzyć się może sytuacja, gdzie pewien filtr jest filtrem wysokiego ryzyka i psuje odpowiedź wysyłaną do klienta w takim stopniu, że nie jest możliwe poprawne wyświetlenie zawartości strony przez przeglądarkę, w takim wypadku należy globalnie wyłączyć filtr i spokojnie czekać na poprawki do niego.

Drugą z bardzo istotnych instrukcji konfiguracyjnych jest:

ModPagespeedEnableFilters

Jak w przypadku wyżej po dyrektywie podajemy po przecinkach filtry, które w tym wypadku mają zostać włączone. Dla przykładu, aktywacja filtra collapse_whitespace będzie wyglądała następująco:

ModPagespeedEnableFilters collapse_whitespace

Aktywacja kilku filtrów wygląda następująco:

ModPagespeedEnableFilters collapse_whitespace,elide_attributes

Resztę ustawień spokojnie można pozostawić w domyślnej formie.

3. Wnioski

Przy włączonych filtrach collapse_whitespace, elide_attributes, remove_comments, combine_css, rewrite_javascript, move_css_to_head, remove_quotes znacząco spada ilość danych transferowanych z serwera do przeglądarki co na przykładzie kilku wywołań prezentuje tabela:

Bez mod_pagespeed Włączony mod_pagespeed
15,73 12,06
14,52 12,05
14,35 11,56
14,36 11,72
22,83 17,21
23,00 17,03

Oczywiście wszystko zależy od tego w jaki sposób jest generowany HTML przez aplikację. W moim przypadku jest to ładnie sformatowany kod, także zysk na ilości danych jest spory.

Mod_pagespeed posiada również kilka filtrów do zmniejszenia zapytań o pliki css, js i grafiki. Są nimi odpowiednio Combine CSS, Inline JavaScript i Optimize Images. Na końcu każdej podstrony dokumentacji filtra znajduje się informacja o ryzyku stosowania, przy czym większość filtrów wykazuje małe ryzyko.

Na końcu pliku konfiguracyjnego znajduje się sekcja Location /mod_pagespeed_statistics, gdzie znajdują się statystyki modułu. W tym miejscu możemy podejrzeć statystyki skuteczności modułu w naszym przypadku.

Na zakończenie kilka słów o tym jak bardzo moduł spowalnia obsługę żądań. Kilka poglądowych wyników bez włączonego modułu:

127.0.0.1 [11/Nov/2010:19:54:44 +0100] 119305 GET / HTTP/1.1 4076
127.0.0.1 [11/Nov/2010:19:54:48 +0100] 92647 GET /oferta-uslugowa/obsluga-techniczna-konferencji HTTP/1.1 4441
127.0.0.1 [11/Nov/2010:19:54:49 +0100] 77898 GET /oferta-uslugowa/obsluga-techniczna-eventow HTTP/1.1 4286
127.0.0.1 [11/Nov/2010:19:54:51 +0100] 93597 GET /oferta-uslugowa/wypozyczenia-sprzetu-multimedialnego HTTP/1.1 4237
127.0.0.1 [11/Nov/2010:19:54:53 +0100] 73639 GET /oferta-uslugowa/projektowanie-sal HTTP/1.1 3631
127.0.0.1 [11/Nov/2010:19:54:57 +0100] 101097 GET /oferta-handlowa/samsung HTTP/1.1 4560
127.0.0.1 [11/Nov/2010:19:54:59 +0100] 78023 GET /produkt/monitor-p42h-2 HTTP/1.1 4411
127.0.0.1 [11/Nov/2010:19:55:03 +0100] 381492 GET /firma/kontakt HTTP/1.1 4469
i dla włączonego modułu pagespeed:
127.0.0.1 [11/Nov/2010:19:57:10 +0100] 100126 GET / HTTP/1.1 3526
127.0.0.1 [11/Nov/2010:19:57:15 +0100] 87732 GET /oferta-uslugowa/obsluga-techniczna-konferencji HTTP/1.1 4192
127.0.0.1 [11/Nov/2010:19:57:18 +0100] 82464 GET /oferta-uslugowa/obsluga-techniczna-eventow HTTP/1.1 3996
127.0.0.1 [11/Nov/2010:19:57:19 +0100] 80766 GET /oferta-uslugowa/wypozyczenia-sprzetu-multimedialnego HTTP/1.1 4038
127.0.0.1 [11/Nov/2010:19:57:21 +0100] 87320 GET /oferta-uslugowa/projektowanie-sal HTTP/1.1 3515
127.0.0.1 [11/Nov/2010:19:57:26 +0100] 97538 GET /oferta-handlowa/samsung HTTP/1.1 4351
127.0.0.1 [11/Nov/2010:19:57:29 +0100] 83227 GET /produkt/monitor-p42h-2 HTTP/1.1 4278
127.0.0.1 [11/Nov/2010:19:57:34 +0100] 112691 GET /firma/kontakt HTTP/1.1 4277

Istotna jest kolumna przed metodą wywołania(GET). Podane czasy są w milisekundach. Testy nie były prowadzone na maszynie produkcyjnej.

Wniosek z moich pomiarów, powyżej tylko część wyników, jest taki, że moduł nie wpływa w znaczący sposób na czas generowania odpowiedzi na żądanie. Mogę pokusić się nawet o stwierdzenie, że nie ma żadnego wpływu, przy znaczącej redukcji ilości danych, które są wysyłane z serwera.

Przy optymalizacji witryny jeśli weźmiemy wiele drobnych szczegółów i zyskując na każdym kilka kilobajtów lub milisekund szybko będziemy mogli się przekonać, że prostymi krokami zredukowaliśmy ruch oraz zmniejszyliśmy zauważalne opóźnienie przy wczytywaniu się stron w naszej aplikacji. 100 ms jest zauważalnym dla człowieka opóźnieniem, każde kolejne milisekundy coraz bardziej irytują, moim zdaniem trzeba dążyć do tego, aby mieć jak najmniej wzburzonych użytkowników 🙂

Number of Views :4326

IMagick – ImageMagick API for PHP

Tak się złożyło, że dzisiaj potrzebny był mi ten moduł. Niewiele się zastanawiając wstukałem

pecl -v install imagick

Oczywiście coś jest nie tak. Przemiły komunikat poinformował mnie o braku nagłówków

checking for magick-wand.h header file …… not found

Opisuję tutaj rozwiązanie dla Debiana etch 4.0 (prawdopodobnie na innych systemach pewnie też zadziała), aby wszyscy leniwi ludzie mogli bez problemu pójść na kawę zamiast siedzieć i myśleć dlaczego to nie działa a powinno.

Rozwiązaniem okazało się doinstalowanie oczywistego pakietu libimagick9-dev

aptitude install libimagick9-dev

Następnie normalna procedura instalacji IMagick:

pecl -v install imagick

i niby wszystko gra. Dopisanie jeszcze extension=imagick.so do mojego php.ini, reload apacha i niby wszystko gra. Ostatni test to stworzenie prostego skryptu php do testów:
[sourcecode language=’php’]
thumbnailImage(88, 0);
echo $image;
?>
[/sourcecode]

Po wpisaniu w przeglądarce odpowiedniego adresu moim oczom ukazała się piękna miniaturka mojego obrazka, więc wszystko wskazuje na to że IMagick znalazł się u mnie na serwerze i nawet został ciepło przyjęty przez resztę załogi 😉

Number of Views :1813