Gabriel: Browserfehler bei langer Nachladezeit

Hallo,

ich habe eine kleine PHP-Gallery programmiert. In der Gallery werden bei aktiviertem Javascript auch noch ein paar nette Sachen wie Bildüberblendungen realisiert.

Aber gerade mit den Überblendungen habe ich noch ein Problem. Wenn der Benutzer auf das nächste Bild oder auf "weiter" klickt startet per Javascript das Laden des Bildes und sobald es ganz geladen ist folgt die Überblendung.
Um festzustellen, ob das Bild schon geladen ist, läuft eine Sinnlosschleife, die abbricht, sobald das Bild eine andere Breite als 0 hat.

Auf dem lokalen Server läuft alles einwandfrei, aber über das Internet habe ich meine Probleme damit. Wenn der Client eine geringe Bandbreite hat und das Bild groß ist brechen Internet Explorer und Firefox (im Gegensatz zu Opera) mit folgenden Meldungen ab: "Ausführung des Scripts abbrechen? Ein Skript auf dieser Seite verursacht Verzögerung in Internet Explorer..." bzw. "Ein Skript auf dieser Seite ist eventuell beschäftigt oder es antwortet nicht mehr. Sie können das Skript jetzt stoppen oder fortsetzen, um zu sehen, ob es fertig ist."
Beim der Wahl Fortsetzen ist in beiden Fällen das Bild korrekt geladen und die Überblendung folgt.

Ich verstehe auch nicht ganz, dass die Fehlermeldung so früh kommt. In Opera (ohne diese Meldung) startet die Überblendung selbst bei den am höchsten auflösenden Bildern (1.280 x 960) in unter 1 Sekunde. Zeiten unter 1 Sekunde sollten doch für DSL 2000 User zumutbar sein. Für User mit geringerer Anbindung (oder geringerer Bildschirmauflösung ect...) lässt sich die Gallery auch in deutlich geringeren Auflösungen betrachten.

Kann mir jemand helfen, die Warnungen/Fehlermeldungen wegzubekommen? Darüber würde ich mich sehr freuen.

MFG
Gabriel

  1. Hi,

    Um festzustellen, ob das Bild schon geladen ist, läuft eine Sinnlosschleife, die abbricht, sobald das Bild eine andere Breite als 0 hat.

    Das ist eine ganz schlechte Idee.
    Endlos-Schleifen blockieren nicht nur den JavaScript-Interpreter, sondern ggf. auch das komplette User Interface.

    Ich verstehe auch nicht ganz, dass die Fehlermeldung so früh kommt.

    Für dich früh ist nicht unbedingt für den Browser früh.
    Deine Sinnlos-Schleife hat in ein paar Sekunden vermutlich schon zigtausende Durchläufe hinter sich.

    Kann mir jemand helfen, die Warnungen/Fehlermeldungen wegzubekommen?

    Ändere dein Konzept, weg von der Blödsinnsschleife.
    Beschatige dich mit Events wie onload, oncomplete, ggf. onerror, die Browser auch für Bildressourcen feuern.

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    1. Hi ChrisB,

      Ändere dein Konzept, weg von der Blödsinnsschleife.
      Beschatige dich mit Events wie onload, oncomplete, ggf. onerror, die Browser auch für Bildressourcen feuern.

      Danke für den Hinweis. Habe es inzwischen etwas anders aber in die gleiche Richtung gemacht. Statt der Sinnlosschleife habe ich per setTimeout eine Funktion geschrieben, die sich falls das Bild noch nicht geladen ist alle 10 ms neu aufruft und schaut, ob es inzwischen geladen ist. Jetzt funktioniert es und die CPU wird nicht mehr unnötig beschäftigt.

      MFG
      Gabriel

  2. Hi,

    Um festzustellen, ob das Bild schon geladen ist, läuft eine Sinnlosschleife, die abbricht, sobald das Bild eine andere Breite als 0 hat.

    ich vermute hier Dein Problem. Entweder Dein Intervall ist zu kurz, oder Du nutzt eine for oder while-Schleife antelle eines intervalls oder timeouts. Mehr lässt sich ohne code imho nicht sagen.

    Gruesse, Joachim

    --
    Am Ende wird alles gut.
    1. Hi Joachim,

      Danke! Ich habe es mit einer rekursiven Funktion, die sich via Timeout erneut aufruft gelöst.

      Gruß
      Gabriel

      1. Hi,

        Danke! Ich habe es mit einer rekursiven Funktion, die sich via Timeout erneut aufruft gelöst.

        vergiss nicht nach soundsoviel Versuchen eine Abbruchbedingung einzubauen, falls die Grafik nicht gefunden wird.

        Gruesse, Joachim

        --
        Am Ende wird alles gut.
      2. Danke! Ich habe es mit einer rekursiven Funktion, die sich via Timeout erneut aufruft gelöst.

        Das ist dann aber keine rekusive Funktion. Aber warum nutzt du nicht die Events die dafür vorgesehen sind?

        Struppi.

        1. Hi,

          Aber warum nutzt du nicht die Events die dafür vorgesehen sind?

          Mach ich auch nicht. Leider habe ich das nicht dokumentiert, aber ich erinnere mich, als ich mein Script gebaut habe gab es Probleme mit älteren IE's, bei denen events nicht sauber gefeuert haben wenn man z.B. über den Backbutton auf die Seite kam.

          Gruesse, Joachim

          --
          Am Ende wird alles gut.
          1. » Aber warum nutzt du nicht die Events die dafür vorgesehen sind?
            Mach ich auch nicht. Leider habe ich das nicht dokumentiert, aber ich erinnere mich, als ich mein Script gebaut habe gab es Probleme mit älteren IE's, bei denen events nicht sauber gefeuert haben wenn man z.B. über den Backbutton auf die Seite kam.

            Ja, stimmt wenn die Bilder im Cache liegen, feuert der IE 6 nicht die Events, in dem Fall hilft der Test auf .complete

            Struppi.

  3. Ein gut gemeinter Hinweis: Beachte dabei dass der Besucher deiner Gallerie bei den ersten 2-3 mal solche Effekte noch interessant findet. Aber nicht mehr wenn er 10 Bilder angesehen hat und inzwischen einfach nur noch schnell zum nächsten will.
    Ganz schlimm ist, wenn man dann noch irgendwo auf "Schließen" klicken muss, bevor man das nächste Bild wählen kann.
    Oder wenn man verschiedene Bilder nicht in mehreren Tabs öffnen kann, sondern (wegen Script) nur immer in einem einzigen Fenster.