JS Counter lässt Rechner abstürzen

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
TLoD
Mitglied
Beiträge: 161
Registriert: 04.08.2007 14:57
Wohnort: Nürnberg
Kontaktdaten:

JS Counter lässt Rechner abstürzen

Beitrag von TLoD »

Hallo Gemeinde,

ich habe vor kurzem 2 Counter via JS auf meiner Seite eingefügt.
Nun habe ich vor ein paar Tagen die Info mehrerer Leute bekommen, das Ihre Rechner bei Nutzung meiner Seite abstürzen. Nach dem ich dann die Counter deaktiviert hatte, lief die Seite auch deutlich besser. Rein von der Nutzung gibt es keine Mängel, auffallen tut das ganze erst, beim Betrachten der CPU Auslastung - bei mir liegt sie nur bei ca 24%, jedoch haben einige User ältere Notebooks, bei denen die Auslastung bei 99-100% liegt.

Nun kenn ich aber O-Games, auf denen bis zu 500 solcher Counter gleichzeitig laufen und es aber null Performanceprobleme gibt.

Kann man die unten stehenden Counter iwi abändern, so das sich dieses Problem legt?

Schon mal besten Dank an die Helfer!

Code: Alles auswählen

<html>
<head>
<?php

// Lese letzten Scan aus
                $sql = "SELECT Datum
                                FROM ".SCANLOGS."
                                ORDER BY Datum DESC;";
                $result = mysql_query($sql) OR die(mysql_error());
                $row = mysql_fetch_assoc($result);
                // nur den ersten (also letzten Eintrag) auslesen
                $date = $row['Datum'];
                $ZeitE = getNextScan($date);

$timestamp = ($ZeitE);

$testausgabe = date("F, j Y H:i:s",$timestamp);

?>
<script language="JavaScript">
var end = new Date("<?PHP echo $testausgabe; ?>");
function toSt2(n) {
  s = "";
  if (n < 10) s += "0";
  return (s + n).toString();
}
function toSt3(n) {
  s = "";
  if (n < 10) s += "00";
  else if (n < 100) s += "0";
  return (s + n).toString();
}
function countdown() {
  d = new Date();
  count = Math.floor(end.getTime() - d.getTime());
  if(count > 0) {
    miliseconds = toSt3(count%1000); count = Math.floor(count/1000);
    seconds = toSt2(count%60); count = Math.floor(count/60);
    minutes = toSt2(count%60); count = Math.floor(count/60);
    hours = toSt2(count%24); count = Math.floor(count/24);
    days = count;
    document.getElementById("c1").innerHTML = hours + ":" + minutes + ":" + seconds
    setTimeout("countdown()", 50);
  }
else
{
    document.getElementById("c1").style.color = "green";
    document.getElementById("c1").innerHTML = "00:00:00";
    document.getElementById("c1").innerHTML = "NOW";
}
}
window.onload = function(){
  countdown();
}

</script>

<?php

$stunden = date("H");
$minuten = date("i");
$sekunden = date("s");

?>

<script language="JavaScript">
var serverZeit = new Date(0, 0, 0, <?php echo $stunden . ", " . $minuten . ", " . $sekunden;?>);
var LadeZeit = new Date();

function uhrAktualisieren(){
        var aktZeit = new Date();
        var serverAktZeit = new Date(aktZeit.valueOf() - LadeZeit.valueOf() + serverZeit.valueOf());

        var h = serverAktZeit.getHours();
        if  (h <10) {h='0'+h;}
        var m = serverAktZeit.getMinutes();
        if  (m <10) {m='0'+m;}
        var s = serverAktZeit.getSeconds();
        if  (s <10) {s='0'+s;}

        document.getElementById("uhr").innerHTML = h+':'+m+':'+s;
        setTimeout('uhrAktualisieren()', 1000);
}


</script>
</head>
<body onLoad="uhrAktualisieren(),countdown()">
</body>
</html>
<?php
Ausgabe:

Code: Alles auswählen

                                <td align=\"center\"><b><i><span style=\"color:green\">Time: ".date("d.m.y")." <span id=\"uhr\">".date("H:i:s")."</span></span></i></b></td>
                                <td align=\"center\"><b><i><span style=\"color:#b10505\">NEXT SCAN: <span id=\"c1\"><span id=\"c2\"></span></span></i></b></td>
LG Marc

Wir leben alle unter dem gleichen Himmel, aber wir haben nicht alle den gleichen Horizont.
piero
Mitglied
Beiträge: 476
Registriert: 10.11.2008 17:15
Wohnort: Schweiz

Beitrag von piero »

hast du mal ein link zu einer testseite?
dann kann firefox javascript fehler anzeigen (extras -> fehlerkonsole) und es ist dann kein php dazwischen, was etwas verwirrt^^
P7BB
Mitglied
Beiträge: 383
Registriert: 15.07.2008 19:40

Beitrag von P7BB »

Ich weiß, ich sollte mir erst den code komplett durchlesen, bevor ich poste, aber wenn dein counter zufällig einfach nur zahlen auf-adieren soll, geht das so am besten:

Code: Alles auswählen

function (z) {
document.getElementById('id').innerHTML = z;
y = z;
window.setTimeout('function(y)',1000);
}
das 'id' musst du durch die id eines ausgesuchten elements ersetzen...
also bei <b id='bla'> </b> müsste das so sein:
...ById('bla').innerHTML...
die 1000 bei der setTimeout-Funktion sind tausendstel-sekunden...
1000 = 1 Sekunde
1 = 0,001 Sekunden

Wenn ich den sinn deines Codes falsch verstanden hab, hau mich und lösch* den post ;)

* bzw. melde ihn ;)
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Du hast zuviel Code gepostet, was das Thema unnötig in die Länge zieht und unübersichtlich macht.
Es wäre besser die Datei bzw. den Code als .txt Datei abzuspeichern und dann hier einen Link zu posten - siehe auch KB:datei .

Bitte passe deinen Beitrag an, lies Dir den phpBB.de-Knigge und den Hinweis zur Fragestellung und Rechtschreibung durch und beachte diese zukünftig.

Zum Thema:
Ich glaube du gehst das zu kompliziert an. Wenn du nur eine Uhr anzeigen willst dann kannst du den Großteil relativ zum letzten Wert berechnen und brauchst nicht jedes mal komplett neu rechnen. Du musst eigentlich nur den Startwert wissen und dann in welcher Richtung das Ding laufen soll. Grob also

Code: Alles auswählen

var tage;
var stunden;
var minuten;
var sekunden;

function update()
{
sekunden--;
if(sekunden < 0)
{
minuten--;
sekunden = 59;
if(minuten < 0)
{
stunden--;
minuten = 59;
if(stunden < 0)
{
tage--;
}}}
//Ausgabe
if(tage < 0)
{
//Ende erreicht und überschritten, wir sind schon unter 0
//Wie auch immer du die Ausgabe gestalten willst
}
else
{
//Countdown darstellen und danach sich selber wieder aufrufen.
//Natürlich nur ein mal pro sekunde aufrufen und nicht alle 50 Millisekunden wie das bei dir gerade passiert
}}
Antworten

Zurück zu „Coding & Technik“