htaccess – cachování souborů v prohlížeči

  htaccess, Webhosting

Zde popisované cachování stránek je ukládání souborů stránek do mezipaměti prohlížeče – nejčastěji na lokální pevný disk počítače. Nedochází pak k načítaní všech zdrojů z WWW serveru (obrázky, JavaScripty, CSS styly atd.), ale využije se mezipamět prohlížeče. Načítání celé stránky tak může být výrazně rychlejší.

Chování mezipaměti prohlížeče lze ovlivnit pomocí příslušných HTTP hlaviček buď jednotlivě nebo podle typů souborů.

U webserveru Apache (tedy u nás na webhostingu) je jednou z možností cachování nastavit pomocí modulu mod_expires zápisem příslušných pravidel do souboru .htaccess.

<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault A600
ExpiresByType text/javascript A604800
ExpiresByType application/javascript A604800
ExpiresByType text/css A604800
ExpiresByType image/gif A604800
ExpiresByType image/png A604800
ExpiresByType image/jpeg A604800
ExpiresByType image/x-icon A604800
ExpiresByType text/html A60
</IfModule>
  • A31536000 je hodnotav sekundách udávající dobu po jakou se má uchovávat v mezipaměti prohlížeče daný soubor. Po vypršení této hodnoty se soubory označí jako expirovaný a při dalším načtení stránky se stáhnou soubory znovu. 
  • ExpiresDefault je hodnota ostatních nedefinovaných souborů a nastavení jejich doby max. načtení.
  • image/jpg je typ cachovaného souboru, zde si zvolíte dle php typ souboru, které chcete cachovat. 

Jako alternativní řešení ještě můžete použít následující verzi. Tato verze dělá nejen kompresi, ale zajišťuje cachování další souborů. 

 V případě, že tento kód nebude fungovat s naším htaccess, tak dejte web do adresáře domains/vase_domena_koncovka a dejte .htaccess s tímto kódem a případně jiným dalším, který máte od výrobce webu.

Osvědčené nastavení .htaccess, které je včetně komprese:

# BEGIN Compress text files
<ifModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html  
AddOutputFilterByType DEFLATE text/xml   
AddOutputFilterByType DEFLATE text/css   
AddOutputFilterByType DEFLATE text/plain   
AddOutputFilterByType DEFLATE image/svg+xml   
AddOutputFilterByType DEFLATE application/xhtml+xml   
AddOutputFilterByType DEFLATE application/xml   
AddOutputFilterByType DEFLATE application/rdf+xml   
AddOutputFilterByType DEFLATE application/rss+xml   
AddOutputFilterByType DEFLATE application/atom+xml   
AddOutputFilterByType DEFLATE text/javascript   
AddOutputFilterByType DEFLATE text/ecmascript   
AddOutputFilterByType DEFLATE application/javascript   
AddOutputFilterByType DEFLATE application/x-javascript   
AddOutputFilterByType DEFLATE application/ecmascript   
AddOutputFilterByType DEFLATE application/json   
AddOutputFilterByType DEFLATE application/x-font-ttf   
AddOutputFilterByType DEFLATE application/x-font-otf   
AddOutputFilterByType DEFLATE font/truetype   
AddOutputFilterByType DEFLATE font/opentype   
AddOutputFilterByType DEFLATE application/x-pointplus 
</ifModule>
# END Compress text files

# BEGIN Expire headers
<ifModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 2592000 seconds"
ExpiresByType image/x-icon "access plus 2592000 seconds"
ExpiresByType image/jpeg "access plus 2592000 seconds"
ExpiresByType image/jpg "access plus 2592000 seconds"
ExpiresByType image/png "access plus 2592000 seconds"
ExpiresByType image/gif "access plus 2592000 seconds"
ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
ExpiresByType text/css "access plus 604800 seconds"
ExpiresByType text/javascript "access plus 604800 seconds"
ExpiresByType application/javascript "access plus 604800 seconds"
ExpiresByType application/x-javascript "access plus 604800 seconds"
ExpiresByType text/html "access plus 604800 seconds"
ExpiresByType application/xhtml+xml "access plus 604800 seconds"
</ifModule>
# END Expire headers

# BEGIN Cache-Control Headers
<ifModule mod_headers.c>
<filesMatch "\.(ico|jpe?g|png|gif|swf)$">
Header set Cache-Control "public"
</filesMatch>
<filesMatch "\.(css)$">
Header set Cache-Control "public"
</filesMatch>
<filesMatch "\.(js)$">
Header set Cache-Control "private"
</filesMatch>
<filesMatch "\.(x?html?|php)$">
Header set Cache-Control "private, max-age=360, must-revalidate"
</filesMatch>
</ifModule>
# END Cache-Control Headers

# BEGIN Turn ETags Off
Header unset Pragma
FileETag None
Header unset ETag
# END Turn ETags Off

Správné cachování stránek, rychlost zpracování a další testy můžete vyzkoušet pomocí nástrojů:

http://tools.pingdom.com/fpt/

a

http://www.webpagetest.org/