power-poler
Goto Top

Funktion die sich Sekündlich selbst aufruft. Sinnvoll?

Guten Morgen.
Hätte da mal eine ganz Allgemein Frage.
Habe derzeit folgendes geschrieben:
index.php
.
.
.
 function current(){
         var xmlhttp = new XMLHttpRequest();
         xmlhttp.onreadystatechange = function() {
             if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                 document.getElementById("current").innerHTML = xmlhttp.responseText;  
             }
         }
         xmlhttp.open("GET", "current.php?q=", true);  
         xmlhttp.send();
		
		
}
.
.
.
function start(){
andereFunktion();

setTimeout(function(){ sleep(); }, 500);

}
function sleep(){
setTimeout(function(){ current(); }, 500);
setTimeout(function(){ sleep() }, 500);
}
</script>
</head>

<body onload="start()">  

<p id="current"></p>  

current.php:
<?php
print_r(shell_exec('mpc'))  
?>



mpc Liefert einen String der From:
Aktueller Titel [playing] #1/51 0:05/4:14 (1%) volume:100% repeat: off random: off single: off consume: off
oder wenn nichts gespielt wird:
volume:100% repeat: off random: off single: off consume: off

Die Webseite wird in der Regel von einem Smartphone aufgerufen, und es erfolgt auch nur dieser eine Zugriff im Lan.
Die Frage lautet jetzt: Ist das so sinnvoll? ich meine Sekündlich einen Shellexec auszuführen und diesen neu auf die Seite zu laden?

Schonmal Danke für eure Antworten.
Mfg
Power-Poler

Content-Key: 272886

Url: https://administrator.de/contentid/272886

Printed on: April 19, 2024 at 07:04 o'clock

Member: Arano
Arano May 25, 2015 at 08:18:19 (UTC)
Goto Top
Hi Power-Poler.

Um deine algemeine Frage auch algemein zu beantworten:
"Es kommt auf die Wichtigkeit der aktualität der Daten an" !

Ist es wiklich wichtig die Spieldauer auf die Sekunde aktuell zu halten ?
Du schreibst das die Seite per Handy aufgerufen wird, rechnest du wirklich damit das da jemand vorhockt und die Sekunden "deim laufen" zuschaut - anstat der Musik zu lauchen ?

Das würde ich vermutlich alle 5-10 Sek aktualisieren lassen (eher 10 Sek.)
Oder nur oder zusätzlich pber einen "Aktualisierungs-Button" fals es doch mal genauer sein muss.

Um noch eine Alternative zu nennen, die wichtigste Information ist doch eigentlich nur der Song-Titel. Also könnte mann auch alles was danach kommt einfach wegschneiden, dann hat man zumindes auch keine "falschen" Informationen in der Anzeige.


~Arano
(Ich habe hier auch ein Raspberry mit MPC liegen)
Mitglied: 114757
114757 May 25, 2015 updated at 08:28:02 (UTC)
Goto Top
Moin,
und statt dreimal setTimeout zu verwenden würde es auch einmal setInterval tun face-wink

Gruß jodel32
Member: Power-Poler
Power-Poler May 25, 2015 at 10:17:02 (UTC)
Goto Top
Danke für die Antwort.
Wäre wirklich eine Idee, es nur beim Titelstart, für 2-3s Aktuell zu halten und dann nur noch alle 10s bzw. bei Klick auf einen Button.
Was mich nur mal interessieren würde, wie wird das im "großen" gelöst? Ich meine im I-net gibt es doch auch Seiten die auf die Sekunde was zählen?
Ist meine Lösung in irgend einer weiße eine Belastung für das PI oder für das Handy?

Nur den Titel auszugeben, werde ich mir mal durch den Kopf gehen lassen.
Muss dan halt nur ein event haben, das erkennt wenn der Song automatisch wechselt.
Member: Power-Poler
Power-Poler May 25, 2015 at 10:18:17 (UTC)
Goto Top
Danke werde ich mir mal anschauen
Member: Arano
Arano May 25, 2015 at 11:16:20 (UTC)
Goto Top
Hi,

klar "belastet" es - die Frage ist nur wie stark / was ist "Belastung"
bzw. rechtfertigt das Ergebnis den Aufwand

In deinem Fall bedeutet dies das dein Raspberry jede Sekunde einen HTTP-Request erhält und verarbeiten muss (das macht der schon mit aber es IST Arbeit !) Für diesen Request wird ja auch jedesmal das PHP ausgehührt (endweder als Apache-Modul oder direkt per CGI) und das wiederum lässt dein System ein mpc status ausführen der auch wieder Last erzeugt (alles recht gering und schnell aber es IST Arbeit dür das __kleine Früchtchen__)
Und all das NUR um eine Sekunde um eins weiter zählen zu lassen.

Nicht zu vergessen ist dabei auch die Clientseite. Auch wenn unsere Smartphones schon einiges an Rechenleisung haben. So ist nun auch der Browser damit beschäftigt das JS auszuführen und auszuführen und auszuführen und.... Jedes mal wird für einen Request vom OS ein Socket bereitsgestellt, eine Verbindung zum Server geöffnet, der Request übertragen, die Antwort gelesen und verarbeitet...
Und all das NUR um eine Sekunde um eins weiter zählen zu lassen.

Wir sind einfach schon viel zu verwöhnt als das wir uns um Resourcen gedanken machen und verschwenden sie deshalb viel zu unüberlegt ! Nur weil es AJAX gibt muss man es NICHT einsetzen

Du kannst auch beim ersten Aufrufen der Seite, die Zeitangabe extrahieren (PHP-Seitig) und als separaten Wert mit dem HTML und Javascript ausgeben. So könnte man dan nur mit Javascript die Zeit weiter zählen lassen.
Und beim erreichen der gesamt Spieldauer, kann man gleich einen Refresch auslösen lassen um A) den Titel wechsel mit zu machen und B) an die neuen Informationen bzgl.Titel, aktuelle Spielzeit und geamt Spielzeit zu kommen.

Stat also jeder Sekunde einen Request abzufeuern und jede menge Arbeit zu generieren, hat man so nur einen Request alle ~240Sekunden bzw. 239 Request __weniger__ - Effizienz face-wink

Dein Netzwerk ist weniger belastet,
dein RasPi ist weniger belastet (auch wenn der Request nun etwas aufwändiger ist, dafür 1mal stat 240mal) und auch
dein Smartphone ist weniger belastet (auch wenn es nun den JS-Counter auszuführen hat, das ist leichtere Arbeit als einen HTTP-Request) dan hält der Akku auch wieder länger *fg*


~Arano