Ergebnis 1 bis 10 von 10
  1. #1
    Tiefflieger ist offline Tripel-As
    registriert
    28-11-2004
    Beiträge
    166

    Laufzeit mit Date() ermitteln

    In vielen Programmiersprachen macht es ja einen großen Unterschied, welche Dimension man bei 2 Dimensionalen Arrays als 'erstes' durchläuft, wenn man alle Elemente des Arrays abkllappern möchte.
    Um genau das bei Javascript zu testen (ich habe die Vermutung, dass der IE anders vorgeht als ein Browser (Firefox), kann dazu jemand etwas sagen?) habe ich mal schnell folgendes Skript geschrieben, welches eine ellenlange Tabelle und ganz unten links die Zeit, die das Programm zum Ablaufen benötigt hat, in Millisekunden ausgeben soll.
    Leider kommen da aber fast immer negative Zahlen heraus, obwohl der Computer schon merkbar rechnen muß. Weiß jemand, wo mein Fehler liegt?

    Die Datei: http://www.uni-mainz.de/~jensbuth/jswelt/dokumente.htm (funktioniert jetzt)

    Das Skript selber:
    Code:
    <html>
    <body>
    <script type="text/javascript">
    
    var arraygroesse = 70;
    var feld;
    
    /*
    	Initialisiert das zweidimensionale Array und schreibt in jedes Element eine 1
    */
    function initArray() {
    	feld = new Array(arraygroesse);
    	for (var i = 0; i < arraygroesse; i++) {
    		feld[i] = new Array(arraygroesse);
    		for (var j = 0; j < arraygroesse; j++) {
    			feld[i][j] = 1;
    		}
    	}
    }
    
    /*
    	Damit Javascript etwas zu tun hat: Jedes Element wird durchlaufen
    */
    function writeTable(){
    	var zaehler = 0;
    	document.write("<table>");
    	for (var i = 0; i < arraygroesse; i++) {
    		document.write("<tr>");
    		for (var j = 0; j < arraygroesse; j++) {
    			zaehler += feld[i][j];
    			document.write("<td>" + zaehler + "</td>");
    		}
    		document.write("</tr>");
    	}
    	document.write("</table>");
    }
    
    //Jetzt gehts los: Stopuhr starten, ...
    anfang = new Date();
    
    //...Programm laufen lassen,...
    initArray();
    writeTable();
    
    //...und dann die Zeit ausgeben
    ende = new Date();
    zeit = ende.getMilliseconds() - anfang.getMilliseconds();
    document.write(zeit + 'ms');
    </script>
    </body>
    </html>
    Geändert von Tiefflieger (21-12-2004 um 01:30 Uhr)

  2. #2
    Avatar von womstar
    womstar ist offline Lounge-Member
    registriert
    22-07-2002
    Ort
    latente matrix
    Beiträge
    5.913

    AW: Laufzeit mit Date() ermitteln

    getMillisconds()
    diese methode wird dir nur die momentanen millisekunden ausgeben.

    ich würde das ganze so gestalten:

    Code:
    //Jetzt gehts los: Stopuhr starten, ...
    anfang = new Date().getTime();
    
    
    //...Programm laufen lassen,...
    initArray();
    writeTable();
    
    //...und dann die Zeit ausgeben
    ende = new Date().getTime();
    zeit = ende - anfang;
    document.write(zeit + 'ms');
    wobei ich sogar überlegen würde, die anfangszeit am script-anfang zu nehmen.

  3. #3
    Tiefflieger ist offline Tripel-As
    registriert
    28-11-2004
    Beiträge
    166

    AW: Laufzeit mit Date() ermitteln

    Vielen Dank :-)
    Ich dachte, 'new Date()' liefert mir ein 'festes' Objekt, nur eben mit verschiedenen Möglichkeiten, den Erschaffungszeitpunkt abzufragen...

    Seltsamerweise ist hier aber bei mir der Firefox fast doppelt so langsam wie der IE...

  4. #4
    Tiefflieger ist offline Tripel-As
    registriert
    28-11-2004
    Beiträge
    166

    AW: Laufzeit mit Date() ermitteln

    Ich habe das jetzt mal ein wenig erweitert, ich wollte einem Performanz-Problem in einem anderen Skript auf den Grund gehen.
    Tatsächlich braucht das Skript bei mir im IE jetzt ganze 13 Sekunden (!), auf dem Firefox ist das Ergebnis nach ner halben Sekunde da. Ich vermute, dass die markierte Zeile dem IE enorme Probleme bereitet:
    Code:
    <html><head></head>
    <body>
    <div id="bla"></div>
    <script type="text/javascript">
    
    var groesse = 120;
    
    /*
    	Eine Tabelle mit groesse*groesse Zellen erstellen
    */
    function writeTable(){
    	var count = 0;
    	var blabb = eval(document.getElementById('bla'));
    	inhalt = "<table>";
    	for (var i = 0; i < groesse; i++) {
    		inhalt += "<tr>";
    		for (var j = 0; j < groesse; j++) {
    			///////////////////////////////////////////////////////////
    			inhalt += "<td>" + ++count + "</td>"; // <--- hier braucht der IE ewig
    			///////////////////////////////////////////////////////////
    		}
    		inhalt += "</tr>";
    	}
    	inhalt += "</table>";
    	blabb.innerHTML = inhalt;
    }
    
    
    anfang = new Date().getTime();
    
    writeTable();
    
    ende = new Date().getTime();
    
    zeit = ende - anfang;
    
    //Tabelle wieder löschen:
    var blabb = eval(document.getElementById('bla'));
    blabb.innerHTML = '';
    
    //Zeit ausgeben:
    document.write(zeit + 'ms');
    </script>
    </body></html>
    http://www.uni-mainz.de/~jensbuth/jswelt/dokumente2.htm

    hat jemand eine Idee, wie ich den Code für den IE optimieren kann?
    Geändert von Tiefflieger (21-12-2004 um 21:32 Uhr) Grund: Problem eingegrenzt

  5. #5
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: Laufzeit mit Date() ermitteln

    Erstmal würde ich das eval rausschmeissen, eval ist hier nicht nötig:
    var blabb = window.document.getElementById('bla');

    Dann lass dir mal die Größe des strings ausgeben, das sind 200KB offensichlich hat da der IE mehr Probleme als Firefox. Ich vermute das da die Garbage Collection öfters mal zugreift.

    Ich würde sowieso in deinem Fall die DOM Methoden bevorzugen, diese sind bis zu 1000 mal schneller beim darstellen.

  6. #6
    Tiefflieger ist offline Tripel-As
    registriert
    28-11-2004
    Beiträge
    166

    AW: Laufzeit mit Date() ermitteln

    Ich dachte immer, Javascript ist DOM (z.B. mit den Objekten window und window.document etc)? Ich konnte jetzt auch auf selfhtml nicht wirklich schlau werden...
    Meinst Du etwas in der Art von http://www.lsg.musin.de/informatik/J...omtabellen.htm ? Kennst Du Seiten, die sich damit auch näher auseinandersetzen? Ich meine damit keine 50 seitigen Spezifikationen der Programmiersprache, sondern wie man sie konkret anwendet.
    Wie auch immer, vielen Dank für den äußerst nützlichen Hinweis :-)

  7. #7
    Tiefflieger ist offline Tripel-As
    registriert
    28-11-2004
    Beiträge
    166

    AW: Laufzeit mit Date() ermitteln

    Ich habe das ganze jetzt mal mit dem umgesetzt, von dem ich glaube, dass es DOM ist ;-)
    Leider hat sich kein Geschwindigkeitsvorteil daraus ergeben, jetzt brauchen Firefox und IE nur nahezu die gleiche Zeit (FF 5 Sekunden und IE 6 Sekunden auf einem etwas älteren Rechner (1 GHz) )
    Gegenüber der halben Sekunde auf dem Firefox bei der alten Skriptversion ist das leider immer noch ein Witz...
    Wer es testen möchte, nach dem Aufruf ganz nach unten scrollen, der Tabelleninhalt wird jetzt leider angezeigt: http://www.uni-mainz.de/~jensbuth/jswelt/dokumente3.htm

    der Code dazu:
    Code:
    <html>
    <head></head>
    <body>
    <table id="tabelle"></table>
    <script type="text/javascript">
    
    var groesse = 120;
    
    /*
    	Eine Tabelle mit groesse*groesse Zellen erstellen
    */
    function writeTable(){
    	var count = 0;
    	for (var i = 0; i < groesse; i++) {
    		//Fügt eine Zeile in die Tabelle ein
    		var reihe = window.document.getElementById("tabelle").insertRow(i);
    
    		for (var j = 0; j < groesse; j++) {
    			//Erstellt eine Zelle
    			var zelle = document.createElement("td");
    
    			//Erstellt einen Text-Knoten für den Zelleninhalt
    			var zellentext = document.createTextNode(++count);
    			//Schreibt den Knoten in die Zelle
    			zelle.appendChild(zellentext);
    			reihe.appendChild(zelle);
    		}
    	}
    }
    
    
    anfang = new Date().getTime();
    
    writeTable();
    
    ende = new Date().getTime();
    
    zeit = ende - anfang;
    
    //Zeit ausgeben:
    document.write('<br><b>Zeit: ' + zeit + 'ms </b>');
    </script>
    </body></html>
    Geändert von Tiefflieger (22-12-2004 um 04:56 Uhr)

  8. #8
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: Laufzeit mit Date() ermitteln

    Sie so aus, als ob bei der größe der daten die DOM Methoden dann doch ins Hintertreffen geraten. Bei "normalen" HTML Code war es bisher immer so, dass die DOM Methoden wesentlich schneler waren als innerHTML.

    Wie gesagt du hast fast 200KB Quelltext, der dynamisch eingefügt wird, das da der Browser in Schwierigkeiten kommen kann halte ich für normal.

    Ich hab es nicht genau getestet, aber ich glaube das schnellste für den IE ist folgende Möglichkeit:
    PHP-Code:
    <table id="test">
    <
    tbody>

    </
    tbody>
    </
    table>

    <
    script type="text/javascript">

    var 
    groesse 120;

    /*
        Eine Tabelle mit groesse*groesse Zellen erstellen
    */
    function writeTable(){
        var 
    count 0;
        var 
    document.getElementById("test");
        
        for (var 
    0groessei++) {
            
    //Fügt eine Zeile in die Tabelle ein
            
    var reihe =  t.insertRow(i);

            for (var 
    0groessej++) {
                
    //Erstellt eine Zelle
                
    var zelle document.createElement("td");

                
    //Erstellt einen Text-Knoten für den Zelleninhalt
                
    var zellentext document.createTextNode(++count);
                
    //Schreibt den Knoten in die Zelle
                
    zelle.appendChild(zellentext);
                
    reihe.appendChild(zelle);
            }
        }
    }
    </script> 

  9. #9
    Tiefflieger ist offline Tripel-As
    registriert
    28-11-2004
    Beiträge
    166

    AW: Laufzeit mit Date() ermitteln

    stimmt, das spart einem nochmal ca. eine halbe Sekunde...

    btw, kann man Javascript nicht irgendwie etwas in der Art wie "Reserviere Platz für einen 200 kb langen string. Und jetzt sollst du diesen String sukzessive füllen." sagen? Das ist doch das, was du mit dem Garbage-Collector Problem beim IE meintest, nämlich dass der zu oft neuen (größeren) Speicherplatz anfordern muß, oder?
    Geändert von Tiefflieger (24-12-2004 um 02:46 Uhr)

  10. #10
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: Laufzeit mit Date() ermitteln

    Nein, das geht nicht, zumindest nicht mit Bordmitteln. Du könntest versuchen das selber zu programmieren aber ob es was bringt kann ich nicht sagen.

Ähnliche Themen

  1. sichtbare Fensterfläche ermitteln
    Von DODO im Forum JavaScript
    Antworten: 6
    Letzter Beitrag: 11-06-2007, 09:28
  2. bildschirmauflösung ermitteln
    Von crash2 im Forum JavaScript
    Antworten: 4
    Letzter Beitrag: 23-06-2004, 17:09
  3. Megahertz des Clientcomputers ermitteln
    Von hene im Forum JavaScript
    Antworten: 11
    Letzter Beitrag: 08-01-2003, 02:13
  4. Bildgröße ermitteln
    Von Henne im Forum JavaScript
    Antworten: 1
    Letzter Beitrag: 09-11-2002, 20:25
  5. date()
    Von Klark im Forum Serverseitige Programmierung
    Antworten: 2
    Letzter Beitrag: 07-10-2001, 11:10

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •