Compresia Unui Website

This article has been written before more than 24months, information might old.

Dupa cum bine stiti mai toate browserele accepta pagini compresate in general compresate prin gzip primele versiuni ale prea bine cunoscutului server web apache au fost inzestrate cu un modul numit mod_gzip cu care se putea compresa o pagina web mai tarziu mai precis de la versiunea de apache 2 s-a inlaturat libraria mod_gzip.so si s-a inlocuit cu mod_deflate , o noua librarie pentru compresarea continutului web .

Explicarea detaliata a setarilor pentru acest modul ( mod_deflate ) se regasesc pe site-ul oficial apache.org la adresa http://httpd.apache.org/docs/2.0/mod/mod_deflate.html . Acest Modul reduce cu mult marimea unei pagini si astfel poate imbunatati viteza de accesare a unui site si in mod sigur va scuteste de mult bandwith aditional , bandwidth-ul lunar ( traficul lunar ) poate sa scada cu peste 70 de procente , insa toate aceste beneficii vin cu un pret si anume : consum in plus de CPU , cu alte cuvinte procesorul servarului va fi solicitat mai mult , solicitarea este relativ mica daca aveti servar dedicat nici nu se pune problema sa se creeze vreo instabilitate insa , dar majoritatea firmelor de webhosting la pachetele de hosting normal dezactiveaza aceasta optiune .

Eu totusi va recomand daca folositi acest mod de compresie sa nu compresati tot continutul cel mai eficace este sa compresati doar anumite tipuri de continut cel mai important continut care trebuie compresat este html , css si js ( Html + plain text , cascading style sheet si javaScript ) .

Urmatorul cod care il puteti folosi in fila .htaccess din directorul root in care aveti siteul este in opinia mea codul optim pentru a folosi la standardele maxime modulul deflate .


# BEGIN COMPRESS
# compress content with type html, text, and css
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/javascript text/javascript application/x-javascript text/css application/xml image/x-icon
# properly handle requests coming from behind proxies
Header append Vary User-Agent
# Properly handle old browsers that do not support compression
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# END COMPRESS

Daca aveti acces la configurarea apache-ului si implicit la modificarea fisierului de configurare ( httpd.conf ) ca sa activati acest modul trebuie sa stergeti caracterul „#” din fata liniei

LoadModule deflate_module modules/mod_deflate.so

dar insa daca nu aveti acces la configurarea apache-ului puteti incerca o a doua metoda de a va comprima webiste-ul si anume prin setarea bufferului de output din php.ini care sa aiba ca valuare numele unei functi de comprimare gzip : ob_gzhandler , mai concret daca aveti acces sa modificati fisierul php.ini va trebui sa schimbati linia

;output_handler =

in urmatoarea linie :

output_handler ob_gzhandler

daca nu aveti acces la php.ini se poate seta dinamic aceasta valuare la nivel de .htaccess prin
se poate alege intre php_value si php_flag diferenta intre cele doua este ca php_value accepta bolean , string , integer iar php_flag acepta numai bolan sub forma de 1 ,0 sau on , off , exemplu : php_value optiune-php valuare(bol,string,int) php_flag optiune-php valuare(bolean) tineti minte ca un coment in htaccess se face cu ajutorul caracterului # si sa nu uitati ca spre deosebire de majoritatea limbajelor de programare htaccess nu acepta un coment pe aceias linie cu un cod daca se intampla sa aveti un cod urmat de un coment care se afla pe aceias line se va genera o erroare interna 500 )

Concret ca sa setati cu ajutorul .htaccess-ului valuarea optiniunii output_handler se procedeaza astfel :

php_value output_handler ob_gzhandler

Daca ati adaugat acest cod in .htaccess tot continutul care provine din paginile cu extensia .php va fi comprimat insa acest cod nu comprima si css si js-ul pentru a comprima si aceste doua tipuri putem folosi urmatorul cod :

php_value output_handler ob_gzhandler
<filesMatch ".js$">
AddHandler application/x-httpd-php .js
</filesMatch>
<filesMatch ".css$">
AddHandler application/x-httpd-php .css
</filesMatch>

Dar pentru ca functia ob_gzhandler sa poata fi folosita este nevoie ca extensia zlib a php-ului sa fie activata , dar nu va temeti in general aceasta extensie este activata pe majoritatea hosturilor chiar si shared chiar si free .

Dar din nou s-ar putea sa nu aveti acces la utilizarea php_value si php_flag , asta din cauza ca probabil in httpd.conf optiunea

AllowOverride

este setata pe None daca vreti ca php_value si php_flag sa fie active terbuie setata pe

AllowOverride All

In majoritatea cazurilor poate merge si cu AllowOverride +Options sau AllowOverride Options .
Daca nu aveti acces la modificarea fisierului httpd.conf iar AllowOverride este None si folositi php_value sau php_flag este foarte posibil sa va treziti cu o erroare interna 500 .

Nu uitati ca puteti sa setati nivelul compresari gzip prin 2 metode fie prin intermediul modificarii fisierului php.ini fie prin declararea functiei ini_set() , setarea pentru nivelul compresari este zlib.output_compression_level si poate avea o valoare de la 1 la 9 unde 1 este cea mai redusa compresie iar 9 cea mai mare va recomand sa nu folositi chiar 9 pentru ca nu sunt foarte mair diferente de marime intre cele 9 nivele dar daca folositi ultimul nivel se consuma resurse aditionale care pot fi salvate daca folositi o valuare mai mica .

Ultima metoda prin care se poate compresa o pagina web este prin includera urmatorului cod in fiecare pagina php .


ob_start('ob_gzhandler');

Aceasta ultima metoda este destul de greu de implementat si complicat de controlat la nivel larg pentru ca neatentia poate sa dea nastere unei duble compresii , care la randul ei genereaza eroarea : Content Encoding Error . Si depistarea cauzei iti poate provoca migrene .

Sper ca va ajutat desi nu am intrat foarte tare in detaliu pot sa va spun doar ca in multe cazur compresia paginilor web este o sabie cu 2 taisiuri poate optimiza site-ul sau il poate chiar ingreuna depinde de modul configurarii , totusi ar fi indicat sa incercati pentru ca va poate aduce multe beneficii .

Share the joy

2 Comments

  1. Azrael-sub7 ianuarie 8, 2009
  2. nicu ianuarie 7, 2009

Leave a Reply