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. (Erledigt) Optimierung Scripte hinsichtlich RAM und CPU

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.6k

(Erledigt) Optimierung Scripte hinsichtlich RAM und CPU

Geplant Angeheftet Gesperrt Verschoben JavaScript
4 Beiträge 2 Kommentatoren 439 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.
  • U Online
    U Online
    uwe72
    schrieb am zuletzt editiert von uwe72
    #1

    Ich habe sehr viele TypeScript-Scripte und stoße da an Limits was das Thema RAM und CPU angeht.

    Ich habe auch einige global-Scripte (welche ja dann in jedes Common-Script reinkopiert wird), benötige diese, da ich redundantfreien Code schreiben möchte. Diverse Funktionen werden in mehreren common-Scripten verwendet und möchte die Funktionen eben nur 1x schreiben. Leider wird beim Kopieren von global-->common nicht einmal die JavaScript-Instanz berücksichtigt. Wird einfach kopiert, instanzübergreifend.

    Meine Fragen sind:

    1. Gibt es nicht doch eine Möglichkeit die Inhalte der global-Scripte in ein externes Script (Datei im Filesystem) abzulegen und in den Common-Scripten über import/requires einzubinden, eben dann nur in den Scripten wo man sie tatsächlich benötigt? Also so wie man es bei eine OOP machen würde. Denke aber auch innherlab der ioBroker-Adapter wird so gearbeitet
    2. Kann man sonst was optimieren/falsch machen bei der Verwendung von Triggern, Variablen,....
    3. Viele kleine besser als weniger große Scripte? Ich liebe es eher viele kleinere zu nehmen um mehr Struktur zu haben.
    4. Gibt es sonst noch Tipps, welche man beachten sollte um RAM/CPU zu schonen?

    DANKE EUCH!

    T 1 Antwort Letzte Antwort
    0
    • U uwe72

      Ich habe sehr viele TypeScript-Scripte und stoße da an Limits was das Thema RAM und CPU angeht.

      Ich habe auch einige global-Scripte (welche ja dann in jedes Common-Script reinkopiert wird), benötige diese, da ich redundantfreien Code schreiben möchte. Diverse Funktionen werden in mehreren common-Scripten verwendet und möchte die Funktionen eben nur 1x schreiben. Leider wird beim Kopieren von global-->common nicht einmal die JavaScript-Instanz berücksichtigt. Wird einfach kopiert, instanzübergreifend.

      Meine Fragen sind:

      1. Gibt es nicht doch eine Möglichkeit die Inhalte der global-Scripte in ein externes Script (Datei im Filesystem) abzulegen und in den Common-Scripten über import/requires einzubinden, eben dann nur in den Scripten wo man sie tatsächlich benötigt? Also so wie man es bei eine OOP machen würde. Denke aber auch innherlab der ioBroker-Adapter wird so gearbeitet
      2. Kann man sonst was optimieren/falsch machen bei der Verwendung von Triggern, Variablen,....
      3. Viele kleine besser als weniger große Scripte? Ich liebe es eher viele kleinere zu nehmen um mehr Struktur zu haben.
      4. Gibt es sonst noch Tipps, welche man beachten sollte um RAM/CPU zu schonen?

      DANKE EUCH!

      T Nicht stören
      T Nicht stören
      ticaki
      schrieb am zuletzt editiert von ticaki
      #2

      @uwe72

      Zu 1. haben wir doch schon diskutiert. Paul hat hier ein einfaches Beispiel wie man js importiert: https://forum.iobroker.net/post/1220037 in dem Post darunter hab ich unseren Topic verlinkt.

      zu 2. du kannst Trigger durch Verwendung von change und val soweit einschränken das du keine unnötigen Aufrufe hast.

      zu 3. Große Skripte verbrauchen insgesamt weniger Speicher wenn ich das richtig sehe. Wäre ja auch nachvollziehbar, weil die jeweils in ihrer eigenen Sandbox laufen.

      Bildschirmfoto 2024-12-13 um 01.03.37.png
      Adapter 1. 36 Skripte TS & JS
      Adapter 2. 1 Skript TS läuft alle x Minuten und überprüft alle anderen Skripte/Adapter/Geräte
      Adapter 3. 4 * nspanel TS (13000 Zeilen)

      zu 4. Ram ist solange du es nicht mit endlos Arrays vollschreibst wurscht. Ein Aufruf von getState() kostet CPU - zwischenspeichern in einer Variable Ram, nimm das wovon du mehr hast :)

      Aber tips zum optimieren zu geben ohne den Code zu kennen, da gibts sprüche mit Glaskugeln und so :)

      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

      Spenden

      U 1 Antwort Letzte Antwort
      1
      • T ticaki

        @uwe72

        Zu 1. haben wir doch schon diskutiert. Paul hat hier ein einfaches Beispiel wie man js importiert: https://forum.iobroker.net/post/1220037 in dem Post darunter hab ich unseren Topic verlinkt.

        zu 2. du kannst Trigger durch Verwendung von change und val soweit einschränken das du keine unnötigen Aufrufe hast.

        zu 3. Große Skripte verbrauchen insgesamt weniger Speicher wenn ich das richtig sehe. Wäre ja auch nachvollziehbar, weil die jeweils in ihrer eigenen Sandbox laufen.

        Bildschirmfoto 2024-12-13 um 01.03.37.png
        Adapter 1. 36 Skripte TS & JS
        Adapter 2. 1 Skript TS läuft alle x Minuten und überprüft alle anderen Skripte/Adapter/Geräte
        Adapter 3. 4 * nspanel TS (13000 Zeilen)

        zu 4. Ram ist solange du es nicht mit endlos Arrays vollschreibst wurscht. Ein Aufruf von getState() kostet CPU - zwischenspeichern in einer Variable Ram, nimm das wovon du mehr hast :)

        Aber tips zum optimieren zu geben ohne den Code zu kennen, da gibts sprüche mit Glaskugeln und so :)

        U Online
        U Online
        uwe72
        schrieb am zuletzt editiert von uwe72
        #3

        zu 2. du kannst Trigger durch Verwendung von change und val soweit einschränken das du keine unnötigen Aufrufe hast.

        Ich habe oft so was. Möchte benachrichtigt werden, wenn sich der Wert ändert.

        on({id: "iot.0.services.custom_geofency_uwe", change: 'any'},  obj => {    
            var value = obj.state.val;
            var oldValue = obj.oldState.val;
            if (value != oldValue) {
                // do something
            }
        });
        

        Du meinst dann wäre es besser so zu lösen?

        on({id: "iot.0.services.custom_geofency_uwe", change: 'ne'},  obj => {    
            // do something
        });
        
        U 1 Antwort Letzte Antwort
        1
        • U uwe72

          zu 2. du kannst Trigger durch Verwendung von change und val soweit einschränken das du keine unnötigen Aufrufe hast.

          Ich habe oft so was. Möchte benachrichtigt werden, wenn sich der Wert ändert.

          on({id: "iot.0.services.custom_geofency_uwe", change: 'any'},  obj => {    
              var value = obj.state.val;
              var oldValue = obj.oldState.val;
              if (value != oldValue) {
                  // do something
              }
          });
          

          Du meinst dann wäre es besser so zu lösen?

          on({id: "iot.0.services.custom_geofency_uwe", change: 'ne'},  obj => {    
              // do something
          });
          
          U Online
          U Online
          uwe72
          schrieb am zuletzt editiert von
          #4

          zu 1.

          Habe für mich mal eine funktionierende Lösung in einem neuen Post aufgeschrieben:
          https://forum.iobroker.net/topic/78632/info-auslagerung-von-scripte-aus-global-aufs-filesystem

          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

          755

          Online

          32.5k

          Benutzer

          81.6k

          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