Abraxas: Seite ist zu langsam

Hallo Leute,

ich arbeite gerade an einer Seite für einen Freund. Seine Wünsche an die HP sind sehr groß, viel fürs Auge und fürs Ohr soll dabei sein.

Nun, ich hab schon ein bissel was erstellt, zum Testen.
Dabei habe ich festgestellt, dass diese Seite sehr langsam ist, diese XMLHTTP-Requests brauchen manchmal ewig.

Es gibt auch eine Galerie. Wenn man die im IE benutzt, "verliert" man irgendwie die Bilder der Seite und die Rollovers, diese müssen dann neu geladen werden (nur beim IE).

Hier die Seite:
----------------------------------------
www.dreams-2-illusion.com/privat/upload/
----------------------------------------
Ich bin für jeden Tipp dankbar.

Viele Grüße aus Stuttgart

Abraxas

  1. Sorry, noch was zu posten:

    Meine Frage kann ich auch präziser formulieren:

    * Ist es möglich, dem Browser (in diesem Fall der IE) zu "sagen", dass er die Grafiken aus der Cache auslesen soll, und nicht online zu holen?

    * Bein Auslesen des Gästebuchs liest der IE aus der Cache: der neue Eintrag ist so nicht zu sehen: hier möchte ich festlegen, dass NICHT aus der Cache gelesen wird.

    Geht so etwas denn ?

    Viele Grüße

    Abraxas

    1. Hier ist der Code, der die neuen Unterseiten (sehr langsam) lädt:

        
          function changecontent(url) {  
        
              var http_request = false;  
        
        
        
                  if (window.XMLHttpRequest) { // Mozilla, Safari, ...  
                  http_request = new XMLHttpRequest();  
                  if (http_request.overrideMimeType) {  
                      http_request.overrideMimeType('text/text; charset=iso-8859-1');  
        
                      // See note below about this line  
                  }  
              } else if (window.ActiveXObject) { // IE  
        
                  try {  
                      http_request = new ActiveXObject("Msxml2.XMLHTTP");  
                  } catch (e) {  
                      try {  
                          http_request = new ActiveXObject("Microsoft.XMLHTTP");  
                      } catch (e) {}  
                  }  
              }  
        
              if (!http_request) {  
                  alert('Giving up :( Cannot create an XMLHTTP instance');  
                  return false;  
              }  
        
        
              http_request.onreadystatechange = function() { setContents(http_request); };  
              http_request.open('GET', url, true);  
              http_request.send(null);  
        
          }  
        
          function setContents(http_request) {  
        
              if (http_request.readyState == 4) {  
                  if (http_request.status == 200) {  
        
                     document.getElementById('inhalt').innerHTML =http_request.responseText;  
        
                        if (seite=="gallery") {  
                        document.getElementById('inhalt').style.top="10"  
                        document.getElementById('bilder').style.left="-200";  
                         }  
                        else { document.getElementById('inhalt').style.width="480px";}  
        
        
                  } else {  
                      alert('There was a problem with the request.');  
                  }  
              }  
        
      // Weiche wegen unterschiedlicher Darstellung der Gallerie, die horizontal gescrollt wird  
        
       if(navigator.appVersion.indexOf("MSIE 5")>-1) {  
           if (seite=="gallery") { document.getElementByID('bilder').style.left="-50px"; document.getElementByID('bilder').style.width="1800px"; }  
           }  
           if(navigator.appVersion.indexOf("MSIE 6")>-1) {  
           if (seite=="gallery") { document.getElementByID('bilder').style.left="-50px"; document.getElementByID('bilder').style.width="1800px"; }  
           }  
           // Neue Unterseite vom Seitenanfang (Top) darstellen  
           setpos(0,"inhalt");  
          }  
      
      
    2. Hallo Abraxas,

      * Ist es möglich, dem Browser (in diesem Fall der IE) zu "sagen", dass er die Grafiken aus der Cache auslesen soll, und nicht online zu holen?

      Das Cache-Verhalten lässt sich in gewissem Ausmaß über HTTP-Header steuern[1]. Guck dir mal http://www.mnot.net/cache_docs/#EXPIRES an.

      * Bein Auslesen des Gästebuchs liest der IE aus der Cache: der neue Eintrag ist so nicht zu sehen: hier möchte ich festlegen, dass NICHT aus der Cache gelesen wird.

      Um jegliches Caching zu verhindern, reicht die Header-Angabe Cache-Control: no-store. Wie du das aber besser lösen kannst, steht hier: http://www.mnot.net/cache_docs/#CACHE-CONTROL.

      Die an den Browser gesendeten Header kannst du z.B. mit der Funktion header() von PHP oder mit der Apache-Konfiguration manipulieren.

      Schöne Grüße,

      Johannes

      [1] Disclaimer für eventuelle Einwürfe: Natürlich kann man dem Cache nur Vorschläge machen, ihn aber nicht zu etwas zwingen. Die meisten Caches halten sich aber sinnvollerweise an diese Vorschläge.

      1. Hallo Johannes,

        dankeschön für deine schnelle und hilfreiche Antwort. Ich hab die Artikel durchgelesen, manches davon kapiert und nun gehts: Juhuu.
        Hab folgenden Code DIREKT ZWISCHEN dem request.open und dem request.send(null) gesetzt, sieht jetz also so aus:

          
                http_request.open('GET', url, true);  
                http_request.setRequestHeader("Pragma", "no-cache");  
                http_request.setRequestHeader("Cache-Control", "must-revalidate");  
                http_request.setRequestHeader("If-Modified-Since", document.lastModified);  
                http_request.send(null);  
        
        

        Jetzt wird im IE beim http-request nicht mehr aus der Cache gelesen.

        Vielen Dank für deine Hilfe.

        Abraxas