2010-04-20 18 views
24

J'a effectué des tests sur mon site en utilisant PageSpeed ​​de Google et il recommande que je « cache levier du navigateur » et a fourni la ressource suivante:Set expiration de caching HTTP, Recommandé par Google pagespeed

http://code.google.com/speed/page-speed/docs/caching.html#LeverageBrowserCaching

Cette ressource explique jamais comment réellement changer la date d'expiration de mes en-têtes http. Est-ce que je fais cela via .htaccess? Je voudrais définir la mise en cache aussi longtemps que possible (sans violer la politique de Google d'un an max).

Un conseil sur les paramètres recommandés (pour une communauté personnalisée de réseautage social axée sur les php) serait grandement apprécié.

Répondre

28

Dans votre .htaccess racine:

<IfModule mod_expires.c> 
    ExpiresActive On 
    ExpiresDefault "access plus 1 seconds" 
    ExpiresByType image/x-icon "access plus 2592000 seconds" 
    ExpiresByType image/jpeg "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 216000 seconds" 
    ExpiresByType application/x-javascript "access plus 216000 seconds" 
    ExpiresByType text/html "access plus 600 seconds" 
    ExpiresByType application/xhtml+xml "access plus 600 seconds" 
</IfModule> 

Et suivre par:

<IfModule mod_headers.c> 
<FilesMatch "\\.(ico|jpe?g|png|gif|swf)$"> 
Header set Cache-Control "max-age=2692000, public" 
</FilesMatch> 
<FilesMatch "\\.(css)$"> 
Header set Cache-Control "max-age=2692000, public" 
</FilesMatch> 
<FilesMatch "\\.(js)$"> 
Header set Cache-Control "max-age=216000, private" 
</FilesMatch> 
<FilesMatch "\\.(x?html?|php)$"> 
Header set Cache-Control "max-age=600, private, must-revalidate" 
</FilesMatch> 
Header unset ETag 
Header unset Last-Modified 
</IfModule> 

C'est exactement le même code que j'utilise sur chaque propriété que je gère et m'offre (et PageSpeed) les résultats les plus satisfaisants. On peut argumenter sur des règles spécifiques, c'est pourquoi j'ai dit qu'il satisfait moi, mais il satisfait certainement PageSpeed.

+2

Cela dépend de ce que vous entendez par "beaucoup de conditions". Les conditions doivent être traitées par le serveur web sur chaque requête HTTP, donc si vous pensez à plus de 65 000 conditions, alors ce n'est certainement pas une bonne idée. – methode

+8

Juste un conseil. Vous pouvez simplement écrire "accès plus 1 an" ou même des directives plus complexes comme "accès plus 1 mois 15 jours 2 heures" qui est beaucoup plus facile à lire et à maintenir que quelques secondes. – GeneQ

+0

@GeneQ, +1 pour cette astuce. Je suis habitué à un timestamp unix, c'est probablement la raison pour laquelle j'utilise des secondes dans les règles. – methode

1

Cela peut être fait avec htaccess et php. En règle générale, vous ne voulez pas forcer la mise en cache du html réel depuis son contenu basé sur une base de données dynamique (cela peut être fait avec la fonction php header() si nécessaire). Ce que vous voulez mettre en cache est externe css & javascript, et les fichiers image.

Voir ici pour une solution .htaccess: http://www.askapache.com/htaccess/apache-speed-expires.html