2009-02-05 8 views
0

J'ai un siteQuel est le meilleur moyen de mettre en cache des images sur mon site Web?

www.somesite1.com qui obtient tout son contenu d'image de www.somesite2.com

Au moment chaque fois qu'une image doit être affichée, nous utilisons simplement une URL absolue pour obtenir comme ça

<img src="http://www.somesite2.com/images/myimage.jpg" /> 

Ainsi, chaque fois qu'un utilisateur va à www.somesite1.com pour le contenu www.somesite2.com obtient martelée.

Je suis à la recherche de moyens astucieux de mettre en cache des images, peut-être en utilisant des en-têtes http ou similaires. Merci

+0

Voulez-vous que les clients (navigateurs) mettent en cache les images? Ou voulez-vous les mettre en cache sur somesite1? – Artelius

+0

Je serais principalement intéressé par les mettre en cache sur le serveur, mais la mise en cache du navigateur serait également utile – m3clov3n

Répondre

0

Conservez un serveur Web distinct uniquement pour les images, car les images sont des requêtes http distinctes.

+0

sauf si vous êtes flickr, avoir un serveur entier juste pour servir des images ne devrait pas être un problème. Si le nombre maximum de 2 requêtes http dans les anciens navigateurs vous ralentit vraiment, alors faites juste un sous-domaine pour le contourner. – nickf

3

La réponse la plus simple consiste à définir un en-tête HTTP Expires avec une valeur future éloignée (disons 10 ans). De cette façon (en théorie), le navigateur ne devrait jamais demander cette image à nouveau en prenant une énorme charge sur votre serveur si vous avez beaucoup de visites répétées. Bien sûr, vous devrez trouver un mécanisme pour changer l'URL de l'image lorsque vous voulez mettre à jour l'image. La plupart des gens abordent cela en ajoutant un numéro de build dans le chemin quelque part (ou en ajoutant un numéro de build à une chaîne de requête).

Il y a quelques bonnes informations sur les performances (y compris l'utilisation de l'en-tête Expires) ici:

http://developer.yahoo.com/performance/rules.html

Personnellement, je ne vous soucier de la mise en cache ces derniers sur le côté serveur (je suppose qu'ils ne sont pas généré dynamiquement). Ils sont servis directement à partir du disque de sorte que les frais généraux devraient être minimes de toute façon. Assurez-vous que vous disposez d'une machine distincte pour traiter le contenu statique et utilisez un serveur Web très léger, tel que Lighttpd ou nginx, ce qui devrait contribuer à augmenter le débit.

http://www.lighttpd.net/

http://nginx.net/

0

Il n'y a rien de mal avec votre configuration, il fonctionne parfaitement. Pour comprendre ce que vous devez faire pour que cela fonctionne mieux, vous devez comprendre le fonctionnement du navigateur.

D'abord, il lira le document HTML de www.somesite1.com. Ensuite, il va le lire, à la recherche d'URL. Quand il en trouve, il commencera à les télécharger.

D'un point de vue du navigateur, il n'y a pas de relation entre le site 1 et 2. Si vous voulez améliorer la mise en cache pour le site 2, vous pouvez ignorer complètement le site 1.

Cela signifie que vous devez dire serveur Web sur le site 2 pour envoyer les informations de cache correctes au navigateur. Par exemple, faites-le répondre à HEAD requests et/ou définir la durée de vie de l'image à une grande valeur dans le champ d'en-tête Cache-Control.

0

À moins que votre site Web ne soit très populaire, vous n'avez probablement pas besoin d'un deuxième serveur pour le contenu statique.

Si vous utilisez HTTP Apache, vous pouvez installer mod_cache. Vous pouvez également envisager d'installer Squid Cache. Je suis d'accord avec Andy Hume cependant, si vous avez besoin d'un second serveur, gardez le léger et utilisez quelque chose comme lighttpd et Squid.

Questions connexes