publikuj: Opublikuj w wykop.pl Opublikuj we flaker.pl Opublikuj na OSnews.pl Opublikuj w delicious wydrukuj
skomentuj »

TAGI: apache , gzip , kompresja , optymalizacja , htaccess , php

2010-06-29 19:00  |  Tomasz Lisiewicz

Jak przyspieszyć ładowanie stron za pomocą kompresji po stronie serwera?

Jak przyspieszyć ładowanie stron za pomocą kompresji po stronie serwera?

Mamy rok 2010, a wiele stron WWW wciąż przesyłanych jest w postaci nieskompresowanej – mimo że to dobry sposób na zaoszczędzenie transferu i przyspieszenie ładowania się witryny. W czasach, kiedy od tego parametru będzie zależała pozycja w wyszukiwarce Google, warto porzucić sentyment do bardzo starych przeglądarek i włączyć kompresję gzip dla swoich stron.

Przesyłanie od serwera do przeglądarki stron HTML w nieskompresowanej formie nie jest zbyt efektywne. Po prostu sam język hipertekstu nie jest efektywny – znaczniki wymagają domknięć, tabelki mają skomplikowane formalne struktury. Nic się z tym nie da zrobić, nie skrócimy nazw tagów czy atrybutów. Do tego same tekstowe treści na stronie proszą się wręcz o kompresję. Jest ona niezwykle wydajna – stosowana w serwerze Apache biblioteka zlib pozwala na zmniejszenie rozmiarów strony czasem nawet o rząd wielkości.

Wszystkie współcześnie używane przeglądarki radzą sobie ze skompresowanymi stronami bez problemów. Odbywa się to w dwóch krokach: przeglądarka wysyła po prostu do serwera nagłówek, informujący, że akceptuje kompresowane strony – Accept-Encoding: gzip, deflate. Jeśli treści będą skompresowane, w odpowiedzi serwer wysyła np. – Content-Encoding: deflate.

Istnieje wiele formatów kompresji obsługiwanych przez serwery i aplikacje klienckie – najczęściej spotyka się jednak właśnie deflate (opisane w dokumencie RFC 1950) i gzip (opisane w dokumencie RFC 1952)

Warto pamiętać, że wysłanie nagłówka Accept-Encoding to tylko informacja, nie stanowi to rozkazu dla serwera, by wysłać postać skompresowaną. Po stronie serwera należy przygotować odpowiednią konfigurację.

Jeśli serwer obsługuje np. rozszerzenie mod_deflate, włączamy kompresję wyjściowych plików po typach MIME w pliku .htaccess witryny:

AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript

Po wprowadzeniu zmian do .htaccess należy sprawdzić, czy strony faktycznie przesyłane są z kompresją. Użytkownicy Firefoksa mogą w tym celu wykorzystać dodatek LiveHTTPHeaders, pozwalający na oglądanie nagłówków HTTP „na żywo”. Należy w odpowiedzi serwera wyszukiwać linii zawierającej ciąg Content-encoding: deflate (lub Content-encoding: gzip).

Użytkownicy Chrome'a podobną funkcjonalność mają wbudowaną w swoją przeglądarkę. Wystarczy, że w pasku adresowym wpiszą chrome://net-internals/view-cache. Ładowanie listy otwartych zasobów zajmie kilka sekund, później jednak można przeglądać ich zawartość klikając ich URL-e na wyświetlonej liście.

A co jeśli nie mam dostępu do pliku .htaccess?

Niekiedy w hostingu współdzielonym użytkownicy nie mogą modyfikować swojego pliku .htaccess. Wówczas można wykorzystać sprytną sztuczkę, opublikowaną po raz pierwszy na blogu PerishablePress.com.

Wystarczy zmienić rozszerzenie pliku .html na .php i umieścić przed jakimikolwiek treściami HTML następujący snippet kodu PHP:

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

Skrypt ten dostarcza skompresowaną gzipem treść do wszystkich przeglądarek, które obsługują kompresję. Jeśli jej nie obsługują, wysłana zostanie treść nieskompresowana.

Źródło: wikipedia.org, perishablepress.com

publikuj: Opublikuj w wykop.pl Opublikuj we flaker.pl Opublikuj na OSnews.pl Opublikuj w delicious wydrukuj
skomentuj »

Polecane książki

Czytaj Webhosting

Chcesz być na bieżąco z naszymi informacjami? Zapisz się na Newsletter.

Zarejestruj domenę

Sprawdź dostępność swojej domeny:

.pl: 0 zł   .com: 19.90 zł
.com.pl: 0 zł   .eu: 19.90 zł