Hallo, ich versuche zur Zeit ein wenig mein Javascript zu optimieren, weil ich ab und zu feststelle das der Browser zu hohen RAM Verbrauch anzeigt, da bauen sich anscheinend ueber Zeit etwas die Verbrauche auf und es liegt am Javascript, deswegen wollte ich mal einige Sachen generell versuchen zu erforschen und verbessern.
1. Ich habe hier zwei Beispiele wie man mit Javascript eine PHP Datei aufruft, beim ersten Beispiel ist das "XLMHttpRequest" Konstrukt ausserhalb der Funktion erstellt beim zweiten Beispiel innerhalb:
//--Here the "XMLHttpRequest" is declared outside the function
var xhttp_file = new XMLHttpRequest();
function ReadFromPHPFile(PHPfilename="filename.php")
{
var url = PHPfilename;
xhttp_file.onreadystatechange = function()
{
};
xhttp_file.open("GET", url, true);
xhttp_file.send();
}
//--Run the code again and again
function Server()
{
ReadFromPHPFile(); //here the function to read from PHP file is called every 2 seconds again
setTimeout(Server, 2000); //Setting every 2 seconds run the code again
}
Alles anzeigen
<html>
<head>
<head>
<body onload="Server()">
</body>
</html>
Hier in Beispiel zwei ist es innerhalb der Funktion deklariert:
//--Here the "XMLHttpRequest" is declared inside the function
function ReadFromPHPFile(PHPfilename="filename.php")
{
var xhttp_file = new XMLHttpRequest();
var url = PHPfilename;
xhttp_file.onreadystatechange = function()
{
};
xhttp_file.open("GET", url, true);
xhttp_file.send();
}
//--Run the code again and again
function Server()
{
ReadFromPHPFile(); //here the function to read from PHP file is called every 2 seconds again
setTimeout(Server, 2000); //Setting every 2 seconds run the code again
}
Alles anzeigen
Gibt es irgendeinen Unterschied beim Ram Verbrauch, wenn man das innerhalb oder ausserhalb der Funktion deklariert? Kann man sagen welches von beiden Beispielen wuerde weniger RAM Verbrauch erzeugen? Bitte beachten das auch mit setTimeout() der Code immer wiederholt wird.
Eine weitere Frage habe ich auch zur setTimeout() Funktion mit der man den Code immer sich wiederholen laest, ist es besser wenn ich setInterval() benutzen wuerde womit auch ein Wiederholen erreicht wird oder ist setTimeout() hier die bessere Wahl?
Dann habe ich hier noch eine Methode, mit der man im Prinzip das gleiche machen kann, also den Inhalt einer Datei lesen, nur wird diesmal eine jquery Funktion benutzt:
//--Run the code again and again
function Server()
{
var Results = $.ajax({ url: "PHPfile.php", contentType:"application/json", dataType:"json", async: false }).responseText; //called every 2 seconds again
setTimeout(Server, 2000); //Setting every 2 seconds run the code again
}
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
<head>
<body onload="Server()">
</body>
</html>
Gibt es da irgendeinen Unterschied im RAM Verbrauch wenn man diese Variante benutzt oder die erste Variante, also funktioniert vielleicht eine von beiden mit weniger RAM Verbrauch?
Und ich habe oft gehoert das man irgendwie "async:false" nicht schreiben soll weil das veraltet ist, aber ich weis nicht ob das jetzt falsch ist wenn ich das so lasse beziehungsweise was fuer Vorteile wuerde es bringen wenn ich es anders schreibe?
Und jetzt noch eine letzte Frage zu Objekte erstellen, in Beispiel 1 ist das Objekt ausserhalb der Funktion erstellt:
var ObjectWithValues = new Object(); //Object declared outside the function
function FunktionToWorkWithObject()
{
var Results = $.ajax({ url: "TextfilewithJson.txt", contentType:"application/json", dataType:"json", async: false }).responseText;
ObjectWithValues = JSON.parse(Results); // Save the elements into the object
console.log(ObjectWithValues.Value[0].name);//write some info from object into logs
}
//--Run the code again and again
function Server()
{
FunktionToWorkWithObject();//here it gets called also every time again
setTimeout(Server, 2000); //Setting every 2 seconds run the code again
}
Alles anzeigen
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
<head>
<body onload="Server()">
</body>
</html>
In Beispiel zwei ist es wieder innerhalb der Funktion erstellt:
function FunktionToWorkWithObject()
{
var ObjectWithValues = new Object(); //Object declared inside the function
var Results = $.ajax({ url: "TextfilewithJson.txt", contentType:"application/json", dataType:"json", async: false }).responseText;
ObjectWithValues = JSON.parse(Results); // Save the elements into the object
console.log(ObjectWithValues.Value[0].name);//write some info from object into logs
}
//--Run the code again and again
function Server()
{ FunktionToWorkWithObject();//here it gets called also every time again setTimeout(Server, 2000); //Setting every 2 seconds run the code again
}
Alles anzeigen
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
<head>
<body onload="Server()">
</body>
</html>
Macht es da auch irgendeinen Unterschied ob man das Objekt ausserhalb oder innerhalb der Funktion erstellt, welche von beiden Varianten verbraucht weniger RAM?
Der RAM Verbrauch ist mir auch deswegen so wichtig weil wie man in meinen Beispielen sieht wird mit setTimeout() der Code immer wiederholt und das baut dann zu hohen RAM Verbrauch auf wenn das nicht gut gebaut ist. Oder kann man generell nicht verhindern das Javascripte den RAM in die Hoehe treiben nach langen Gebrauch mit erzwungenen Wiederholungen durch setTimeout()?