wechselndes Hintergrundbild, dennoch Caching
kölir
- sonstiges
0 Cheatah0 Deus Figendi0 Cheatah
0 johann0 Einwurf0 ChrisB0 Daniel Thoma
Mittag,
möchte zufällig wechselnd immer ein Hintergrundbild setzten. Dabei würde ich dies aber gerne so realiesieren, dass nur das Bild geholt werden muss, wurde dieses eine Hintergrundbild bereits einmal geladen soll es eigentlich schon gecahed sein.
Ist es möglich, im CSS ein Hintergrundbild zu definieren.
Dieses Hintergrundbild z.B. bg.gif wird in wirklichkeit als PHP interpretiert und innerhalb dieser PHP wird zufällig auf ein Bild "weitergeleitet". Ist dies möglich und ist das eine konforme Lösung für die gängigsten Browser?
Wäre halt echt blöd, wenn sich der Client jedesmal das Bild neu holen muss, obwohl er es von einem früheren Aufruf eventuell schon kennt ...
Gruß
Hi,
möchte zufällig wechselnd immer ein Hintergrundbild setzten. Dabei würde ich dies aber gerne so realiesieren, dass nur das Bild geholt werden muss, wurde dieses eine Hintergrundbild bereits einmal geladen soll es eigentlich schon gecahed sein.
bei Deinem Vorgehen - Generierung der Grafik auf Serverseite unter Beibehaltung der URL - wurde die Grafik *nie* bereits einmal geladen. Sie wird stets frisch generiert.
Wäre halt echt blöd, wenn sich der Client jedesmal das Bild neu holen muss, obwohl er es von einem früheren Aufruf eventuell schon kennt ...
Wenn er es kennt, muss er es _er_kennen können. Das entscheidende Kriterium hierzu ist die URL.
Cheatah
bei Deinem Vorgehen - Generierung der Grafik auf Serverseite unter Beibehaltung der URL - wurde die Grafik *nie* bereits einmal geladen. Sie wird stets frisch generiert.
Wenn er es kennt, muss er es _er_kennen können. Das entscheidende Kriterium hierzu ist die URL.
Ich kenne das Verhalten genau umgekehrt: URL identisch, Ressource ist die gleiche (also der Mime-Typ), okay, cache. Das hat mir auch schon Probleme bereitet, eben weil das Bild aktualisiert sein sollte (Graph aus Datenbank). Lösung: GET-Variable übergeben, die nicht ausgewertet wurde (timestamp), folglich jedesmal eine andere URL, Browser läd jedes Mal neu.
Für den vorliegenden Fall wäre das dass man eben keine zufällige Variable übergibt, sondern eine die das Bild identifiziert. Dazu müsste man aber vielmehr das HTML (respektive CSS) dynamisch ändern (nämlich die Bild-Refferenz) und nicht das Bild selber. Und dann... kannst du eigentlich auch normale Bilddateien nehmen.
Z.B. so:
a.lustigerlink {
color:#123456;
}
.foobar {
eigenschaft:wert;
}
~~~~~~php
<?php
echo ('body {
background-image:url(./images/bg'.rand(0,9).'.png);
}
?>
~~~~~~css
.another_class {
margin-top:15px;
}
So sollte immer ein zufälliges Bild aus den Bildern bg0.png bis bg9.png ausgewählt und gezeigt werden und es dürfte auch idR aus dem Cache geholt werden.
_Aber_ man sollte das wohl besser in der HTML-Datei machen und nicht in einer externen CSS-Datei, weil diese oftmals auch gecached werden :)
Gruß
Hi,
Ich kenne das Verhalten genau umgekehrt: [...]
Du hast zwar Recht, aber am Problem vorbei geredet. Dem OP geht es offenbar um Folgendes: Wenn der Server in seinem Zufallsmechanismus beim Aufruf der (einen) entsprechenden URL eine Grafik erzeugt, die der Client schon einmal bekommen hat, soll er (der Client) sie aus seinem Cache nehmen. Die hierzu entscheidenden Informationen habe ich gegeben.
Für den vorliegenden Fall wäre das dass man eben keine zufällige Variable übergibt,
Und sprich bitte bei Parametern nicht von Variablen. Ich nenne Websites ja auch nicht Zeitschriften.
So sollte immer ein zufälliges Bild aus den Bildern bg0.png bis bg9.png ausgewählt und gezeigt werden und es dürfte auch idR aus dem Cache geholt werden.
Das geht übrigens sogar, ohne HTML- oder CSS-Code zu verändern und ohne auf Krücken wie JavaScript zurückzugreifen.
Cheatah
Hallöle,
du könntest auch einfach das zufällige Hintergrundbild in die auszuliefernde HTML-Datei schreiben. Für jedes Zufallsbild erstellst du nun für diesen Caching-Hash-Header einen anderen Hash, sodass der Client sieht, die Seite mit dem Hintergrundbild, also mit dem Hash habe ich schonmal geholt.
Gruß
Moin,
wie der Name schon sagt, ein Einwurf:
Letztendlich heißt das Problem doch: Caching und nur einzelne Kleinigkeiten einer Seite die sich ändern.
In dem Fall ändert sich das Hintergrundbils, schreibt man es in das HTML ist es nichts anderes als würde man immer zufällig einen Satz ausgeben. Auch hier wäre die Frage wie man das cached?
Das Hintergrundbild kann/sollte man jetzt natürlich aus dem HTML-Code und in den CSS-Code stecken, was genau sich da für Optionen fürs cachen ergeben weiß ich auch nicht.
Hi,
möchte zufällig wechselnd immer ein Hintergrundbild setzten. Dabei würde ich dies aber gerne so realiesieren, dass nur das Bild geholt werden muss, wurde dieses eine Hintergrundbild bereits einmal geladen soll es eigentlich schon gecahed sein.
Jeena hat da eine Loesung per JavaScript: Zufallsheader
Dieses Hintergrundbild z.B. bg.gif wird in wirklichkeit als PHP interpretiert und innerhalb dieser PHP wird zufällig auf ein Bild "weitergeleitet". Ist dies möglich und ist das eine konforme Lösung für die gängigsten Browser?
Auch das ist moeglich, erfordert aber natuerlich immer noch mal einen HTTP-Request fuer die Weiterleitung, und dann ggf. noch einen, um zu Pruefen ob deren Ziel noch aus dem Cache geholt werden darf.
MfG ChrisB
Hi,
gut für Bilder dann notfalls wohl die JavaScript-Methode.
Wobei das mit Redirect eigtl doch recht hübsch ist auch in Sachen Caching? Können das wohl die Browser.
Aber was macht man mit zufälligem Text bei dem ansonsten die Seite komplett gleich bleibt?
Gruß
Hi,
Aber was macht man mit zufälligem Text bei dem ansonsten die Seite komplett gleich bleibt?
Ebenfalls JavaScript, oder Iframe/Object.
MfG ChrisB
Hi,
Aber was macht man mit zufälligem Text bei dem ansonsten die Seite komplett gleich bleibt?
Ebenfalls JavaScript, oder Iframe/Object.
oder anstatt eines Workarounds wird einfach die Seite entsprechend generiert. Bei geändertem Inhalt ist das nun wirklich nichts Verwerfliches.
Cheatah
Hallo kölir,
Dieses Hintergrundbild z.B. bg.gif wird in wirklichkeit als PHP interpretiert und innerhalb dieser PHP wird zufällig auf ein Bild "weitergeleitet".
Das PHP-Script darf ruhig weiterhin bg.php heißen, auch wenn es ein Bild ausgibt oder zu einem Bild weiterleitet.
Damit der Browser die Bilder cachen kann, muss unter der gleichen URI immer das gleiche Bild bereitgestellt werden.
Das kannst Du erreichen, indem Du die URI dynamisch ins CSS einfügst. Dann kann die CSS-Datei allerdings natürlich nicht mehr gecacht werden.
Was eigentlich auch funktionieren müsste, ist, dass bg.php mit einem temporären Redirect zum jeweiligen Bild antwortet. Da würde ich erwarten, dass der Browser jedes mal neu bg.php aufruft, aber das Bild aus dem Cache holt.
(Caching hängt natürlich an entsprechenden HTTP-Header, das solltest Du allerdings nur für die CSS-Variante berücksichtigen müssen, um zu verhindern, dass die dynamisch erzeugte CSS-Datei gecacht wird).
Wenn Du erreichen willst, dass bei gecachtem Bild überhaupt kein Request an den Server geschickt werden muss, musst Du natürlich auch Clientseitig entscheiden, welches Bild angezeigt werden soll. Dann kommst Du um Javascript nicht herum.
Grüße
Daniel