NEWS
Funktionen in gemeinsame Module auslagern
-
@andreios sagte in Funktionen in gemeinsame Module auslagern:
Was bedeutet das denn nun wirklich?
Das bedeutet u.a., dass bei Änderungen an einem globalen Script die Instanz(en) neu gestartet werden müssen.
Das "reinkopieren" passiert ja nur beim Start eines Script. Und da ja alle Scripte betroffen sind, müssen die auch alle neu gestartet werden. -
@codierknecht sagte in Funktionen in gemeinsame Module auslagern:
@paul53 sagte in Funktionen in gemeinsame Module auslagern:
Man kann Funktionen, die in mehreren Skripten verwendet werden sollen, in Skripten unter der Gruppe "global" (Expertenmodus!) deklarieren
@micky
Dabei ist allerdings zu beachten, dass die dort deklarierten Funktionen in alle anderen Scripte reinkopiert werden.
Das bedeutet: Wird in einem Script unter "global" etwas geändert, wird die Instanz neu gestartet.
Und wenn man dort Mist baut, schießt man sich auch schnell mal was ab.Das Ganze sollte also mit Vorsicht genossen werden.
OK, das bedeutet dann ja erst einmal, dass die Skripte, die in global liegen, mit geladen werden, so wie z.B. bei C, wenn ich einen Header-Datei mit #include lade, aber ausgeführt wird da dann ja noch nichts. Belegt halt Speicher.
Wenn dann in einem global-Skript ein Fehler ist, hat der dann ja auch keine Auswirkung auf Skripte, wo die Routine nicht genutzt wird, oder?
Wenn ich dann in einem Skript eine Routine aus einem global-Skript aufrufe, dann muss bei einer Änderung im global-Skript doch auch nur das die Funktion benutzt, oder liege ich da falsch?
Oder muss tatsächlich die Javaskript-Instanz neu gestartet werden?Fragen über Fragen?
Danke!
-
@micky sagte in Funktionen in gemeinsame Module auslagern:
Wenn dann in einem global-Skript ein Fehler ist, hat der dann ja auch keine Auswirkung auf Skripte, wo die Routine nicht genutzt wird, oder?
Wenn der Code der in Global liegt in Funktionen strukturiert ist ja.
Wenn ich dann in einem Skript eine Routine aus einem global-Skript aufrufe, dann muss bei einer Änderung im global-Skript doch auch nur das die Funktion benutzt, oder liege ich da falsch?
Da bin ich mir nicht sicher was du meinst. Funktionen die global sind, können von jedem Skript aufgerufen werden.
Oder muss tatsächlich die Javaskript-Instanz neu gestartet werden?
Die Javascript Instanz startet neu, wenn ein Skript das global liegt geändert wird.
-
@ticaki sagte in Funktionen in gemeinsame Module auslagern:
Wenn ich dann in einem Skript eine Routine aus einem global-Skript aufrufe, dann muss bei einer Änderung im global-Skript doch auch nur das die Funktion benutzt, oder liege ich da falsch?
Da bin ich mir nicht sicher was du meinst. Funktionen die global sind, können von jedem Skript aufgerufen werden.
Ups, man sollte nochmal lesen, bevor man abschickt. Ich meinte, dass bei Änderungen im globalen Skript nur die Skripte neu gestartet werden müssen, die eine Funktion aus dem globalen Skript benutzen.
Wenn aber die Javascript-Instanz bei Änderungen am globalen Skript sowieso neu startet, stellt sich die Frage sowieso nicht mehr, da dann ja automatisch alle Skripte neu starten.Oder muss tatsächlich die Javaskript-Instanz neu gestartet werden?
Die Javascript Instanz startet neu, wenn ein Skript das global liegt geändert wird.
In meinem aktuellen Fall geht es um eine Funktion, die bestimmt, ob Tag oder Nacht ist und dabei nicht nur Sunset und Sunrise, sondern ein paar Toleranzen beachtet. Diese Funktion habe ich bisher in mehreren Skripten benutzt und immer oben hinein kopiert.
Das macht dann ja global für mich.
Ich werde es die Tage ausprobieren und, wenn keine Fragen mehr auftreten, den Thread auf gelöst setzen.Danke für die Hilfe!
-
so wie z.B. bei C, wenn ich einen Header-Datei mit #include
Das ist schon etwas platzsparender, da die Header-Datei in der Regel nur Definitionen zu Klassen-/Datenstrukturen und Funktionsprototypen usw. enthält, und es einen Linker gibt, der ggfs. selektiv gewisse Dinge herauspickt, wenn eine größere Bibliothek gelinkt wird ... Der fehlt aber bei Javascript, da interpretierende Sprache...
-
@micky sagte in Funktionen in gemeinsame Module auslagern:
In meinem aktuellen Fall geht es um eine Funktion, die bestimmt, ob Tag oder Nacht ist und dabei nicht nur Sunset und Sunrise, sondern ein paar Toleranzen beachtet
Ohne diese "Toleranzen" würde vielleicht der System-Datenpunkt
isDayTime
unterjavascript.0
ausreichen.
Kommt halt im Einzelfall darauf an, wie genau das denn jetzt sein muss. -
@codierknecht Es könnte ja jemand auf die Idee kommen, Javascript-Datenpunkte als Interface für Funktionsaufrufe zu verwenden.
Man schreibt die Aufrufparameter der Funktion z. B. als JSON in einen Datenpunkt, Die Funktion wird durch das Aktualisieren des Datenpunktes getriggert, und liefert ihr Ergebnis in einem anderen Datenpunkt wieder ab ...
Der Overhead wird da aber nicht zu verachten sein
-
@martinp
Macht aber weniger Zicken als 'ne globale Funktion.
Hat was ... -
@codierknecht said in Funktionen in gemeinsame Module auslagern:
@martinp
Macht aber weniger Zicken als 'ne globale Funktion.
Hat was ...Reentrancy muss man wohl auch nicht beachten vermute ich? Zumindest solange man innerhalb einer Javascript-Instanz bleibt ...
-
@martinp sagte in Funktionen in gemeinsame Module auslagern:
@codierknecht
Man schreibt die Aufrufparameter der FunktionWieso das... geht doch viel umständlicher
new Function('val1', 'val2', `${getState('meine.umwerfende.Funktion.als.string').val}`)(daten1, daten2);
Darfst halte keine getState usw. drin benutzen.
Abgesehen davon, die Javascript Instanze startet unabhängig von deinen Wünschen neu, wenn ein globales Skript geändert wurde. Falls das nicht klar war.
-