Javascript und RAM Verbrauch

  • 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:



    HTML
    <html>
    <head>
    <head>
    <body onload="Server()">
    </body>
    </html>


    Hier in Beispiel zwei ist es innerhalb der Funktion deklariert:



    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:


    Code
    //--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
    <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:


    HTML
    <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:



    HTML
    <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()?

  • Ich Persönlich würde dein letzes Beispiel

    So machen

    Code
    var ObjectWithValues = new Object();
          function FunktionToWorkWithObject(){
                var Results = $.ajax({ url: "TextfilewithJson.txt", contentType:"application/json", dataType:"json", async: false }).responseText;
                ObjectWithValues = JSON.parse(Results); 
    }
    setInterval(function(){FunktionToWorkWithObject()},2000);

    Warum ich das so machen würde?

    Erstens, erstellst du nur einmal das Objekt.

    Innerhalb der function würdest du immer wieder ein neues erstellen,was ich glaube den RAM und Speicher erhöhen könnte.


    Dann nehme ich die server() function weg und rufe mit setInterval direkt

    Code
    FunktionToWorkWithObject()

    auf.

    Erstens ist es etwas wenniger Code,und da du sowieso die function immer wieder aufrufst ,finde ich den Interval besser als Timeout.

    So würde ich es machen und so denke ich das es wenniger RAM verbrauchen würde.

    Ob es stimmt weiss ich natürlich nicht.




    EDIT und ich meine mal gelesen zu haben das dies

    Code
    setTimeout(function(){Server()}, 2000); 

    besser als so ist .

    Code
    setTimeout(Server, 2000); 


    ALLE ANGABEN OHNE GEWÄHR

  • Danke fuer dein Beitrag.


    Ich habe auch in Erinnerung das es wahrscheinlich besser ist das Objekt ausserhalb der Funktion zu erstellen, aber ich habe auch vor kurzen folgenden Beitrag gelesen und bin mir jetzt deswegen etwas unsicher:


    Zitat

    global variable to store lots of data, make sure to null it or reassign it after you are done with it. One common cause for increased memory consumption in connection with globals are caches).


    Das du mir setInterval() statt setTimeout() emfpiehlst finde ich interessant, aber ich bin auch ein wenig verunsichert bei dieser Funktion, weil in einem englischen forum habe ich gelesen das setInterval() irgendwie den Code zwingt nach Ablauf der Zeit neu aufgerufen zu werden und bei setTimeout(à wird gewartet bis der letzte Vorgange von selbst abgeschlossen wird, bevor ein neuer Aufruf kommt. Und ich denke ohne zwang den code ausfuehren waere besser in meinen fall, weil ich daten sammeln will, setInterval() soll so zu sagen fuer sowas wie Animationen am besten sein.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!