Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. (ERLEDIGT!) TypeScript, viele common/global Scripte --> CPU

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    (ERLEDIGT!) TypeScript, viele common/global Scripte --> CPU

    This topic has been deleted. Only users with topic management privileges can see it.
    • OliverIO
      OliverIO @uwe72 last edited by

      @uwe72
      Das allerbeste wäre alles in ein lokales NPM Paket zu legen und das dann in die Konfiguration des Java Skript Adapters zu packen.
      Allerdings weiß ich nicht, ob die Konfigurationsseite mit lokalen NPM Pfaden umgehen kann.
      https://www.stefanjudis.com/today-i-learned/npm-install-supports-local-packages/

      U 1 Reply Last reply Reply Quote 1
      • G
        GombersIOB @Jey Cee last edited by

        @jey-cee said in TypeScript, viele common/global Scripte --> CPU am Anschlag:

        die müssen auch alle neu Kompiliert werden wenn sie in Typescript geschrieben sind

        Hieße doch, sie in JavaScripts zu transformieren könnte eine Lösung sein?

        Jey Cee OliverIO 2 Replies Last reply Reply Quote 0
        • Jey Cee
          Jey Cee Developer @GombersIOB last edited by

          @gombersiob das würde zwar die Last reduzieren, ja, aber nur bedingt da dennoch alle Scripte neu gestartet werden.

          G 1 Reply Last reply Reply Quote 0
          • G
            GombersIOB @Jey Cee last edited by

            @jey-cee said in TypeScript, viele common/global Scripte --> CPU am Anschlag:

            da dennoch alle Scripte neu gestartet werden

            Nur zu meinem Verständnis:
            Jedesmal wenn ich eine Script (common) verändere, werden alle anderen Scripte auch neu gestartet? Ich verstehe, wenn ein global geändert wird, dass das notwendig ist, aber beim common?
            Aber wie dem auch sei. Ich könnte mir vorstellen, dass das Kompilieren einen Großteil des CPU-Aufwands bedeutet. Wenn er also (ich schieße einfach mal aus dem Bauch eine Zahl) 50% spart, würde ihm das vermutlich helfen?

            G 1 Reply Last reply Reply Quote 0
            • G
              GombersIOB @GombersIOB last edited by

              @gombersiob
              Sorry, habe den ersten Beitrag jetzt nochmal gelesen. Es ging ja tatsächlich um das Ändern der globalen Scripte.

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

                @gombersiob sagte in TypeScript, viele common/global Scripte --> CPU am Anschlag:

                @jey-cee said in TypeScript, viele common/global Scripte --> CPU am Anschlag:

                die müssen auch alle neu Kompiliert werden wenn sie in Typescript geschrieben sind

                Hieße doch, sie in JavaScripts zu transformieren könnte eine Lösung sein?

                Jein, wird es durch den typescript transpiler ja sowieso
                Vorteil ist, das Pakete für sich kompiliert werden und erst neu kompiliert werden. Wenn es Änderungen gibt.

                Ja, die Iobroker Skripte müssen neu gestartet werden.
                Dann liegt aber der Performance schlucker nicht im kompilieren sondern an den Aktivitäten der Skripte selbst und bei jedem Neustart one Änderung oder nicht, geht die Performance weg.

                Soweit ich es verstanden habe, werden die Common und global Skripte einfach vor jedes Skript kopiert.

                Homoran G 2 Replies Last reply Reply Quote 0
                • Homoran
                  Homoran Global Moderator Administrators @OliverIO last edited by

                  @oliverio sagte in TypeScript, viele common/global Scripte --> CPU am Anschlag:

                  werden die Common und global Skripte einfach vor jedes Skript kopiert.

                  doch nicht common!

                  1 Reply Last reply Reply Quote 1
                  • G
                    GombersIOB @OliverIO last edited by

                    @oliverio said in TypeScript, viele common/global Scripte --> CPU am Anschlag:

                    Ja, die Iobroker Skripte müssen neu gestartet werden.
                    Dann liegt aber der Performance schlucker nicht im kompilieren sondern an den Aktivitäten der Skripte selbst und bei jedem Neustart one Änderung oder nicht, geht die Performance weg.

                    Aber die Scripte machen doch in der Regel nichts beim Neustart. Meine haben eigentlich alle einen Trigger, die laufen nicht einfach so los.

                    Soweit ich es verstanden habe, werden die Common und global Skripte einfach vor jedes Skript kopiert.

                    Die "Common"-Scripte sind ja die laufenden Scripte. Es werden, wie ich hier lerne die "Global"-Scripte vor jedes Common-Script kopiert.

                    Homoran 2 Replies Last reply Reply Quote 0
                    • Homoran
                      Homoran Global Moderator Administrators @GombersIOB last edited by

                      @gombersiob sagte in TypeScript, viele common/global Scripte --> CPU am Anschlag:

                      Aber die Scripte machen doch in der Regel nichts beim Neustart

                      doch! sie weden kompiliert

                      Armilar 1 Reply Last reply Reply Quote 0
                      • Homoran
                        Homoran Global Moderator Administrators @GombersIOB last edited by

                        @gombersiob sagte in TypeScript, viele common/global Scripte --> CPU am Anschlag:

                        die "Global"-Scripte vor jedes Common-Script kopiert.

                        auch vor alle Skripte, die im Wurzelverzeichnis liegen

                        paul53 1 Reply Last reply Reply Quote 0
                        • paul53
                          paul53 @Homoran last edited by paul53

                          @homoran sagte: auch vor alle Skripte, die im Wurzelverzeichnis liegen

                          ... oder in jeder anderen Gruppe als "global".

                          1 Reply Last reply Reply Quote 1
                          • Armilar
                            Armilar Most Active Forum Testing @Homoran last edited by

                            @homoran sagte in TypeScript, viele common/global Scripte --> CPU am Anschlag:

                            Aber die Scripte machen doch in der Regel nichts beim Neustart

                            doch! sie weden kompiliert

                            Aber nur wenn es Änderungen gibt...

                            609df1d8-c90a-48aa-812b-d20d8c289793-image.png

                            Ansonsten wird die Version aus dem Cache genutzt.

                            paul53 1 Reply Last reply Reply Quote 0
                            • paul53
                              paul53 @Armilar last edited by

                              @armilar sagte: Ansonsten wird die Version aus dem Cache genutzt.

                              Das betrifft anscheinend den Precompiler TypeScript --> Javascript.
                              Skripte werden bei jedem Neustart kompiliert, da beim Stoppen der RAM freigegeben wurde.

                              U 1 Reply Last reply Reply Quote 1
                              • U
                                uwe72 @paul53 last edited by uwe72

                                Ich habe aus ca. 40 (kleineren) Common-Scripte ca. 25 (größere) gemacht und von 8 global Scripten auf 5 reduziert.

                                Ich laufe nun zumindest nicht mehr in das CPU-Problem rein. Das Speichern nach dem Ändern eines Global-Script dauert nun ca. 5 Minuten.

                                Übrigens, das Ändern von Common-Scripten ist nie ein Problem, auch vor der "Optimierung" nicht.

                                U 1 Reply Last reply Reply Quote 0
                                • U
                                  uwe72 @uwe72 last edited by uwe72

                                  Generell mache ich sehr viel mit Scripten und stoße aktuell an Grenzen mit den Rahmenbedingungen:

                                  • TypeScript
                                  • ca. 40 common-Scripte
                                  • ca. 5-8 global-Scripte (mit teilweise bis zu 3000 Zeilen Code)

                                  Ich spiele in einer anderen ioBroker-Umgebung mit dem Thema "messageTo" herum mit dem Ziel ganz auf global-Scripte verzichten zu können.

                                  Ist ein wenig ein konstruiertes Beispiel, aber ganze Klassen(-inhalte) bekommt man nicht verschickt, oder? Sondern vermutlich nur "primitive" Datentypen oder vermutlich json?

                                  export class TestPosition {
                                      private threeQuarter:   number;
                                      private half:         number;
                                      private oneQuarter:     number;
                                  
                                      constructor(threeQuarter: number, half: number, oneQuarter: number) {
                                          this.threeQuarter = threeQuarter;
                                          this.half = half;
                                          this.oneQuarter = oneQuarter;
                                      }
                                  
                                      public getThreeQuarter() : number {
                                          return this.threeQuarter;
                                      }
                                      public getHalf() : number {
                                          return this.half;
                                      }
                                      public getOneQuarter() : number {
                                          return this.oneQuarter;
                                      }
                                  }
                                  
                                  //var data = "uwe";
                                  var data = new TestPosition(10,20,30);
                                  
                                  messageTo({ instance: 'javascript.0', script: 'script.js.common.Test2', message: 'message1' }, data, {timeout: 1000}, result =>
                                      console.log(JSON.stringify(result)));
                                  
                                  //@ts-expect-error
                                  onMessage('message1', (data, callback) => {
                                      console.log(`UWE !!! Received data: ${data}`); callback({ result: Date.now() });
                                      var my = data.getThreeQuarter();
                                      log("YIPIEEEEEEEEEEEEEEEEEE: " + my);
                                  });
                                  
                                  Error in callback: TypeError: data.getThreeQuarter is not a function
                                  
                                  paul53 T 2 Replies Last reply Reply Quote 0
                                  • paul53
                                    paul53 @uwe72 last edited by

                                    @uwe72 sagte: ca. 5-8 global-Scripte (mit teilweise bis zu 3000 Zeilen Code)

                                    Das ist eindeutig viel zu viel. Dafür sind "globale" Skripte nicht vorgesehen.
                                    So viele häufig verwendete eigene Funktionen?

                                    U 1 Reply Last reply Reply Quote 0
                                    • U
                                      uwe72 @paul53 last edited by uwe72

                                      Bitte löschen.

                                      paul53 1 Reply Last reply Reply Quote 0
                                      • paul53
                                        paul53 @uwe72 last edited by

                                        @uwe72
                                        Ist die Struktur der ioBroker-Objekte inkl. Aufzählungen so schlecht, dass man eigene globale Datenstrukturen benötigt?

                                        U 1 Reply Last reply Reply Quote 0
                                        • T
                                          ticaki Developer @uwe72 last edited by

                                          @uwe72
                                          Hab das da zwar noch nicht probiert, aber als ich das mit Funktionen ausprobiert habe, hat es nicht funktioniert. Dann wird es IMHO wohl auch nicht mit Klassen gehen.

                                          1 Reply Last reply Reply Quote 1
                                          • U
                                            uwe72 @paul53 last edited by uwe72

                                            @paul53 Hab das Beispiel noch ausgetauscht. Es ist nicht nur Datenstruktur, sondern auch viel Logik für generische Anwendungszwecke. Z.B. generische Alexasteuerung über IOT-Adapter, d.h. man gibt nur Alexanamen an und alles andere funktioniert automatisch (Registrierung der Datenpunkte im iot-Adapter, Lampen ein/aus,...).

                                            Kann dennoch drüber nachdenken wie ich es schaffe, das aus dem global-Bereich rauszubekommen, zumindest große Teile davon nach common zu verschieben.

                                            Ob, man mein Beispiel nun gut oder schlecht findet, wollte ich nur darauf hinweisen, dass ich eben mit den Rahmenbedingungen an Grenzen stoße.

                                            Vielleicht stoßen andere mit "sinnvollen" Anwendungszwecken eben auch mal an diese Grenzen.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            1.1k
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            10
                                            55
                                            3073
                                            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