HighDots Forums  

Bilder wirklich nur einmal laden

Javascript (German) Programmiersprache JavaScript. (de.comp.lang.javascript)


Discuss Bilder wirklich nur einmal laden in the Javascript (German) forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Robert Fischbacher
 
Posts: n/a

Default Bilder wirklich nur einmal laden - 07-03-2004 , 11:57 AM






Liebe Gemeinde,

ich weiß, das Thema ist echt schon erschöpfend hier behandelt
worden, aber so richtig schlau werd ich trotzdem nicht:

Ich befülle ein Array, um Bilder vorzuladen:

var bild1 = new Image();
bild1.src="bild1.gif";

Soweit sogut. Ich kann nun natürlich die Bilder auf der Seite
dynamisch austauschen.

document.images.myPix.src=bild1.src;

Man möchte doch meinen, dass er die Bilder nun vom Cache
des Browsers, also vom Objekt bild1 nimmt. Tut er aber nicht.
Wenn ich ihm nämlich die Datei bild1.gif unter dem
A.... umbenenne, dann findet er das Bild nicht mehr. Also
doch nicht Cache? Probierts mal aus: Nachdem das Bild in
bild1.src oder bild2.src geladen worden ist, es mal einfach
per Explorer umbenennen. Dann dem <img> das Bild aus dem
vermeintlichen Cache zuweisen. Bei mir kommt dann das schmucke
rote X, also kein Bild mehr da.

Was iss nu? Ist das Bild nun gecached oder nicht?
Wobei mir grad beim Schreiben was einfällt: Kann es sein, dass
er beim FileSystem anders reagiert wie im HTTP-Protokoll?

Viele Grüße

Robby

Reply With Quote
  #2  
Old   
Dietmar Meier
 
Posts: n/a

Default Re: Bilder wirklich nur einmal laden - 07-03-2004 , 12:19 PM






Robert Fischbacher <Fischbacher (AT) t-online (DOT) de> typed:

Quote:
Probierts mal aus: Nachdem das Bild in
bild1.src oder bild2.src geladen worden ist, es mal einfach
per Explorer umbenennen. Dann dem <img> das Bild aus dem
vermeintlichen Cache zuweisen. Bei mir kommt dann das schmucke
rote X, also kein Bild mehr da.

Was iss nu? Ist das Bild nun gecached oder nicht?
Ja.

Quote:
Wobei mir grad beim Schreiben was einfällt: Kann es sein, dass
er beim FileSystem anders reagiert wie im HTTP-Protokoll?
Nein.

Mit der Anweisung

Quote:
bild1.src="bild1.gif";
veranlasst Du den Brauser lediglich, die zu dem Image-Objekt
"bild1" gehörigen Daten von dem URI (ob file: oder http: ist
in dieser Hinsicht unerheblich) zu besorgen. Ob er sie dann
in den Cache speichert oder nicht ist einstellungsabhängig.

Nehmen wir an, er habe die Daten im Cache zwischengespeichert.
Dann befindet sich dort in geeigneter Form ein Eintrag, der
den URI und die Bilddaten enthält.

Weist Du nun mit der Anweisung

Quote:
document.images.myPix.src=bild1.src;
dem Element "document.images.myPix" neue Bilddaten zu, ist
das aus Sicht von JavaScript nichts weiter als das Zuweisen
einer Zeichenkette zu der Objekteigenschaft "src". Diese
Anweisung hat nichts magisches und die Anweisung

* document.images.myPix.src="bild1.gif";

würde exakt dasselbe bewirken! Insbesondere weiß JavaScript
gar nichts von der Existenz des Caches. Auch mit dieser
Anweisung veranlasst Du, wie oben, den Brauser lediglich,
Bilddaten zu besorgen. Wenn er sie im Cache findet und
(zumeist, einstellungsabhängig) nach einer Prüfung mittels
conditional GET, ob noch aktuell, benutzt er diese und das
Image-Objekt schmeißt ein load-Event.

Hast Du mittlerweile aber die Datei umbenannt, schlägt die
Prüfung, ob die Bilddaten noch aktuell sind fehl. Die Daten
werden dann vom Brauser aus dem Cache entfernt (oder als
nicht gültig markiert) und das Image-Objekt erhält keine
Daten und schmeißt ein error-Event.

Davon bekommt JavaScript dann erst wieder etwas mit, wenn
das error-Event geworfen wird. Mit all dem anderen zwischen
der Zuweisung der Zeichenkette(!) und dem Event hat es nix
am Hut, das ist des Brausers Geschäft.

Hoffe, das ist soweit nachvollziehbar? Dann nochmal die
Antwort auf obige Frage:

Quote:
Was iss nu? Ist das Bild nun gecached oder nicht?
Ja, es ist gecached, aber Du forderst ein ganz anderes an:
Die Identität eines Bildes ist für den Brauser nicht durch
dessen Daten, sondern nur durch dessen URI plus Zeitpunkt
der Erstellung festzustellen. Anderer URI (hier: Name),
anderes Bild.

ciao, dhgm



Reply With Quote
  #3  
Old   
Martin Honnen
 
Posts: n/a

Default Re: Bilder wirklich nur einmal laden - 07-03-2004 , 12:19 PM





Robert Fischbacher wrote:


Quote:
Ich befülle ein Array, um Bilder vorzuladen:

var bild1 = new Image();
bild1.src="bild1.gif";
Wo ist da ein Array?

Quote:
Soweit sogut. Ich kann nun natürlich die Bilder auf der Seite
dynamisch austauschen.

document.images.myPix.src=bild1.src;

Man möchte doch meinen, dass er die Bilder nun vom Cache
des Browsers, also vom Objekt bild1 nimmt. Tut er aber nicht.
Es haengt von den Browsereinstellungen ab, da kann der Browserbenutzer
vieles einstellen, was dein Script nicht beeinflussen kann. Und man kann
auch noch Webserver konfigurieren, wie sie Resourcen mit den
entsprechenden HTTP-Kopfzeilen senden, die das Caching beeinflussen.


--

Martin Honnen
http://JavaScript.FAQTs.com/



Reply With Quote
  #4  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Bilder wirklich nur einmal laden - 07-03-2004 , 12:24 PM



Robert Fischbacher wrote:
Quote:
Liebe Gemeinde,
Du suchst das dsWC, nicht diese Gruppe.

Quote:
ich weiß, das Thema ist echt schon erschöpfend hier behandelt
worden,
Ja.

Quote:
aber so richtig schlau werd ich trotzdem nicht:
Du solltest mehr und genauer hinlesen.

Quote:
Ich befülle ein Array, um Bilder vorzuladen:

var bild1 = new Image();
bild1.src="bild1.gif";

Soweit sogut.
Nein, so schlecht.
<http://www.stud.tu-ilmenau.de/~thla-in/scripts/test/hoverMe/>

(PointedEars.de geht mal wieder nicht <grmbl/>)

Quote:
Ich kann nun natürlich die Bilder auf der Seite
dynamisch austauschen.

document.images.myPix.src=bild1.src;

Man möchte doch meinen, dass er die Bilder nun vom Cache
des Browsers, also vom Objekt bild1 nimmt. Tut er aber nicht.
Wenn ich ihm nämlich die Datei bild1.gif unter dem
A.... umbenenne, dann findet er das Bild nicht mehr.
Natürlich nicht. Die Ressource ist unter dem URI nicht mehr erreichbar,
also kann auch kein Abgleich mit dem Cache stattfinden. Abgesehen davon
ist diese Vorladegeschichte zwar möglich, aber keinesfalls zuverlässig.
Google ist Dein Freund [psf 6.1].

Quote:
Also doch nicht Cache? Probierts mal aus: Nachdem das Bild in
bild1.src oder bild2.src geladen worden ist, es mal einfach
per Explorer umbenennen.
Habe hier zum Glück keinen Explod^Wrer.

Quote:
[...]
Was iss nu? Ist das Bild nun gecached oder nicht?
Ja.

Quote:
Wobei mir grad beim Schreiben was einfällt: Kann es sein, dass
er beim FileSystem anders reagiert wie im HTTP-Protokoll?
Ja. Es besteht einklich kein Grund, lokale Ressourcen noch einmal im
Festplattencache zu halten.


PointedEars


Reply With Quote
  #5  
Old   
Ulrike Jahnke-Soltau
 
Posts: n/a

Default Re: Bilder wirklich nur einmal laden - 07-04-2004 , 08:58 AM



Robert Fischbacher wrote:
Quote:
Liebe Gemeinde,
Amen!

Quote:
Kann es sein, dass
er beim FileSystem anders reagiert wie im HTTP-Protokoll?
Bestimmt, leidvolle Erfahrung: Beim Filesystem pfeift der IE auf den
Cache, was ja auch sinnvoll ist.

Aber auch so wirst du mit Umbenennungsaktionen im Cache kein Glück
haben, da die Dateien anders abgelegt sind (Einheitsbrei ohne
Subdirectory) und wohl nur die index.dat ein Verzeichnis höher weiss,
was wozu gehört.

so long,
uja


Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.