PreLoad Image ... aber für wen ?
Hans-Peter Rieger
- javascript
0 Jan Huss0 Hans-Peter Rieger
Hallo Cracks,
ich habe eine Navigation im Explorer-Look geschrieben. Funktioniert soweit auch ganz gut. Das ganze ist aufgebaut nach der bekannten Methode, dass bei jedem Klick auf einen Zweig des Navigations-Baums mittels:
filMenuFile = parent.frames["MenuFrame"].window.document;
filMenuFile.open ("text/html");
ein Dokument in einem bestimmten (Navigations-) Frame geöffnet wird und mittels
filMenuFile.write ("<html>\n<head>\n</head>\ ... blabla
die komplette, aktuelle Navigation-Struktur als HTML-File geschrieben wird.
Natürlich verwende ich auch diverse Bildchen (File, Folder-offen, Folder-zu, +, -, etc.) damit sich der Explorer-Stil einstellt. Damit nun bei jedem Klick auf die Navigation die GIFs (a) nicht jedesmal neu geladen werden und (b) zusammen mit dem Text erscheinen, führe ich ein PreLoad der Bilder - umständehalber aber in einem anderen Frame durch. Und das zeigt de facto keine Wirkung. Die Bilder dröppeln immer nach dem Text bzw. immer gleich langsam ein. Sie werden offensichtlich immer wieder neu geladen. Vergleiche mit (semi-) professionellen Lösungen zeigen, das wohl andere das gleiche Problem haben.
Deshalb hier kein JavaScript, sondern die philosophische Frage: _Wer_ kennt pre-geloadete Bilder überhaupt ? Nur der Frame, der den PreLoad durchgeführt wurde ? Alle Frames in einem Frameset ? Wie kann ich auf (preload) Bilder aus einem anderen Frame (immer wieder) zugreifen ohne diese neu zu laden ?
Ciao,
Hans-Peter
Hallo Hans-Peter,
dieses Problem ist mir bekannt. Normalerweise sollte der Browser ein einmal verwendetes Bild direkt aus dem Cache und nicht immer wieder vom Server laden. Leider scheint dies bei JavaScript-Anwedungen aus irgend einem Grund nicht wirklich zu funktionieren. Ich habe schon mit einigen Leuten über das Problem gesprochen und bisher keine Lösung gefunden. Wo das Bild vorgeladen wird dürfte egal sein.
Gruß Jan
Hallo Cracks,
ich habe eine Navigation im Explorer-Look geschrieben. Funktioniert soweit auch ganz gut. Das ganze ist aufgebaut nach der bekannten Methode, dass bei jedem Klick auf einen Zweig des Navigations-Baums mittels:
filMenuFile = parent.frames["MenuFrame"].window.document;
filMenuFile.open ("text/html");
ein Dokument in einem bestimmten (Navigations-) Frame geöffnet wird und mittels
filMenuFile.write ("<html>\n<head>\n</head>\ ... blabla
die komplette, aktuelle Navigation-Struktur als HTML-File geschrieben wird.
Natürlich verwende ich auch diverse Bildchen (File, Folder-offen, Folder-zu, +, -, etc.) damit sich der Explorer-Stil einstellt. Damit nun bei jedem Klick auf die Navigation die GIFs (a) nicht jedesmal neu geladen werden und (b) zusammen mit dem Text erscheinen, führe ich ein PreLoad der Bilder - umständehalber aber in einem anderen Frame durch. Und das zeigt de facto keine Wirkung. Die Bilder dröppeln immer nach dem Text bzw. immer gleich langsam ein. Sie werden offensichtlich immer wieder neu geladen. Vergleiche mit (semi-) professionellen Lösungen zeigen, das wohl andere das gleiche Problem haben.
Deshalb hier kein JavaScript, sondern die philosophische Frage: _Wer_ kennt pre-geloadete Bilder überhaupt ? Nur der Frame, der den PreLoad durchgeführt wurde ? Alle Frames in einem Frameset ? Wie kann ich auf (preload) Bilder aus einem anderen Frame (immer wieder) zugreifen ohne diese neu zu laden ?
Ciao,
Hans-Peter
Hallo Jan,
vielen Dank für die Antwort, sie hat mir insofern geholfen, als ich jetzt erst mal nicht weiter krampfhaft nach einer Lösung suche. Werde die Sache erst mal auf Status "beobachten" setzen.
Ciao
Hans-Peter
Hallo Jan,
vielen Dank für die Antwort, sie hat mir insofern geholfen, als ich jetzt erst mal nicht weiter krampfhaft nach einer Lösung suche. Werde die Sache erst mal auf Status "beobachten" setzen.
Ciao
Hans-Peter
Trotzdem seltsam das Ganze. Ich habe das Ganze auch mal getestet und im ersten Versuch kam es mir tatsächlich so vor als ob die Bilder aufs Neue geladen wurden. Dann habe ich jedoch ein wirklich großes Bild genommen. (.jpg mit 1,5 MB). Nach dem Preloaden wurde das Bild beim zweiten mal in der halben Zeit aufgerufen. Es wird schon was dransein...
Hallo Ihr Bastler!
vielen Dank für die Antwort, sie hat mir insofern geholfen, als ich jetzt erst mal nicht weiter krampfhaft nach einer Lösung suche. Werde die Sache erst mal auf Status "beobachten" setzen.
Das ist schon mal gut für die Gesundheit!
Trotzdem seltsam das Ganze. Ich habe das Ganze auch mal getestet und im ersten Versuch kam es mir tatsächlich so vor als ob die Bilder aufs Neue geladen wurden. Dann habe ich jedoch ein wirklich großes Bild genommen. (.jpg mit 1,5 MB). Nach dem Preloaden wurde das Bild beim zweiten mal in der halben Zeit aufgerufen. Es wird schon was dransein...
Warum denn - ich meine - warum denn mal Hüh und ein andermal Hott? Ausgehend von der Prämisse, dass Computer stur sind, kann das Vorausladen nicht einmal funktionieren und dann wieder nicht. Es sei denn, die Umstände haben sich geändert. Ich nehme aber mal an, du bist im selben Browser geblieben. Hast du dich zwischendurch neu eingewählt? Dann bist du vielleicht an einen besseren Router geraten. Wie dem auch sei, falls du den Versuch wiederholst, solltest du auf die Übertragungsrate achten. Navigator und Opera zeigen die an, IE nicht. Auch ein Proxy könnte das Wunder vollbracht haben ;-)
MfG Fokuhila
Auf www.djholly.de wird ein Preload-Script eingesetzt. Hab´s mir mal angeschaut. Macht auch nichts anderes als die Menügrafiken über neue Image-Objekte in den Cache zu bringen.
Aber scheinbar funktioniert es, sonst wäre es nicht da.
Vermutung (Wissen ist besser als vermuten, ich hoffe jedoch zumindest meine Gedankengänge äußern zu dürfen):
Immerhin ein denkenswerter Ansatz, wenn mir die Profis auch sicher gleich heftig widersprechen werden. Aber dafür ist ein Forum ja da, solange es im manierlichen Rahmen bleibt.
mit besten Grüßen
Willcox
hm.. ich weis net, aber preloaded bild heist doch nur das das das bild im chae liegt , net dein script/html gerüst,das bedeutet zuerst muss der browser dein framset auseinandernehmen, dann fängt er ann in allen frames gleichzeitig das htmlgerüst zu bauen, und übersetzt/bearbeitet scripts, jetzt steht bereits der text, und du willst deine bilder aber schon stehen haben, aber der browser hat ja erstmal nur erkannt das da ein bild hinkommt, jetzt (während er den text schreibt) muss er ja noch mal auf dem server nachgucken ob es sich auch um das selbe bild wie im cache handelt, und wenn dein script aufwendig ist macht er nebenbei noch script arbeit, und muss vieleicht 20 bilder aufeinmal requesten. daher könnten es kommen das die bilder nicht sofort gezeigt werden.
ich habe ein projekt, bei dem in einer function 5 bilder angezeigt werden müssen bevor nach 500milisecunden die function neu stratet und die bilder wieder aufruft, es ist unmöglich während die function läuft ein bild größer als 100kb zu downloaden, daher habe ich die bilder ganzeinfach auf 1mal1 pixel auf der startseite angezeigt, so gehts zumindest bei mir (ie6.0) (und ganz ohne script!)
ich meinte 100byte (siehe mein anderer beitrag)
Hallo.
Auf www.djholly.de wird ein Preload-Script eingesetzt. Hab´s mir mal angeschaut. Macht auch nichts anderes als die Menügrafiken über neue Image-Objekte in den Cache zu bringen.
Aber scheinbar funktioniert es, sonst wäre es nicht da.
Vermutung (Wissen ist besser als vermuten, ich hoffe jedoch zumindest meine Gedankengänge äußern zu dürfen):
Das GEfühl kenne ich :-D
Außerdem beginnt jede wissenschaftliche Theorie (oder zumindest deren Erstellung) mit einer Hypothese. Deine Vorgehensweise ist also gar nicht so unwissenschaftlich.
- Du, Red Zack, hast die Meta-Angabe "expires" auf 0, bzw. die pragma-Angabe gesetzt. Dann sollte auch das schönste Preloaden nicht helfen.
Vielleicht hat der Server unaufgefordert den HTTP-Header "expires: 0" gesetzt. Ggf. kann Red Zack gar nichts dafür. 2. Wenn er im HTML dem Header auf einen großen Wert (3600) setzt, stellt sich die Frage, ob der "echte" Header, der also im Protokoll steht, vor der "http-equiv"-Angabe Vorrang hat, oder andersherum. Vermutlich wird das je nach Browser anders sein. 3. Bleibt noch die Frage: Was machen die verschiedenen Browser, wenn kein 'expires:' angegeben ist? Sicher verhalten sie sich auch hie runterschiedlcih.
- Wenn man den Browser in den Offline-Modus schaltet und eine kurz zuvor aufgerufene Seite erneut besucht ist sie sofort da. Tut man dies online so dauert es viel länger bis sie sich aufgebaut hat. Möglich ist, daß für jedes Element (Html, Bild,...) eine Anfrage an den Server geschickt wird, ob die Serverdaten neuer sind als die Ablage im Cache. Und das dauert bei schlechter Verbindung.
Das wäre eine HEAD-Anfrage. In diesem Fall sind http-equiv-Angaben völlig unbedeutend.
Früher las man gerne, man solle den Cache leeren um immer die neueste Version einer Seite zu sehen. Ich habe das noch nie gebraucht (mit IE 5.01), *vermute* also, daß neuere Browser das Problem wie oben beschrieben umgehen.
Sie können das Problem noch intelligenter umgehen, wenn sie nur für abgelaufene Seiten eine HEAD-Anfrage stellen. Andererseits könnten dann zwei Requests erforderlich sein; 1. HEAD und 2. GET. Das führt zu Zeitverlust.
Immerhin ein denkenswerter Ansatz, wenn mir die Profis auch sicher gleich heftig widersprechen werden. Aber dafür ist ein Forum ja da, solange es im manierlichen Rahmen bleibt.
Amen.
Fokuhila
Sie können das Problem noch intelligenter umgehen, wenn sie nur für abgelaufene Seiten eine HEAD-Anfrage stellen. Andererseits könnten dann zwei Requests erforderlich sein; 1. HEAD und 2. GET. Das führt zu Zeitverlust.
HEAD ist primär dafür vorgesehen, den zur Ressource passenden HTTP-Header (noch einmal) zu erhalten, ohne die Ressourcen-Daten.
GET hingegen kann vom Browser so bestückt werden, daß der Server eventuell auch mit "304 not modified" antwortet, wenn sich die Ressource seit dem vom Browser übermittelten Datum nicht geändert hat. Andernfalls kommt "200 OK" und die Ressource im Anschluß daran.
Also kein Zeitverlust. :)
- Sven Rautenberg
Hallo Ihr Bastler!
Hallo Fokuhila,
vielen Dank für das Kompliment.
Trotzdem seltsam das Ganze. Ich habe das Ganze auch mal getestet und im ersten Versuch kam es mir tatsächlich so vor als ob die Bilder aufs Neue geladen wurden. Dann habe ich jedoch ein wirklich großes Bild genommen. (.jpg mit 1,5 MB). Nach dem Preloaden wurde das Bild beim zweiten mal in der halben Zeit aufgerufen. Es wird schon was dransein...
Warum denn - ich meine - warum denn mal Hüh und ein andermal Hott? Ausgehend von der Prämisse, dass Computer stur sind, kann das Vorausladen nicht einmal funktionieren und dann wieder nicht. Es sei denn, die Umstände haben sich geändert. Ich nehme aber mal an, du bist im selben Browser geblieben. Hast du dich zwischendurch neu eingewählt? Dann bist du vielleicht an einen besseren Router geraten. Wie dem auch sei, falls du den Versuch wiederholst, solltest du auf die Übertragungsrate achten. Navigator und Opera zeigen die an, IE nicht. Auch ein Proxy könnte das Wunder vollbracht haben ;-)
Nachdem Du Dich da ja so perfekt auskennst, kannst Du Dir die Seite gerne mal ansehen: http://www.aeroclub-bamberg.de
Ich sollte noch erwähnen, dass die Navigation mit NN6.1 perfekt funktioniert, mit IE6.0 obigen Phänomen zeigt und Opera 6 völlig abnippelt (das ist aber ein anderes Problem). Damit sind die Proxys und Router erst mal aus dem Schneider. Nachdem ich die kleinen Bildchen (3-400 Byte) mit Über-DSL-Geschwindigkeit lade, sollte es daran auch nicht liegen. außerdem dauert es lokal (fast) genauso lange.
Ciao
Hans-Peter