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 :4302

Leave a Reply

Your email address will not be published. Required fields are marked *