Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Du sollst nicht im Task-Manager schauen was passiert, wenn du die Developer-Tools öffnest, sondern Chrome hat einen eigenen Task-Manager unter "weitere Tools". Und dieser listet dir den Speicherverbrauch jedes Tabs separat auf. Da musst du nicht raten wie viel an was geht.Ich habe gestern auch gesehen das irgendwie dieses Chrome Developer Tool Fenster vom Chrome Browser den RAM Verbrauch anheben koennte
Ja das waren schon hilfreiche Tips. Ich habe gestern auch gesehen das irgendwie dieses Chrome Developer Tool Fenster vom Chrome Browser den RAM Verbrauch anheben koennte und ich werde das alles mal mehr beobachten, vielleicht habe ich etwas Glueck und stelle nachher fest das es doch nicht an meinem Javascript liegt sondern an diesem Developer Tool Fenster das geoeffnet war.
Das spielt doch hier keine Rolle. Du sollst dir den Speicherverbrauch in Chrome selbst ansehen. Dafür öffnest du die Developertools und schaust unter Memory. Da kannst du dann prüfen was dein Javascript-Code an Speicher verbraucht. Unabhängig von anderen Programmen oder Chrome selbst.
Hab das grad noch mal gecheckt. Du nutzt synchrone Calls für AJAX. Mach das nicht.
Ich habe deinen Code jetzt mal kurz überflogen. An sich wird der RAM Verbraucht vermutlich nicht besonders hoch sein. Ein Problem ist aber dass du JavaScript falsch zu verstehen scheinst. JavaScript arbeitet an vielen Stellen nicht synchron sondern asynchron. Ein Beispiel ist dein AJAX Aufruf. Wenn das nicht so wäre dann würde dein Browser oder zumindest deine Seite so lange einfrieren bis ein Ergebnis zurück kommt. In deinem Fall würde das alle zwei Sekunden passieren. Das wäre ziemlich schlecht. Normalerweise arbeitet mal mit Callback Methoden. Sobald der AJAX Call ein Ergebnis bekommt wird dann die von dir angegebene Methode aufgerufen.
edit: Hab das grad noch mal gecheckt. Du nutzt synchrone Calls für AJAX. Mach das nicht.
Quellcode |
|
1 |
Downloadliste_Textinhalt = $.ajax({ url: "Downloadliste.txt", contentType:"application/json", dataType:"json", async: true }).responseText; |
Administrator
Hab das grad noch mal gecheckt. Du nutzt synchrone Calls für AJAX. Mach das nicht.
Jou!
Verwende besser die aktuelle Version von jQuery.
Bezüglich AJAX wurde da einiges verbessert und optimiert.
(1.5 ist sieben Jahre alt)
setInterval statt setTimout, um einmalig den Timer zu setzen/initialisieren
Referenzen auf Elemente speichern, statt sie immer wieder neu abzufragen (getElementById)
Anzahl der globalen Variablen möglichst kleinhalten
... usw. usf.
setInterval statt setTimout
Quellcode |
|
1 2 3 4 5 6 7 8 |
function ServerFunktion() { var strurl="Save_data_1.php?name="+Downloadliste_Object.Name[ZaehlerIndex]; var res=$.ajax({ url: strurl, contentType:"application/json", dataType:"json", async: false }).responseText; //---- 2000 = 2 sekunden setTimeout(ServerFunktion, 2000); } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 |
var strurl=""; var res=""; function ServerFunktion() { strurl="Save_data_1.php?name="+Downloadliste_Object.Name[ZaehlerIndex]; res=$.ajax({ url: strurl, contentType:"application/json", dataType:"json", async: false }).responseText; //---- 2000 = 2 sekunden setTimeout(ServerFunktion, 2000); } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
function ServerFunktion() { var Downloadliste_Object = new Object(); Downloadliste_Textinhalt = $.ajax({ url: "Downloadliste.txt", contentType:"application/json", dataType:"json", async: false }).responseText; if(isJson(Downloadliste_Textinhalt)==true) { Downloadliste_Object = JSON.parse(Downloadliste_Textinhalt); }//json Check //---- 2000 = 2 sekunden setTimeout(ServerFunktion, 2000); } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
var Downloadliste_Object = new Object(); function ServerFunktion() { Downloadliste_Textinhalt = $.ajax({ url: "Downloadliste.txt", contentType:"application/json", dataType:"json", async: false }).responseText; if(isJson(Downloadliste_Textinhalt)==true) { Downloadliste_Object = JSON.parse(Downloadliste_Textinhalt); }//json Check //---- 2000 = 2 sekunden setTimeout(ServerFunktion, 2000); } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
var Downloadliste_Object = new Object(); var Referenz1=document.getElementById("test2"); function ServerFunktion() { Downloadliste_Textinhalt = $.ajax({ url: "Downloadliste.txt", contentType:"application/json", dataType:"json", async: false }).responseText; if(isJson(Downloadliste_Textinhalt)==true) { Downloadliste_Object = JSON.parse(Downloadliste_Textinhalt); strurl="Save_data_1.php?name="+Downloadliste_Object.Name[ZaehlerIndex]; res=$.ajax({ url: strurl, contentType:"application/json", dataType:"json", async: false }).responseText; Referenz1.innerHTML = res; }//json Check //---- 2000 = 2 sekunden setTimeout(ServerFunktion, 2000); } |
Administrator
Nein, das geht so nicht.
Du kannst nicht einfach .responseText machen. Zu dem Zeitpunkt ist die Anfrage ja noch gar nicht fertig.
Das Ganze läuft asynchron im Hintergrund, darum musst du auch die Funktionen (Callbacks) angeben. Diese werden aufgerufen, sobald die Anfrage fertig ist.
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
var xhttp2 = new XMLHttpRequest(); function ReadFile() { var url = "ReadData.php"; xhttp2.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { console.log("Rueckgabe von PHP Datei "+this.responseText); } }; xhttp2.open("GET", url, true); xhttp2.send(); } |
Administrator
Werbeanzeige