Problématique de CACHE pour les images de mon site web

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par boby55, 22 Septembre 2010.

  1. boby55
    boby55 WRInaute occasionnel
    Inscrit:
    2 Avril 2008
    Messages:
    354
    J'aime reçus:
    0
    Bonjour;

    Mon site affiche des photos de personnes et j'ai la problématique suivante :

    Afin d'optimiser la rapidité d'affichage de mes pages je voulais mettre en place une règle pour positionner un cache avec un .htaccess situé dans un répertoire de photos jpg :

    Code:
    # BEGIN Cache-Control Headers
    <IfModule mod_headers.c>
       Header set Cache-Control "max-age=29030400, public"
    </IfModule>
    # END Cache-Control Headers
    Celà aurait soulagé le serveur, et le navigateur client aussi mais j'ai un soucis :

    Bien que chaque photo soit un fichier unique (donc une url unique) directement appelée en ressource static, j'ai 0.5% des photos qui sont modifiées n'importe quand par un utilisateur (possibilité de faire pivoter sa photo).

    Du coup, avec ma règle pour le cache, impossible pour l'utilisateur ou des personnes ayant déjà affichées sa photo de voir la rotation effectuée ...

    Bref un problème qui me semble insolvable :mrgreen:
    Si quelqu'un à une approche différente ou une idée de génie je suis preneur, merci.
     
  2. bossboss
    bossboss WRInaute occasionnel
    Inscrit:
    28 Août 2004
    Messages:
    344
    J'aime reçus:
    0
    SI modifier la photo implicait un rechargement de celle-ci en modifiant l'url de l'image, ajouter un argument virtuel?
     
  3. Julia41
    Julia41 WRInaute passionné
    Inscrit:
    31 Août 2007
    Messages:
    1 774
    J'aime reçus:
    0
    Tu devrais faire ton header avec un script php qui vérifie si le fichier a changé.
    Normalement tu devrais pouvoir vérifier la date de modification du fichier et ainsi adapter les header.
    La technique pourrait être de mettre une query string à la fin.
    image.png?id=derniere modification.
     
  4. boby55
    boby55 WRInaute occasionnel
    Inscrit:
    2 Avril 2008
    Messages:
    354
    J'aime reçus:
    0
    Mon soucis c'est que j'aimerais ne pas avoir à faire un .php qui renvoie l'image (beaucoup plus long que d'appeler l'image en ressource static).
     
  5. cedric_g
    cedric_g WRInaute accro
    Inscrit:
    18 Janvier 2006
    Messages:
    2 930
    J'aime reçus:
    2
    Euh en ajoutant une date au bout du path de l'image, tu n'ajoutes pas de PHP non ?

    C'est une technique très largement utilisée pour "dater" les feuilles de styles CSS et autres JS, ça doit en principe fonctionner pour les images : Julia a donc donné une excellente solution :)
     
  6. boby55
    boby55 WRInaute occasionnel
    Inscrit:
    2 Avril 2008
    Messages:
    354
    J'aime reçus:
    0
    si j'ai bien compris :

    j'ai une page index.php avec 1 balise
    Code:
     <img src="/photos/photo-1242.jpg"/>
    dans ma page index.php j'ai actuellement une fonction qui reçoit la PK de mon image en base et qui calcul le path à écrire dans l'output.
    Il faudrait que je modifie ma fonction pour qu'elle compare date_création et date_modification (fonction php stat )de mon fichier image, et si je trouve une différence je renvoie un timestamp de la derniere modification dans le path. Ainsi la photo modifiée qui correspond à une nouvelle url forcera un rechargement coté client
    Code:
     <img src="/photos/photo-1242.jpg?x=785454521"/>
    Et les photos non modifiée je garde un simple
    Code:
     <img src="/photos/photo-1242.jpg"/>
    Je suis tout excité à l'idée de résoudre mon problème :mrgreen:
     
  7. boby55
    boby55 WRInaute occasionnel
    Inscrit:
    2 Avril 2008
    Messages:
    354
    J'aime reçus:
    0
    J'ai fais plus simple, ma fonction qui calcul le path de mon image ajoute comme suffixe la date de création de mon image

    Code:
    $statPhoto = stat($chemin);
    $chemin .= '?y='.@date('dmyHis',$statPhoto['ctime']);
    Comme chaque rotation d'une photo créé en faite une nouvelle photo, cela rend unique l'url et permet de gérer le rafraichissement de l'image si besoin.


    Merci beaucoup @Julia41 : j'avais mal compris ton explication mais c'est exactement ce que j'ai réalisé au final c'est parfait
    Merci @cedric_g : tu m'a aidé à comprendre julia41 :wink:
     
  8. Julia41
    Julia41 WRInaute passionné
    Inscrit:
    31 Août 2007
    Messages:
    1 774
    J'aime reçus:
    0
    Oui, je parle bien souvent trop "geek" (je me comprends tout seul donc je suis content) désolé pour ça.

    Sinon, fait un peu gaffe à la fonction stat, elle est "très" gourmande (je dis "très" sur très gros site ça peut bouffer énorme).
    Si tu as accès à ton php.ini ou que ton hébergeur te permet quelques fraudes par .htaccess
    regarde du côté des variables :
    realpath_cache_size
    realpath_cache_ttl

    Bon, après ça dépends réellement du nombre d'affichage que tu as. Sur des sites énormes, ça m'a permis de gagner énormément même si ça n'a pas value un vrai système de cache (les headers que tu donnes) car le "?" est généralement non caché (ndlr : ça veut dire variable).
    Je te suggérerais bien de rewriter ça dans ce sens :
    /photos/photo-1242.jpg?x=785454521
    en
    /photos/785454521/photo-1242.jpg

    Bon, là c'est apache qui bouffra un peu plus.

    Mettre ces images sur un serveur lighttpd pourrait être pas mal et pour le rewrite ça donnerait :
    url.rewrite-once = ( "/photos/(.+)/(.*)" => "/photos/$1?x=$2" )
    j'arrête ma propagande ;)
     
  9. boby55
    boby55 WRInaute occasionnel
    Inscrit:
    2 Avril 2008
    Messages:
    354
    J'aime reçus:
    0
    @Julia41 : pas de soucis j'avais mal lu surtout :roll:

    pour info je tourne à 12000 / 18000 pages vues par jour et j'ai un serveur dédié Kumsufi.

    Je pense que pour le moment le serveur qui n'héberge que mon site devrait tenir la charge :wink:
     
  10. boby55
    boby55 WRInaute occasionnel
    Inscrit:
    2 Avril 2008
    Messages:
    354
    J'aime reçus:
    0
    Hello !

    Je me suis fait violence et j'ai mis en place du rewriting de ce genre :

    Code:
    /photo-du-concours/2010-06-030610181834/mini_9*****.jpg
    (Mon url contenant l'année, le mois pour trouver le répertoire de la photo, et le paramètre pour le cache)

    J'ai effectivement remarqué que le plug-in FF PageSpeed se plaint du passage d'une variable pour une ressource statique. Et par ailleurs j'ai cru comprendre qu'avec un paramètre de ce genre , le cache proxy ne fonctionnait pas (meme si je me demande si c'est toujours utilisé de nos jours :mrgreen: )

    J'ai aussi regardé ce que tu m'avais expliqué et modifié mon paramétrage PHP, mais sans trop savoir quelles valeurs conviendraient, j'ai doublé celles par défaut :
    realpath_cache_size : 24
    realpath_cache_ttl : 240
     
  11. Julia41
    Julia41 WRInaute passionné
    Inscrit:
    31 Août 2007
    Messages:
    1 774
    J'aime reçus:
    0
    Doublé c'est bien, tu peux même mettre des valeurs énormes si tu veux mais ça peut avoir les valeurs inverses.
    Parfait pour le rewriting en tout cas, c'est beaucoup plus jolie je suis d'accord avec toi ;)
    Si tu veux profiter de cache speed, tu pourrais regarder pour monter un serveur web sous lighttpd ou nginx pour ce contenu dans un sous domaine. Le cache proxy est pas mal utilisé en entreprise.

    Enfin voilà, je pense que tu as trouvé la bonne solution, le realpath_cache est un "petit truc" tu vois vraiment les différences de perfs lorsque tu as un nombre de fichier énorme (supérieur à 100K) dans un seul répertoire.
     
Chargement...
Similar Threads - Problématique CACHE images Forum Date
Bjr Comment trouver 3 problématiques non résolues qui ne présentent pas de solution ? Débuter en référencement 23 Octobre 2017
Problématique redirection 301 Netlinking, backlinks, liens et redirections 29 Mai 2016
Choix problématique d'un NDD Référencement Google 10 Novembre 2015
Problématique de changement de dns pour site bien positionné Débuter en référencement 17 Mai 2015
Problématique url innternationalisation d'un site Débuter en référencement 16 Juillet 2013
Problématique UK / US duplicate Référencement international (langues, pays) 20 Juin 2013
Problèmatique de Duplicate + robots.txt Débuter en référencement 31 Mai 2013
Problématique des liens de conception de sites Netlinking, backlinks, liens et redirections 24 Mars 2013
Upload fichiers par user et problématique virus ? Développement d'un site Web ou d'une appli mobile 20 Septembre 2012
Encodage problématique Développement d'un site Web ou d'une appli mobile 14 Septembre 2012
Mémoire - WebAnalytics - Suggestions de problématiques ? Google Analytics 17 Juillet 2012
Indexation Multilingue Problématique Crawl et indexation Google, sitemaps 22 Mars 2012
recherche d'une problématique pour mon stage de fin d'étude Débuter en référencement 20 Mars 2012
Aide formulation de problématique mémoire Le café de WebRankInfo 8 Décembre 2011
Site destiné à un public FR, hébergement US => problèmatique? Débuter en référencement 5 Octobre 2011
Redirections 301 problématiques sur prestashop Débuter en référencement 21 Juillet 2011
Problématique optimisation accès bdd mysql ... Développement d'un site Web ou d'une appli mobile 8 Mai 2011
Marges problématiques Développement d'un site Web ou d'une appli mobile 30 Mars 2011
Est-ce problèmatique de mettre des liens sur des H1, H2, etc Référencement Google 2 Novembre 2010
Requete MYSQL problématique Développement d'un site Web ou d'une appli mobile 31 Octobre 2010