Scripts nur laden, wenn sie gebraucht werden?

Begonnen von betateilchen, 27 Oktober 2015, 15:04:12

Vorheriges Thema - Nächstes Thema

betateilchen

(http://up.picr.de/23526416ot.png)

Tut das denn not?


  • colorpicker - brauch ich nicht
  • fbcalllist - brauch ich nicht
  • knob - brauch ich nicht
  • readings(Group|History) - brauch ich nicht
  • sortable = ???
  • uzsu = ???

Kann man solchen Kram nicht "nur dann laden, wenn er auch wirklich gebraucht wird" und nicht zwingend?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

Sehr gerne.
Jetzt musst nur sagen, woran FHEMWEB es erkennen soll, ob du es brauchst.
Und das moeglichst einfach und effizient.

Markus Bloch

#2
Liese sich das nicht in fhemweb.js lösen? Es müsste nur wissen, welche Widgets nachladbar sind.

in FW_replaceWidgets() müsste man halt vorher prüfen ob das Widget bereits registriert ist, wenn nicht, und es ist nachladbar, dann per XHR nachladen.

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

betateilchen

Zitat von: rudolfkoenig am 27 Oktober 2015, 15:20:02
Jetzt musst nur sagen, woran FHEMWEB es erkennen soll, ob du es brauchst.

Gegenfrage: Warum muss FHEMWEB das überhaupt selbst erkennen?

Wenn ein Benutzer einen knob haben will, soll er das Skript in das entsprechende Attribut der Webinstanz eintragen. Genau wie ich das für den codemirror oder für das autocompleteoff auch mache. Genau dafür wurde dieses Attribut doch eingeführt.

Auf Verdacht einfach mal alles zu laden, was VIELLEICHT gebraucht werden könnte, halte ich jedenfalls für die fragwürdigste aller möglichen Lösungen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

ZitatGegenfrage: Warum muss FHEMWEB das überhaupt selbst erkennen?
Damit Module knob/colorpicker/etc ohne Benutzer-Interaktion anbieten koennen.

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Markus Bloch

Zitat von: betateilchen am 27 Oktober 2015, 16:52:18
Warum?

Damit es sofort funktioniert ohne erst in die Doku schauen zu müssen, was man noch machen muss um ein Modul vernünftig zum laufen zu bekommen. Reduziert den Frustfaktor bei Newbies ungemein ;-)
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

betateilchen

Mich als Nicht-Newbie frustiert der gesamte Overhead, der da produziert wird. Und dieser Frust ist dauerhaft, im Gegensatz zu dem Frust der Newbies, der sich im Laufe des Lernprozesses durchaus reduziert.

Warum kann man in FHEMWEB nicht modulseitig eine Standardliste solcher Skripte im Attribut "JavaScripts" hinterlegen und ich kann dann die Skripte, die ich nicht brauche, einfach aus der Liste rausschmeißen, wenn ich das möchte?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

justme1968

das sollte auf jeden Fall automatisch gehen ohne das ein anwender noch etwas konfigurieren muss.

nur laden wenn gebraucht müsste eigentlich möglich sein.

andererseits sollte das laden aber auch nicht wirklich problematisch sein wenn das cachen funktioniert.

wo genau siehst du frustrierenden overhead? lässt sich der in zahlen ausdrücken?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Wuppi68

Designvorschlag:

Jedes Modul registriert seine AddOns selber :-)
Jetzt auf nem I3 und primär Homematic - kein Support für cfg Editierer

Support heißt nicht wenn die Frau zu Ihrem Mann sagt: Geh mal bitte zum Frauenarzt, ich habe Bauchschmerzen

betateilchen

Zitat von: justme1968 am 27 Oktober 2015, 17:48:15
lässt sich der in zahlen ausdrücken?

42

Zitat von: Wuppi68 am 27 Oktober 2015, 17:49:55
Jedes Modul registriert seine AddOns selber :-)

Im Prinzip eine gute Idee, aber nicht zielführend. Beispiel colorpicker: Nur weil ein Modul den anbietet, heißt das noch lange nicht, dass ich als Benutzer den auch nutzen will.

Noch schlimmer die fbcalllist - die braucht echt nur eine Minderheit und auch die Anzahl möglicher Module, die darauf aufsetzen, ist furchtbar überschaubar. Aber trotzdem wird das Script grundsätzlich geladen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Markus Bloch

Zitat von: betateilchen am 27 Oktober 2015, 18:19:04
Noch schlimmer die fbcalllist - die braucht echt nur eine Minderheit und auch die Anzahl möglicher Module, die darauf aufsetzen, ist furchtbar überschaubar. Aber trotzdem wird das Script grundsätzlich geladen.

Hätte ich auch gerne anders gemacht. ;-)

Ich habe gerade mal geschaut, inwiefern man umkompliziert die Skripte nachladen kann. Das Problem ist, dass man nicht mit Sicherheit kann welche Skripte nachgeladen werden müssen.

fhemweb_fbcalllist.js, fhemweb_uzsu.js, fhemweb_knob.js, ... lassen sich im FW_replaceWidgets() erkennen, wenn als 1. Value die entsprechenden Widgetnamen stehen, bei fhemweb_readingsGroup.js funktioniert das nicht.

Man kann aber nicht erkennen innerhalb von FW_replaceWidgets(), ob das erste Argument für ein Kommando/Attribut ein Widget ist, oder nur einfach ein normaler Wert für die Dropdown List ist.

Einfacher Versuch:


function
FW_replaceWidgets(parent)
{
  parent.find("div.fhemWidget").each(function() {
    var dev=$(this).attr("dev");
    var cmd=$(this).attr("cmd");
    var rd=$(this).attr("reading");
    var params = cmd.split(" ");
    var type=$(this).attr("type");
    if( type == undefined ) type = "set";
    var args =  $(this).attr("arg").split(",");
    loadScript("pgm2/fhemweb_"+args[0]+".js", function () {
      FW_replaceWidget(this, dev, args,
        $(this).attr("current"), rd, params[0], params.slice(1),
        function(arg) {
          FW_cmd(FW_root+"?cmd="+type+" "+dev+
                  (params[0]=="state" ? "":" "+params[0])+" "+arg+"&XHR=1");
        });
     });
  });
}


Führt aktuell aber auch zu:

fhemweb.js:215 19:03:27.426 Loading script /fhem/pgm2/fhemweb_on.js
fhemweb.js:215 19:03:27.432 Loading script /fhem/pgm2/fhemweb_slider.js
fhemweb.js:215 19:03:27.433 Loading script /fhem/pgm2/fhemweb_colorpicker.js
fhemweb.js:215 19:03:27.436 Loading script /fhem/pgm2/fhemweb_audio.js
fhemweb.js:215 19:03:27.438 Loading script /fhem/pgm2/fhemweb_forward.js
fhemweb.js:215 19:03:27.439 Loading script /fhem/pgm2/fhemweb_readings.js
fhemweb.js:215 19:03:27.441 Loading script /fhem/pgm2/fhemweb_1.js
fhemweb.js:215 19:03:27.444 Loading script /fhem/pgm2/fhemweb_component.js


Viele Grüße

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

rapster

Zitat von: justme1968 am 27 Oktober 2015, 17:48:15
lässt sich der in zahlen ausdrücken?

(http://forum.fhem.de/index.php?action=dlattach;topic=43080.0;attach=39372;image)
Allerdings mit Komprimierung bei der Übertragung...

viegener

Als relativer newbie kann ich nur bestätigen, dass es hilft, wenn zumindest FHEMWeb "out-of-the-box" direkt funktioniert und auch Dinge wie colorpicker laufen (auch wenn ich speziell das nicht benutze). Mir ist klar, dass wir kein plug-and-play-System  ;) anstreben, aber die Einarbeitungshürden höher zu setzen, sollte nicht das Ziel sein. Ich bin eher ein Fan von Vereinfachung, denn wir haben auch viele Nicht-IT-Leute und profitieren auch von der Breite der Benutzerbasis.

Generell wäre es gut zu wissen, wie gross der overhead ist der erzeugt wird (Speicher vor allem?), damit eine Basis existiert ob es ein Problem gibt, dass gelöst werden sollte? Bei mir sind es 478k (nur js) im pgm2-Verzeichnis und die am Anfang genannten machen keine 40k aus.

Johannes
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

rudolfkoenig

Was auch zu bedenken ist: ich kenne keine einfache Methode, die mit loadScript nachgeladenen Module zu erneuern, ohne den kompletten Cache zu entfernen. Fuer diese Dateien funktioniert Shift-Ctrl-R nicht.

Wie waere mit einem JavaScriptExclude Attribut?