21-03-2013, 02:59 PM
Citation :non justement sans la variable j'ai systématiquement l'ancienne image mise en cache, et comme j'affiche une carte des positions capturée elle n'est donc pas a jour... alors qu'en allant voir sur le disque j'ai bien la nouvelle image. Et j'ai du mettre un MD5 car si la variable ne change pas, l'image est mise a jour 1 seule fois.
je pense que cela rejoint ce que je t'ai dit: au moment où le client voit qu'il a besoin de l'image, il demande au serveur si celle-ci a été modifiée, et comme le serveur n'a pas fini d'enregistrer l'image à cet instant, il répond que l'image n'est pas modifiée, et donc, le client ne la retélécharge pas.
La variable avec le md5 n'est qu'un by-pass du problème sous-jacent, qui ne résoud pas ledit problème.
L'histoire de la compression va également dans ce sens: la compression fait perdre du temps en calculs intermédiaire, mais fait gagner de la place. Pas de compression = image sauvée plus vite = image prête avant que le client ne la demande.
Je pense que tu devrais isoler l'image et le code qui la génère.
Plutôt que de générer l'image dans la page web, isole le code générant l'image dans un fichier PHP séparé, appellons-le "image-maker.php".
Dans la page web, tu n'appelles pas "image.png", mais "image-maker.php".
Dans ton image-maker.php, tu génère l'image, puis tu la sauvegarde sur le disque. En même temps que cette sauvegarde, tu renvoies l'image calculée au navigateur (header('Content-Type=image/png'); + imagepng($ressource)). Tu peux ajouter un test conditionnel, au début du script, qui va directement rediriger le client vers l'image png si celle-ci n'a pas besoin d'être mise à jour.
Ce système permet:
- De faciliter la maintenance, en séparant le code de la page web du code de génération de l'image
- De bénéficier du cache du client, lors de la redirection vers l'image enregistrée
- De ne pas faire poireauter le client pendant l'enregistrement de l'image sur le disque, puisque cette image est également renvoyée au client
- De se passer, normalement, du md5
Tu peux, enfin, ajouter un test conditionnel dans l'image-maker.php qui va faire attendre le client (sleep()) tant que l'image n'est pas sauvegardée, pour éviter les collisions