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 \
 text/xml \
 text/css \
 text/plain \
 image/svg+xml \
 application/xhtml+xml \
 application/xml \
 application/rdf+xml \
 application/rss+xml \
 application/atom+xml \
 text/javascript \
 text/ecmascript \
 application/javascript \
 application/x-javascript \
 application/ecmascript \
 application/json \
 application/x-font-ttf \
 application/x-font-otf \
 font/truetype \
 font/opentype \
 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/

Byl pro Vás tento návod užitečný?