Kompresowanie stron internetowych

Każdy element serwisu ma swoją wielkość. Zastosowanie kompresowania stron internetowych pomaga zmniejszyć wagę dowolnych elementów witryny. Obecnie chyba nie istnieje przeglądarka, która nie obsługuje tego typu serwowania witryn. Wbrew pozorom umiejętność kompresowania serwisów WWW jest bardzo pomocna.

Wady i zalety kompresowania witryn internetowych

Kompresja stron internetowych ma zalety, które wpływają na cały serwis. Bezpośrednią zaletą jest skrócenie czasu ładowania witryny. Podczas tworzenia rankingu stron, Google nadal patrzy na prędkość ładowania strony. To przekłada się na pozycję w wynikach wyszukiwania. Im wyżej strona w wynikach wyszukiwania, tym więcej czytelników będzie odwiedzać witrynę. Skrócenie czasu ładowania witryny na pewno nie pozostanie bez echa i sprawi, że użytkownicy chętniej będą wracać na Wasze strony. Jeśli ktoś ma w swoim serwisie umieszczone reklamy, to chyba nie muszę nikomu przypominać, że ilość odwiedzin bezpośrednio przekłada się na grubość portfela. Oczywiście trzeba pamiętać, że w serwisach jest też stosowany JavaScript, który również może wpływać na prędkość ładowania strony. Najlepiej z nim nie przesadzać. Dobrze jest tworzyć strony bez użycia JavaScriptu, a później go dokładać. Ta strategia najlepiej się sprawdza w przypadku technologii AJAX o której pisałem w jednym z poprzednich artykułów. Dzięki temu strona bardzo dobrze działa niezależnie od tego, czy JS jest włączony. Jeśli chodzi o wady, to jedyną wadą może być brak wsparcia dla kompresji GZIP w przestarzałych przeglądarkach. Niestety nadal istnieją ludzie, którzy nie aktualizują swoich przeglądarek do najnowszych wersji. Istnieją dwa sposoby kompresji witryn internetowych:

  • kompresja w PHP
  • kompresja w pliku .htaccess

Kompresowanie serwisów internetowych w PHP

Pierwsza metoda opiera się na kompresji wyniku wygenerowanego przez skrypt. Na początku skryptu wywołujemy funkcję inicjującą przechwytywanie bufora (ob_start). Funkcja ta przyjmuje opcjonalny parametr, którym jest nazwa funkcji, która ma zostać wywołana po skończeniu przechwytywania. PHP od wersji 4 posiada wbudowaną funkcję, która odpowiada za kompresję – ob_gzhandler().Istnieją dwa sposoby uruchomienia kompresji:

  • manualny
ob_start();
// kod
$bufor=ob_get_contents();
ob_end_clean();
ob_gzhandler($bufor);
  • automatyczny
ob_start('ob_gzhandler');
// kod
ob_end_clean();

W pierwszym przypadku przechwyciłem dane, które zostały wysłane do bufora, a następnie uruchomiłem funkcję odpowiedzialną za kompresjęob_gzhandler(). W drugim przypadku użycie funkcji ob_end_clean() automatycznie wywołało funkcję odpowiedzialną za kompresję, która została podana jako parametr przy wywoływaniu funkcji ob_start(). Resztę wykona za Nas PHP. Jednak jeśli ktoś chce, to na bazie funkcji ob_gzhandler() może stworzyć własną funkcję, odpowiedzialną za kompresję. Przy kompresowaniu witryny WWW należy pamiętać, by kompresować wszystkie elementy, które składają się na serwis internetowy, a nie sam kod HTML. Jak się okazuje, to właśnie te pozostałe elementy zajmują najwięcej miejsca. Jeśli koniecznie chcecie użyć do tego PHP, to będziecie musieli przekierować wszystkie pliki, tak aby były przetwarzane przez PHP. W takim wypadku procedura przetworzenia każdego pliku będzie wyglądać następująco:

  • włączenie kompresji za pomocą funkcji ob_start
  • sprawdzenie, czy podany plik istnieje
  • jeśli nie istnieje, to zwracamy błąd 404
  • czytanie pliku np za pomocą funkcji readfile
  • zakończenie przechwytywania buforu

Jest to dosyć skomplikowane i ma ogromną wadę – każdy plik musi zostać przetworzony przez PHP, a to wiąże się ze zwiększonym zużyciem mocy obliczeniowej procesora oraz innych zasobów. Jednak istnieje dużo łatwiejszy sposób – kompresja w pliku htaccess.

Kompresowanie stron internetowych w pliku .htaccess

Ten rodzaj kompresowania witryn internetowych jest o wiele lepszy. Polega jedynie na wykonaniu jednej komendy w pliku .htaccess. Oczywiście należy pamiętać o zabezpieczeniu przed błędem 500i dodać sprawdzanie, czy na serwerze istnieje odpowiedni moduł:

  SetOutputFilter DEFLATE

Dodatkowo za pomocą komendy FilesMatch i wyrażeń regularnych, możemy zdefiniować, jakie pliki mają zostać poddane kompresji:

<FilesMatch "\.(php|html).*$">

    SetOutputFilter DEFLATE

Wyrażenia regularne szerzej opisałem w artykule Wyrażenia regularne – łatwiejsze niż myślisz.

Właśnie się przekonaliście, że kompresowanie stron internetowych jest dużo prostsze niż się wydaje. Jeśli będziecie mieli jakieś pytania, to standardowo piszcie w komentarzach.

Twitter Obserwuj mnie na Blip.pl 

Dodaj komentarz

Twój komentarz

CommentLuv badge