Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Timer Objekte bei Script-Neustart

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    15
    1
    653

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    632

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.9k

Timer Objekte bei Script-Neustart

Geplant Angeheftet Gesperrt Verschoben JavaScript
4 Beiträge 3 Kommentatoren 339 Aufrufe 1 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • L Offline
    L Offline
    LoxDUS
    schrieb am zuletzt editiert von
    #1

    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?

    paul53P OliverIOO 2 Antworten Letzte Antwort
    0
    • L LoxDUS

      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?

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #2

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

      Ja. Kann man auch leicht testen.

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Antwort Letzte Antwort
      0
      • L LoxDUS

        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?

        OliverIOO Offline
        OliverIOO Offline
        OliverIO
        schrieb am zuletzt editiert von
        #3

        @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.

        Meine Adapter und Widgets
        TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
        Links im Profil

        L 1 Antwort Letzte Antwort
        0
        • OliverIOO OliverIO

          @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 Offline
          L Offline
          LoxDUS
          schrieb am zuletzt editiert von
          #4

          @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 Antwort Letzte Antwort
          0
          Antworten
          • In einem neuen Thema antworten
          Anmelden zum Antworten
          • Älteste zuerst
          • Neuste zuerst
          • Meiste Stimmen


          Support us

          ioBroker
          Community Adapters
          Donate

          943

          Online

          32.6k

          Benutzer

          81.9k

          Themen

          1.3m

          Beiträge
          Community
          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
          ioBroker Community 2014-2025
          logo
          • Anmelden

          • Du hast noch kein Konto? Registrieren

          • Anmelden oder registrieren, um zu suchen
          • Erster Beitrag
            Letzter Beitrag
          0
          • Home
          • Aktuell
          • Tags
          • Ungelesen 0
          • Kategorien
          • Unreplied
          • Beliebt
          • GitHub
          • Docu
          • Hilfe