periodisch aufgerufene Funktion lässt Browserfenster allmählich erlahmen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • periodisch aufgerufene Funktion lässt Browserfenster allmählich erlahmen

    Hi,

    hab einen fertigen Chat als Basis genommen und um ein paar Funktionen, die mit Personendaten arbeiten, erweitert.

    Die Funktion update_einleiten() wird per "onload" gestartet.
    Um die eingeloggten User anzuzeigen, wird über ein bisschen AJAX das Skript eingeloggt_fuer_userliste_bestaetigen.php aufgerufen, eigentlich gedacht wäre in regelmäßigen Intervallen, willkürlich mal 17.2 Sekunden, doch da liegt nun irgendein Problem vor...:

    Mit zunehmender Zeit, zu der sich der Chat im Browserfenster aufhält, kann eine zunehmende insgesamte Verlangsamung bzw. Blockade des jeweiligen Tabs beobachtet werden und außerdem, wenn man z.B. über alert mal "debuggt", dass die Funktion update() viel häufiger aufgerufen wird als alle 17.2 Sekunden ein mal, sondern an sich permanent...? (Da kommt man mit dem Wegklicken nicht mehr nach.)

    Hab ich da vielleicht aus Unkenntnis einen rekursiven Aufruf oder was Ähnliches eingeschleußt oder liegts vielleicht an den try-catch-Blöcken bzw. den returns da drinnen, die die Funktion gleich nochmal aufrufen bis in alle Ewigkeit?

    (Die Variable "beschaeftigt" sollte momentan keinen Zweck erfüllen, ebenso wenig die return-Werte.)

    Code:
       function update_einleiten()
       {
          	setInterval("update()",17200);
          	update();
       }
       
    	 var http_request1 = false;
    	 var http_request2 = false;
    	 var aktuelle_id='';
    	 var aktuelle_id_alt='';
    	 var antwort='';
    	 var werte='';
    	 var start = 1;
    	 var beschaeftigt = false;
    	 var schreibzugriff = false;
    	 var zaehler = 0;
    
       function update()
       {
    				eingeloggt_fuer_userliste_bestaetigen ( );
       }
    
       function eingeloggt_fuer_userliste_bestaetigen()
       {
          http_request2 = false;
          zufallszahl1 = Math.random() * 100000000000;
          
          if (window.XMLHttpRequest)
    		  { // Mozilla, Safari,...
    		         
    		         http_request2 = new XMLHttpRequest();
    		         
    		         if ( http_request2.overrideMimeType )
    		         {
    		            http_request2.overrideMimeType('text/html');
    		         }
          }
          else if (window.ActiveXObject)
          		 { // IE
             			try
             			{
                			http_request2 = new ActiveXObject("Msxml2.XMLHTTP");
    			        }
    			        catch (e)
    			        {
                			try
                			{
                   				http_request2 = new ActiveXObject("Microsoft.XMLHTTP");
                			}
                			catch (e)
                			{
                				beschaeftigt = false;
                				return false;
                			}
             			}
          			}
          
          if ( ! http_request2)
          {
             //alert('Cannot create XMLHTTP instance');
             beschaeftigt = false;
             return false;
          }
          zufallszahl2 = Math.random() * 100000000000;
          
          try
          {
    			      http_request2.onreadystatechange = Werte_ausgeben;
    			      zufallszahl3 = Math.random() * 100000000000;
    			      parameter = '?p=' + zaehler++ + '' + zufallszahl1 + '' + zufallszahl2 + '' + zufallszahl3;
    				    //alert ( parameter );
    			      url = 'eingeloggt_fuer_userliste_bestaetigen.php';
    			      http_request2.open('GET', url + parameter, true);
    			      http_request2.send(null);
    			      
    			}
          catch (e) // ja mei, war halt dann nix, ignorieren und fertig
          {
    	      		beschaeftigt = false;
    	      		return false;
          }
    
    
       }
    
       function Werte_ausgeben()
       {
          
          try
          {
          	//
          	//
          	//
    			      if (http_request2.readyState == 4)
    			      {
    			         if (http_request2.status == 200)
    			         {
    			            werte = http_request2.responseText;
    			         		
    			         		document.getElementById('userliste').innerHTML = werte;
    			         }
    			         /*else
    			         {
    			            alert('Problem bei GET-Anfrage an lesen.php');
    			         }*/
    			      }
    			 }
    			 catch (e)
    			 {
    			 			return false;
    			 }
    Hat jemand eine Idee, warum dieser Code zur allmählichen Blockade des Browserfensters führt?

    Gruß Gockerli

  • #2
    Code:
    function update_einleiten(){
        setInterval("update()",17200);
        update();
    }
    Warum rufst du die Fkt update() noch zusätzlich auf ?

    Gruss

    tobi
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #3
      Guten Morgen,

      Original geschrieben von jahlives
      Code:
      function update_einleiten(){
          setInterval("update()",17200);
          update();
      }
      Warum rufst du die Fkt update() noch zusätzlich auf ?
      Für den ersten sofortigen Aufruf, damit die Userliste gleich von Anfang an mal erstellt wird.
      Ansonsten würde der erste Aufruf nach den festgelegten 17.2 Sekunden stattfinden. (Hab ich auch mal getestet und scheint auch zu stimmen.)

      Kommentar

      Lädt...
      X