XMLHTTPRequest verursacht 100% Prozessorlast

27/11/2014 - 21:35 von Michael S | Report spam
Hi Leute,
ich bastle mir zur Zeit mit einem Raspberry-Pi eine Webseite, die mir
zyklisch neue Messwerte anzeigt. Dabei wird 1mal pro Sekunde ein neuer
Messwert mit einem XMLHTTP-Request angefordert. Die aufgerufene
PHP-Datei liefert dann die Messwerte zurück.
Nach einigen Sekunden bis Minuten lastet Firefox einen Prozessorkern
komplett aus und làsst sich nur noch ruckelig bedienen. Bei anderen
Browsern kann ich das Verhalten nicht beobachten.
Die Funktion "Request" wird durch ein Javascript-Event einmal pro
Sekunde aufgerufen.
Der Script-Teil sieht wie folgt aus (gekürzt):

var aktiv = window.setInterval("Request()", 1000);
xmlhttp=new XMLHttpRequest();

function Request()
{
// überprüfen, ob Request erzeugt wurde
if (!xmlhttp)
{
return false;
}
else
{
var url = "GetStatus.php";
xmlhttp.open('post', url, true);
xmlhttp.send(null);
xmlhttp.onreadystatechange=Receive;
}
}

function Receive()
{
switch (xmlhttp.readyState) {
case 4:
if (xmlhttp.status == 200) {
var Temperatures = xmlhttp.response;
if (Temperatures)
{
//Temperatures ist einfach nur
//ein langer String, in dem die Daten
//mit Semikolons getrennt eincodiert
//sind

//hier Auswertung der Daten (lang)
//aber ohne Schleifen
}
}
break;
default:
break;
}
}

Was mache ich falsch? Das Problem ist zwar im Internet zwar nicht ganz
unbekannt, ich kann mir aber nicht vorstellen, dass so ein heftiger Bug
so lange Bestand haben würde. Es muss also an meinem Code liegen.

Michael
 

Lesen sie die antworten

#1 Markus Grob
28/11/2014 - 08:15 | Warnen spam
Michael S schrieb:

Die Funktion "Request" wird durch ein Javascript-Event einmal pro
Sekunde aufgerufen.
Der Script-Teil sieht wie folgt aus (gekürzt):

var aktiv = window.setInterval("Request()", 1000);
xmlhttp=new XMLHttpRequest();

function Request()
{
// überprüfen, ob Request erzeugt wurde
if (!xmlhttp)
{
return false;
}
else
{
var url = "GetStatus.php";
xmlhttp.open('post', url, true);
xmlhttp.send(null);
xmlhttp.onreadystatechange=Receive;
}
}

function Receive()
{
switch (xmlhttp.readyState) {
case 4:
if (xmlhttp.status == 200) {
var Temperatures = xmlhttp.response;
if (Temperatures)
{
//Temperatures ist einfach nur
//ein langer String, in dem die Daten
//mit Semikolons getrennt eincodiert
//sind

//hier Auswertung der Daten (lang)
//aber ohne Schleifen
}
}
break;
default:
break;
}
}

Was mache ich falsch? Das Problem ist zwar im Internet zwar nicht ganz
unbekannt, ich kann mir aber nicht vorstellen, dass so ein heftiger Bug
so lange Bestand haben würde. Es muss also an meinem Code liegen.



Wenn Du Deinen Code auf dies hier kürzt, tritt der Fehler auch auf?
Einfach zur Analyse rausstreichen, was problematisch sein könnte.

Hat Firefox auch noch den Javascript Debugger drin wie Seamonkey? Wenn
ja, teste damit und wenn nicht, versuche es mit Seamonkey. Ds liefert
sicher Hinweise.

Gruss, Markus

Ähnliche fragen