GoreX: Code optimieren (und: großer Unterschied IE / Netscape)

Schönen guten Tag!

Also, wir wissen ja, dass es zwischen dem IE und Netscape große Unterschiede gibt. Nehme man dieses Script zur Hand:

<html>
<body>
<select name="dropdown"></select>
<script type="text/javascript">
var pos = null;
var sel = document.getElementsByTagName("select")["dropdown"];

for(var i=0; i<1000; i++) {

if (document.all) pos = sel.length;
 var newoption = document.createElement("option");
 newoption.text = i+1;
 sel.add(newoption,pos);
}
alert("Fertig");
</script>
<body>
</html>

Dieses Script macht nix anderes, als neue Elemente dynamisch in das Dropdown Menu einzufügen.
Ich habe die Anzahl der einzufügenden Elemente von 1000 bis 8000 (Anzahl der Durchläufe der Schleife) variiert, und dabei alles mit Netscape und IE ausprobiert.
Resultat des ganzen habe ich in einer Tabelle zusammengefasst:

Internet Explorer:      Netscape:

Durchläufe:  Zeit (sec) Zeit (sec)
1000:        1,1        0,6
2000:        4,1        1,0
3000:        9,9        1,3
4000:        15,8       1,7
5000:        24,6       2,2
6000:        35,5       2,6
7000:        47,8       3,0
8000:        63,6       3,4
usw.

Man sieht, dass der Internet Explorer bei 8000 Elementen ca. 63,6 Sekunden braucht, Netscape hingegen nur 3,4 Sekunden (Alles selbst gemessen, kann evt. abweichen.)!!!

1. Warum ist der Unterschied so gewaltig?
2. Kann man den Code noch weiter optimieren?

Also ich verstehe nicht, warum der IE so lange braucht...

P.S.: der Firefox Browser ist sogar einen tick schneller als Netscape!

Grüße, GoreX

  1. Hi,

    1. Warum ist der Unterschied so gewaltig?

    Weil die Mozillas & Netscapes *nichts* tun.

    1. Kann man den Code noch weiter optimieren?

    Ja - auf document.all verzichten.

    Also ich verstehe nicht, warum der IE so lange braucht...

    Weil er überhaupt etwas macht.

    P.S.: der Firefox Browser ist sogar einen tick schneller als Netscape!

    ... im Nichtstun. =;-)

    Gruß, Cybaer

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
    1. Hi!

      Nunja, das habe ich auch schon versucht, aber bei 8000 Durchläufen war der IE um ganze 2 Sekunden schneller.
      Wäre der Netscape bei 8000 Durchläufen um 2 Sekunden schneller würde er tatsächlich fast nix mehr machen.
      Aber was macht denn der IE denn da die ganze Zeit? Den User etwa ärgern? LOL

      ciao GoreX

      1. Hi,

        Nunja, das habe ich auch schon versucht,

        Also ich weiß nicht, *was* Du schon versucht hast. Aber ich weiß, daß ein Blick in Mozillas "JavaScript-Konsole" vielleicht was bringt. ;-o

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
        1. Hi,

          Nunja, das habe ich auch schon versucht,

          Also ich weiß nicht, *was* Du schon versucht hast. Aber ich weiß, daß ein Blick in Mozillas "JavaScript-Konsole" vielleicht was bringt. ;-o

          Gruß, Cybaer

          Hi!

          Nö, da stand nix drin. Auch keine Fehler o.ä. .

          Also ich weiss jetzt, wie ich den Code optimieren kann. Anstatt das ganze dynamisch einzufügen, kann ich ja das ganze mit der document.write() Methode lösen.

          Vorteil: Nun wird das ganze in ca. 2-5 Sekunden eingebunden.
          Nachteil: Bei 8000 und mehr Durchläufen bekomme ich die Nachricht, dass das Skript verzögert. Nunja, ein Kompromiß, mit dem man leben kann. Das ganze dauert dann also max. 5 Sekunden, also im Gegensatz zu 36 Sekunden liegen da Welten!!

          Ich bedanke mich...

          GoreX

    2. Moin!

      Hi,

      1. Warum ist der Unterschied so gewaltig?

      Weil die Mozillas & Netscapes *nichts* tun.

      Wieso denn das nicht? Der erste Befehl in der Schleife wird nicht ausgeführt, weil die if-Abfrage dorthin nicht verzweigt, aber der Rest wird ausgeführt. Mit welchem Ergebnis, sei dahingestellt.

      1. Kann man den Code noch weiter optimieren?

      Ja - auf document.all verzichten.

      Das ist immer eine gute Idee. :)

      - Sven Rautenberg

      1. Hi,

        Wieso denn das nicht? Der erste Befehl in der Schleife wird nicht ausgeführt, weil die if-Abfrage dorthin nicht verzweigt, aber der Rest wird ausgeführt.

        OK, er tut *fast* nichts (oder immer wieder das gleiche, weil sich pos nicht ändert).

        Aber zugegeben: Die fehlende Klammerung habe ich übersehen ... =:-)

        Gruß, Cybaer

        PS: Kann man eigentlich etwas übersehen, was fehlt? ;-)

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
  2. Hi,

    var newoption = document.createElement("option");
    Dieses Script macht nix anderes, als neue Elemente dynamisch in das Dropdown Menu einzufügen.
    Ich habe die Anzahl der einzufügenden Elemente von 1000 bis 8000 (Anzahl der Durchläufe der Schleife) variiert, und dabei alles mit Netscape und IE ausprobiert.

    Mal ganz abgesehen davon, wie lange der Aufbau der Liste dauert:

    hältst Du es für dem User zumutbar, ihm eine Auswahl mit 1000 oder mehr Elementen vorzusetzen?

    Ich finde das nicht mehr zumutbar ...

    cu,
    Andreas

    --
    MudGuard? Siehe http://www.Mud-Guard.de/
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.