misterunknown: PHP generierte Bilder Cachen

Moin,

ich habe ein PHP-Skript was Bilder zurückgibt, und zwar in folgender Form:

  
if(isset($_GET["bild"])) {  
	header('Content-type: image/png');  
	echo picture($_GET["bild"]);  
	exit(0);  
}  
function picture($name) {  
	switch($name) {  
		case("html.png"): return base64_decode("iVBORw0KGgoAAAANSUhEUgAAABYA[...]"); break;  
		case("edit.png"): return base64_decode("iVBORw0KGgoAAAANSUhEUgAAABAA[...]"); break;  
		case("delete.png"): return base64_decode("iVBORw0KGgoAAAANSUhEUgAAABAA[...]"); break;  
		case ...  
		...  
	}  
}  

Das Skript ruft ca. 5-10 kleine Bilder (16x16 px) aus sich selbst heraus auf.
Leider lädt der Browser jedes dieser Bilder bei jedem Seitenaufruf neu, was bis zu 3 Sekunden dauert. Kann ich dem Browser auf irgendeine Art und Weise klar machen, dass diese Bilder auch gecached werden können?

Grüße Marco

  1. Hi!

    Das Skript ruft ca. 5-10 kleine Bilder (16x16 px) aus sich selbst heraus auf.

    CSS-Sprites sollten eine Verbesserung auch gleich beim ersten Aufruf bringen.

    Leider lädt der Browser jedes dieser Bilder bei jedem Seitenaufruf neu, was bis zu 3 Sekunden dauert. Kann ich dem Browser auf irgendeine Art und Weise klar machen, dass diese Bilder auch gecached werden können?

    Ja, wobei die Betonung auf "können" liegt. Der Browser muss sich an solche Empfehlungen nicht halten. Nach meinem Kenntnisstand ist das Thema aber umfangreicher als eine Header-Zeile. Deswegen bitte ich dich, mit Suchwörtern wie "HTTP Cache Browser" erst einmal selbst bestehende Literatur dazu aufzusuchen.

    Lo!

    1. Moin,

      CSS-Sprites sollten eine Verbesserung auch gleich beim ersten Aufruf bringen.

      Danke für das Stichwort ;)

      Ja, wobei die Betonung auf "können" liegt. Der Browser muss sich an solche Empfehlungen nicht halten. Nach meinem Kenntnisstand ist das Thema aber umfangreicher als eine Header-Zeile. Deswegen bitte ich dich, mit Suchwörtern wie "HTTP Cache Browser" erst einmal selbst bestehende Literatur dazu aufzusuchen.

      Ich weiß, dass das keine todsicheren Optionen sind, allerdings ist die Anwendung auch eher für mich und ein paar Bekannte, wo ich weiß, dass aktuelle Browser vorhanden sind.
      Und selbst wenn nichts gecached wird, weil der Cache beispielsweise vollständig ausgeschalten ist, kann ich halt nichts dafür, dann dauerts eben ne Sekunde länger bis man alles sieht.
      Ich werd mal nach HTTP Cache Browser googlen...

      1. Moin,

        ich habe jetzt versucht, dem PNG-Bild verschiedene Header mitzugeben, die alle dem Browser sagen sollen, dass er das Bild cachen kann, aber nichts funktioniert. Scheinbar ist das über diese Methode nicht möglich.

        Ich teste mal die CSS-Sprites, es könnte wegen der verminderten HTTP-Requests schneller sein.

        Grüße Marco

        1. Hi!

          ich habe jetzt versucht, dem PNG-Bild verschiedene Header mitzugeben, die alle dem Browser sagen sollen, dass er das Bild cachen kann, aber nichts funktioniert. Scheinbar ist das über diese Methode nicht möglich.

          Vielleicht denkt der Browser sich, dass Bilder mit URLs mit Query-String nicht cache-würdig sind.

          Ich teste mal die CSS-Sprites, es könnte wegen der verminderten HTTP-Requests schneller sein.

          Auf alle Fälle. Und dann brauchst du auch nur eine "normale" URL.

          Lo!

          1. Hi,

            ich habe jetzt versucht, dem PNG-Bild verschiedene Header mitzugeben, die alle dem Browser sagen sollen, dass er das Bild cachen kann, aber nichts funktioniert. Scheinbar ist das über diese Methode nicht möglich.

            Doch, das sollte durchaus möglich sein.

            Was aber selbstverständlich nicht möglich ist, ist aus „funzt nich“-Beschreibungen ein Problem nachzuvollziehen.

            Vielleicht denkt der Browser sich, dass Bilder mit URLs mit Query-String nicht cache-würdig sind.

            Halte ich für eher unwahrscheinlich.

            MfG ChrisB

            --
            RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
            1. Moin,

              Doch, das sollte durchaus möglich sein.

              mir war es leider nicht möglich...

              Was aber selbstverständlich nicht möglich ist, ist aus „funzt nich“-Beschreibungen ein Problem nachzuvollziehen.

              Aus dem Beitrag sollte doch relativ zweifelsfrei hervorgehen, dass er trotz erweiterter Header-Informationen zum cachen, genau das nicht passiert ist.

              Vielleicht denkt der Browser sich, dass Bilder mit URLs mit Query-String nicht cache-würdig sind.
              Halte ich für eher unwahrscheinlich.

              Kann ich nicht genau sagen, allerdings vermute ich nach meinen Tests schon, dass Query-URLs nicht gecached werden. Ich dachte zwar erst das Gegenteil, da bei meiner normalen privaten Internetseite, bei der ich auch fast ausschließlich mit Querys arbeite, die Bilder schon gecached werden, die widerum werden aber ja normal über einen HTTP-Request angefordert und nicht per PHP-Skript geladen.

              1. Hi,

                Doch, das sollte durchaus möglich sein.
                mir war es leider nicht möglich...

                Das muss ja nichts heißen …

                Was aber selbstverständlich nicht möglich ist, ist aus „funzt nich“-Beschreibungen ein Problem nachzuvollziehen.
                Aus dem Beitrag sollte doch relativ zweifelsfrei hervorgehen, dass er trotz erweiterter Header-Informationen zum cachen, genau das nicht passiert ist.

                Nein, aus deiner Beschreibung geht eben nicht hervor, was genau du gemacht hast.
                Die Möglichkeit, dass du es schlicht falsch bzw. unzureichend gemacht hast, ist also durchaus gegeben.

                MfG ChrisB

                --
                RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?