NEWS
(Erledigt) Optimierung Scripte hinsichtlich RAM und CPU
-
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:
- 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
- Kann man sonst was optimieren/falsch machen bei der Verwendung von Triggern, Variablen,....
- Viele kleine besser als weniger große Scripte? Ich liebe es eher viele kleinere zu nehmen um mehr Struktur zu haben.
- Gibt es sonst noch Tipps, welche man beachten sollte um RAM/CPU zu schonen?
DANKE EUCH!
-
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.
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
-
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 });
-
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