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. "Steuere" und "Aktualisiere" Vermeiden?

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.6k

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

"Steuere" und "Aktualisiere" Vermeiden?

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
10 Beiträge 3 Kommentatoren 477 Aufrufe 3 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.
  • MartinPM Online
    MartinPM Online
    MartinP
    schrieb am zuletzt editiert von MartinP
    #1

    Ich habe hier schon mehrfach gehört, dass man "Steuere" und "Aktualisiere" Aufrufe im Blockly/Javascript Code minimieren solle, weil das die Scripte "aufblähen" würde...

    Folgendes ist nur ein Beispiel ohne Funktion:
    35195c1d-fa6a-405f-8ba5-cee602b9c024-grafik.png

    Ist da irgendetwas 'dran, dass die erste Variante ein größerer Ressourcenfresser ist, als die zweite?

    Ist irgendwie für mich nicht nachvollziehbar.

    Nachtrag Ich gehe natürlich davon aus, dass die beiden Blocklys die einzigen sind, die auf das "Steuere" Objekt zugreifen, sonst wäre die Situation nicht vergleichbar.

    Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
    Virtualization : unprivileged lxc container (debian 13) on Proxmox 9.1.5)
    Linux pve 6.17.9-1-pve
    6 GByte RAM für den Container
    Fritzbox 6591 FW 8.20 (Vodafone Leih-Box)
    Remote-Access über Wireguard der Fritzbox

    paul53P 1 Antwort Letzte Antwort
    0
    • MartinPM MartinP

      Ich habe hier schon mehrfach gehört, dass man "Steuere" und "Aktualisiere" Aufrufe im Blockly/Javascript Code minimieren solle, weil das die Scripte "aufblähen" würde...

      Folgendes ist nur ein Beispiel ohne Funktion:
      35195c1d-fa6a-405f-8ba5-cee602b9c024-grafik.png

      Ist da irgendetwas 'dran, dass die erste Variante ein größerer Ressourcenfresser ist, als die zweite?

      Ist irgendwie für mich nicht nachvollziehbar.

      Nachtrag Ich gehe natürlich davon aus, dass die beiden Blocklys die einzigen sind, die auf das "Steuere" Objekt zugreifen, sonst wäre die Situation nicht vergleichbar.

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

      @martinp sagte: Folgendes ist nur ein Beispiel

      Schlechtes Beispiel, denn man macht es so:

      Blockly_temp.JPG

      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

      MartinPM 1 Antwort Letzte Antwort
      0
      • mickymM Offline
        mickymM Offline
        mickym
        Most Active
        schrieb am zuletzt editiert von mickym
        #3

        In letzter Konsequenz ist es vollkommen egal, welche der 3 Lösungen Du nimmst, der Datenpunkt wird in ALLEN Fällen nur 1x geschrieben. Eine Variable zu erstellen ist in jedem Fall überflüssig und „könnte“ man als Ressourcenfresser bezeichnen.

        Und die Lösung von Paul funktioniert ja nur mit booleschen Werten, hat in sofern mit derFrage nur indirekt zu tun.

        Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

        1 Antwort Letzte Antwort
        0
        • paul53P paul53

          @martinp sagte: Folgendes ist nur ein Beispiel

          Schlechtes Beispiel, denn man macht es so:

          Blockly_temp.JPG

          MartinPM Online
          MartinPM Online
          MartinP
          schrieb am zuletzt editiert von MartinP
          #4

          @mickym So sehe ich das auch - und wenn ein JIT-Compiler ins Spiel kommt, wird das Ganze durchaus noch unübersichtlicher, da wird der Compiler da ggfs. die Hilfsvariable wieder weg-optimieren ;-)

          Eigentlich ging es mir um folgenden Blockly von @paul53 mit einer Hilfsvariable

          https://forum.iobroker.net/assets/uploads/files/1701798890478-blockly_temp.jpg

          Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
          Virtualization : unprivileged lxc container (debian 13) on Proxmox 9.1.5)
          Linux pve 6.17.9-1-pve
          6 GByte RAM für den Container
          Fritzbox 6591 FW 8.20 (Vodafone Leih-Box)
          Remote-Access über Wireguard der Fritzbox

          paul53P mickymM 2 Antworten Letzte Antwort
          0
          • MartinPM MartinP

            @mickym So sehe ich das auch - und wenn ein JIT-Compiler ins Spiel kommt, wird das Ganze durchaus noch unübersichtlicher, da wird der Compiler da ggfs. die Hilfsvariable wieder weg-optimieren ;-)

            Eigentlich ging es mir um folgenden Blockly von @paul53 mit einer Hilfsvariable

            https://forum.iobroker.net/assets/uploads/files/1701798890478-blockly_temp.jpg

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

            @martinp sagte: wenn ein JIT-Compiler ins Spiel kommt

            Schon mal darüber nachgedacht, weshalb ioBroker einen so enormen RAM-Verbrauch bei gleichzeitig geringer CPU-Last hat?
            Der JIT-Compiler (V8) von Node.js hat keinen Linker. Er kann deshalb keine Unterprogramme (Bibliotheken) einbinden. Funktionen werden bei ihrem Aufruf durch den deklarierten Inhalt ersetzt - und das bei jedem Aufruf. Das zieht sich bei komplexen Funktionen wie setState() bis zum js-controller durch.
            @hobbyquaker hat sich bei der Einführung der Gruppe "global" im Javascript-Adapter etwas gedacht: Globale Skripte werden in jedes andere Skript kopiert und dort ausgeführt. Das macht nur Sinn mit global deklarierten Funktionen, die nur bei ihrem Aufruf übersetzt werden.

            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

            MartinPM 1 Antwort Letzte Antwort
            1
            • MartinPM MartinP

              @mickym So sehe ich das auch - und wenn ein JIT-Compiler ins Spiel kommt, wird das Ganze durchaus noch unübersichtlicher, da wird der Compiler da ggfs. die Hilfsvariable wieder weg-optimieren ;-)

              Eigentlich ging es mir um folgenden Blockly von @paul53 mit einer Hilfsvariable

              https://forum.iobroker.net/assets/uploads/files/1701798890478-blockly_temp.jpg

              mickymM Offline
              mickymM Offline
              mickym
              Most Active
              schrieb am zuletzt editiert von mickym
              #6

              @martinp Na in diesem Fall sind beide Variablen sinnvoll, da sonst mehrfach gelesen werden müsste, auch wenn nur einmal geschrieben wird.

              Sonst müsstest Du in jeder Bedinung temperatur und switch abprüfen und damit jedes Mal den Datenpunkt (switch) erneut einlesen. Genauso wie temp (jedesmal erneut eingelesen würde), da ja über den Zeitplan getriggert wird.

              Deshalb macht das in meinen Augen hier schon Sinn beides über Variablen zu regeln.

              Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

              1 Antwort Letzte Antwort
              0
              • paul53P paul53

                @martinp sagte: wenn ein JIT-Compiler ins Spiel kommt

                Schon mal darüber nachgedacht, weshalb ioBroker einen so enormen RAM-Verbrauch bei gleichzeitig geringer CPU-Last hat?
                Der JIT-Compiler (V8) von Node.js hat keinen Linker. Er kann deshalb keine Unterprogramme (Bibliotheken) einbinden. Funktionen werden bei ihrem Aufruf durch den deklarierten Inhalt ersetzt - und das bei jedem Aufruf. Das zieht sich bei komplexen Funktionen wie setState() bis zum js-controller durch.
                @hobbyquaker hat sich bei der Einführung der Gruppe "global" im Javascript-Adapter etwas gedacht: Globale Skripte werden in jedes andere Skript kopiert und dort ausgeführt. Das macht nur Sinn mit global deklarierten Funktionen, die nur bei ihrem Aufruf übersetzt werden.

                MartinPM Online
                MartinPM Online
                MartinP
                schrieb am zuletzt editiert von
                #7

                @paul53 said in "Steuere" und "Aktualisiere" Vermeiden?:

                Funktionen werden bei ihrem Aufruf durch den deklarierten Inhalt ersetzt - und das bei jedem Aufruf. Das zieht sich bei komplexen Funktionen wie setState() bis zum js-controller durch.

                Das heißt, dass der JIT bei jedem Auffinden eines Funktionsaufrufes einen neuen Eintrag mit der expandierten entsprechenden Funktion im Code-Cache anlegt?

                https://www.baeldung.com/jvm-code-cache

                Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
                Virtualization : unprivileged lxc container (debian 13) on Proxmox 9.1.5)
                Linux pve 6.17.9-1-pve
                6 GByte RAM für den Container
                Fritzbox 6591 FW 8.20 (Vodafone Leih-Box)
                Remote-Access über Wireguard der Fritzbox

                paul53P 1 Antwort Letzte Antwort
                0
                • MartinPM MartinP

                  @paul53 said in "Steuere" und "Aktualisiere" Vermeiden?:

                  Funktionen werden bei ihrem Aufruf durch den deklarierten Inhalt ersetzt - und das bei jedem Aufruf. Das zieht sich bei komplexen Funktionen wie setState() bis zum js-controller durch.

                  Das heißt, dass der JIT bei jedem Auffinden eines Funktionsaufrufes einen neuen Eintrag mit der expandierten entsprechenden Funktion im Code-Cache anlegt?

                  https://www.baeldung.com/jvm-code-cache

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

                  @martinp sagte: Das heißt, dass der JIT bei jedem Auffinden eines Funktionsaufrufes einen neuen Eintrag mit der expandierten entsprechenden Funktion im Code-Cache anlegt?

                  Davon gehe ich aus, dass Funktionen keine Unterprogramme (Stichwort: Linker), sondern Makros sind, die eingefügt werden.

                  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

                  MartinPM 1 Antwort Letzte Antwort
                  0
                  • paul53P paul53

                    @martinp sagte: Das heißt, dass der JIT bei jedem Auffinden eines Funktionsaufrufes einen neuen Eintrag mit der expandierten entsprechenden Funktion im Code-Cache anlegt?

                    Davon gehe ich aus, dass Funktionen keine Unterprogramme (Stichwort: Linker), sondern Makros sind, die eingefügt werden.

                    MartinPM Online
                    MartinPM Online
                    MartinP
                    schrieb am zuletzt editiert von MartinP
                    #9

                    @paul53 said in "Steuere" und "Aktualisiere" Vermeiden?:

                    @martinp sagte: Das heißt, dass der JIT bei jedem Auffinden eines Funktionsaufrufes einen neuen Eintrag mit der expandierten entsprechenden Funktion im Code-Cache anlegt?

                    Davon gehe ich aus, dass Funktionen keine Unterprogramme (Stichwort: Linker), sondern Makros sind, die eingefügt werden.

                    Wäre wirklich mal ein paar Experimente wert - bin das nicht gewohnt, so in Dunkeln zu tappen ;-)

                    Ich könnte mir ja schon vorstellen, dass der JIT-Cache so eine Art Inventar-Liste/Tabelle bereits gechacheter Funktionen bilden könnte, die das vermeiden könnte ... aber bin da wirklich ohne WIssen ;-)

                    EDIT: Das "Experimentieren" ist wirklich schwer, da Javascript ja Garbage Collective ist. Wenn ein Script gestoppt wird, ist der belegte Speicher nicht instantan frei, sondern irgendwann kommt der Garbage Collector vorbei, und räumt auf ...

                    Jedenfalls zuckt die Speichernutzung von "javascript.0" im Instanzen-Fenster nicht besonders stark, wenn man ein Script mit SetState() startet.

                    bf571c6a-bb46-412b-96fb-7108fc3c61a1-grafik.png

                    Nutze untenstehendes Script, um da ein "Zucken" bei der Speichernutzung zu provozieren...
                    Einmal kommentiere ich die erste Variante des async Calls aus, Einmal die zweite...
                    Kein messbarer Unterschied in der Speichernutzung ...
                    Für tiefere Diagnose müsste ich mich erst einlesen

                    /*
                    on({ id: [].concat(['0_userdata.0.Puls-Test']), change: 'ne' }, async (obj) => {
                      let value = obj.state.val;
                      let oldValue = obj.oldState.val;
                    });
                    */
                    on({ id: [].concat(['0_userdata.0.Puls-Test']), change: 'ne' }, async (obj) => {
                      let value = obj.state.val;
                      let oldValue = obj.oldState.val;
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                      setState('0_userdata.0.example_state' , true, true);
                      setState('0_userdata.0.example_state' , false, true);
                    });
                    
                    

                    Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
                    Virtualization : unprivileged lxc container (debian 13) on Proxmox 9.1.5)
                    Linux pve 6.17.9-1-pve
                    6 GByte RAM für den Container
                    Fritzbox 6591 FW 8.20 (Vodafone Leih-Box)
                    Remote-Access über Wireguard der Fritzbox

                    MartinPM 1 Antwort Letzte Antwort
                    0
                    • MartinPM MartinP

                      @paul53 said in "Steuere" und "Aktualisiere" Vermeiden?:

                      @martinp sagte: Das heißt, dass der JIT bei jedem Auffinden eines Funktionsaufrufes einen neuen Eintrag mit der expandierten entsprechenden Funktion im Code-Cache anlegt?

                      Davon gehe ich aus, dass Funktionen keine Unterprogramme (Stichwort: Linker), sondern Makros sind, die eingefügt werden.

                      Wäre wirklich mal ein paar Experimente wert - bin das nicht gewohnt, so in Dunkeln zu tappen ;-)

                      Ich könnte mir ja schon vorstellen, dass der JIT-Cache so eine Art Inventar-Liste/Tabelle bereits gechacheter Funktionen bilden könnte, die das vermeiden könnte ... aber bin da wirklich ohne WIssen ;-)

                      EDIT: Das "Experimentieren" ist wirklich schwer, da Javascript ja Garbage Collective ist. Wenn ein Script gestoppt wird, ist der belegte Speicher nicht instantan frei, sondern irgendwann kommt der Garbage Collector vorbei, und räumt auf ...

                      Jedenfalls zuckt die Speichernutzung von "javascript.0" im Instanzen-Fenster nicht besonders stark, wenn man ein Script mit SetState() startet.

                      bf571c6a-bb46-412b-96fb-7108fc3c61a1-grafik.png

                      Nutze untenstehendes Script, um da ein "Zucken" bei der Speichernutzung zu provozieren...
                      Einmal kommentiere ich die erste Variante des async Calls aus, Einmal die zweite...
                      Kein messbarer Unterschied in der Speichernutzung ...
                      Für tiefere Diagnose müsste ich mich erst einlesen

                      /*
                      on({ id: [].concat(['0_userdata.0.Puls-Test']), change: 'ne' }, async (obj) => {
                        let value = obj.state.val;
                        let oldValue = obj.oldState.val;
                      });
                      */
                      on({ id: [].concat(['0_userdata.0.Puls-Test']), change: 'ne' }, async (obj) => {
                        let value = obj.state.val;
                        let oldValue = obj.oldState.val;
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                        setState('0_userdata.0.example_state' , true, true);
                        setState('0_userdata.0.example_state' , false, true);
                      });
                      
                      
                      MartinPM Online
                      MartinPM Online
                      MartinP
                      schrieb am zuletzt editiert von
                      #10

                      Hier noch ein Link auf etwas Hintergrundinformation.

                      https://dev.to/_staticvoid/node-js-under-the-hood-10-compiler-optimizations-5dol

                      "In Line Expansion" scheint ein Sonderfall zu sein. Wäre die Frage, WARUM man das forcieren sollte. Der Regelfall scheinen wirklich Funktionsaufrufe mit Stack und allem Pipapo, wie in fast allen anderen Programmiersprachen auch zu sein...

                      Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
                      Virtualization : unprivileged lxc container (debian 13) on Proxmox 9.1.5)
                      Linux pve 6.17.9-1-pve
                      6 GByte RAM für den Container
                      Fritzbox 6591 FW 8.20 (Vodafone Leih-Box)
                      Remote-Access über Wireguard der Fritzbox

                      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

                      663

                      Online

                      32.6k

                      Benutzer

                      82.3k

                      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