Tom: imagettftext und browser cache

Beitrag lesen

Hello,

ich habe ein großes transfervolumen auf
meiner website festgestellt.

ich erzeuge bilder mit imagettftext,
also bild mit text.

diese bilder werden von den usern sehr oft
aufgerufen.

frage: werden die aus dem browser-cache geholt
oder werden die immer wieder neu von meinem server
abgerufen???

Das entscheidet der jeweilige Browser.
Bei passender Einstellung (Normalfall) schaut der bei jedem Request erst im Cache nach, ob er dort einen Eintrag findet.

Wenn Du beim Ausliefern der Ressource einen Header mitsendest:

z.B:

$last_modified = @gmdate('D, d M Y H:i:s',@filemtime(PICPATH.$filename)).' GMT';
     header ("Last-Modified: $last_modified");

dann wird der Browser beim Anfragen vermutlich einen Request-Header mitsenden:

$_SERVER['HTTP_IF_MODIFIED_SINCE']

Den kannst Du dann nach entsprechender Decodierung mit dem aktuellen $last_modified vergleichen
und wenn Gleichheit vorliegt, dem Browser mitteilen, dass er bitte seinen Cache benutzen soll:

header("HTTP/1.0 304 Not Modified");
     header("Cache-Control: max-age=86400, must-revalidate");

und z.B. erst nach Ableuf eines Tages wieder einen Request senden soll, also solange _nur_ seinen Cache benutzen soll.

Es sind also mehrere Dinge zu beachten.

Wie ist der Browser überhaupt drauf?
Der IE regelt das z.B. so:

  • Automatisch: er schaut, ob er einen Zeitstempel zur Ressource hat und
         eine Gültigkeit für diese und fragt nach, wenn die Gültigkeitsdauer
         abgelaufen ist. Dann sendet er auch seinen Zeitstempel der Ressource mit
  • Nie: hat er eine Ressource im Cache, nutzt er immer den Cache
  • Bei jedem Zugriff: Er fragt immer nach der Ressource. Ob er dann den
         Zeitstempel mitsendet, wenn er einen hat, hängt vom Brwoser ab
  • Nach jedem Start: Er fragt immer nur beim ersten Zugriff nach dem Start nach,
         ob die Ressource neu ist. Dabei sendet er aber auch den Zeitstempel mit,
         wenn er einen hat.

Kurz gesagt:
Wenn Du beim Ausliefern von Ressourcen keinen Zeitstempel und keine Gültigkeitsdauer dafür mitsendest, kann der Browser diese nicht beachten. Du kannst auf dem Server also nicht sicher entscheiden, ob die Ressource neu erstellt und vollständig ausgeliefert werden muss, weil Du nicht weißt, welchen Stand der Browser bereits kennt.

Schau dir die entsprechenden Request-Header des Browsers an.

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg

--
Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de