Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Timer Objekte bei Script-Neustart

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Timer Objekte bei Script-Neustart

    This topic has been deleted. Only users with topic management privileges can see it.
    • L
      LoxDUS last edited by

      Hallo JS Experten,

      Da ich wieder mal mit Speicherproblemen kämpfe und mir den Kopf zerbreche wo der Speicher verbraucht wird ist mir eine Frage zu folgendem Szenario eingefallen:

      Fall:
      Ein Script hat einige Eventroutinen in denen so einige Timerobjekte genutzt werden.
      Vor dem Auftruf der setTimer Funktionen prüfe ich zunächst ob es noch ein Timer-Objekt gibt:

      if(LTDiele) clearTimeout(LTDiele);  // Timer beenden falls noch einer aktiv ist und dann neu triggern
      

      und beende/lösche diesen falls es da noch ein gültiges Objekt gibt. Anschließend erstelle ich ein neues Timer Objekt mit

      LTDiele = setTimeout(function(){setState(DE_K_LFLUR_1, false)}, 120000);  //Nach 2 Min
      

      Was passiert aber wenn, sagen wir mal, der Timer noch läuft und drauf wartet die CallBack Funktion aufzurufen (in diesem Fall setState(DE.... ) und das Scrikpt in dem das Timer-Objekt erstellt wurde neu gestartet wird? Ist das Timerobjekt dann immer noch auf dem "Stack" und belegt Speicher als verwaistes Objekt oder wird das Timerobjekt auch jedesmal, wenn das Skript neu gestartet wird, gelöscht?

      Hat also jedes Skript seinen eigenen "Stack"? Oder wird der vom JS-Controller genutzt?

      paul53 OliverIO 2 Replies Last reply Reply Quote 0
      • paul53
        paul53 @LoxDUS last edited by

        @loxdus sagte: wird das Timerobjekt auch jedesmal, wenn das Skript neu gestartet wird, gelöscht?

        Ja. Kann man auch leicht testen.

        1 Reply Last reply Reply Quote 0
        • OliverIO
          OliverIO @LoxDUS last edited by

          @loxdus
          jedes skript wird in seiner eigenen sandbox ausgeführt.
          d.h. wenn man einen timer vergisst nicht zu deaktivieren, dann ist der speicher nach beenden des skripts auch wieder frei.
          auch sind die befehle setInterval und setTimeout, die zur Verfügung stehen nicht die originalen Befehle, die Javascript nativ zur Verfügung stellt, sondern da ist noch ein wenig sandbox-code dazwischen, so das das starten und stoppen eines skripts nicht zu einem Gesamt-Speicherverlust führt.

          Allerdings ist innerhalb der Laufzeit eines Skriptes der Programmierer verantwortlich das da keine Leaks entstehen.

          L 1 Reply Last reply Reply Quote 0
          • L
            LoxDUS @OliverIO last edited by

            @oliverio Vielen Dank für die ausführliche Erklärung. Dann werde ich jetzt mal meine riesen Skripte ein wenig in kleine Skripte aufteilen um einen besseren Überblick über die Speichernutzung zu bekommen.

            1 Reply Last reply Reply Quote 0
            • First post
              Last post

            Support us

            ioBroker
            Community Adapters
            Donate

            838
            Online

            31.8k
            Users

            80.0k
            Topics

            1.3m
            Posts

            3
            4
            238
            Loading More Posts
            • Oldest to Newest
            • Newest to Oldest
            • Most Votes
            Reply
            • Reply as topic
            Log in to reply
            Community
            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
            The ioBroker Community 2014-2023
            logo