Tablet UI reagiert nach Umstellung auf Pagebutton nur noch langsam

Begonnen von stefanru, 27 Januar 2019, 16:56:55

Vorheriges Thema - Nächstes Thema

stefanru

Hi,

ich habe von pagetab auf pagebutton umgestellt.
Auf dem PC in Chrome richtig cool. Die Seiten gehen super schnell auf.

Auf meine Tablets leider nicht.
Ich habe schon etwas analysiert. Es scheint an der schieren Anzahl der Parameter zu liegen.
Lade ich mit prefetch steht am Schluss da 44,7 Sekunden for 280 Parameters. Danach ist das UI nicht mehr bedienbar.
Lade ich ohne Prefetch geht es erstmal. Mit jeder Seite die ich öffne kommen Parameter dazu und das UI wird langsamer.
Habe ich alle pagebuttons einmal geöffnet ist das UI auch wieder unbedienbar.

Gibt es eine Möglichkeit die Parameter einzuschränken für das Tablet UI?
Habe den parameter longpoll_filter gesehen. Ist mir aber nicht ganz klar ob und wie ich ihn dafür einsetzen kann.

Im der Development Console vom Chrome sieht das updaten jetzt nicht so schlimm aus. Aber scheinbar ist die reine Anzahl für das Tablet zu viel (Speicher?).
Irgendjemand eine Idee?

P.S.:
Was mir als Grund auffällt sind eventuell die widget_chart.update Einbindungen, die kommen immer 3 mal, ich habe die Charts aber nur als popup definiert
Könnte ich die irgendwie rausnehmen aus der Aktualisierung?:

3fhem-tablet-ui.min.js:1 Function: widget_chart.update > Update triggered with: WetterWalterAussen:temperature
fhem-tablet-ui.min.js:1 call "plugins.update" done for "WetterWalterAussen:temperature"
3fhem-tablet-ui.min.js:1 Function: widget_chart.update > Update triggered with: Heizoel_Abstands_Sensor:Liter
fhem-tablet-ui.min.js:1 call "plugins.update" done for "Heizoel_Abstands_Sensor:Liter"
3fhem-tablet-ui.min.js:1 Function: widget_chart.update > Update triggered with: Heizoel_Abstands_Sensor:Reichweite7Tage
fhem-tablet-ui.min.js:1 call "plugins.update" done for "Heizoel_Abstands_Sensor:Reichweite7Tage"
3fhem-tablet-ui.min.js:1 Function: widget_chart.update > Update triggered with: Heizoel_Abstands_Sensor:statLogWertHour
fhem-tablet-ui.min.js:1 call "plugins.update" done for "Heizoel_Abstands_Sensor:statLogWertHour"
3fhem-tablet-ui.min.js:1 Function: widget_chart.update > Update triggered with: Heizoel_Abstands_Sensor:statLogWertDay
fhem-tablet-ui.min.js:1 call "plugins.update" done for "Heizoel_Abstands_Sensor:statLogWertDay"
3fhem-tablet-ui.min.js:1 Function: widget_chart.update > Update triggered with: Heizoel_Abstands_Sensor:statLogWertMonth
fhem-tablet-ui.min.js:1 call "plugins.update" done for "Heizoel_Abstands_Sensor:statLogWertMonth"
3fhem-tablet-ui.min.js:1 Function: widget_chart.update > Update triggered with: Heizoel_Abstands_Sensor:statLogWertYear
fhem-tablet-ui.min.js:1 call "plugins.update" done for "Heizoel_Abstands_Sensor:statLogWertYear"
3fhem-tablet-ui.min.js:1 Function: widget_chart.update > Update triggered with: Heizoel_Abstands_Sensor:Liter
fhem-tablet-ui.min.js:1 call "plugins.update" done for "Heizoel_Abstands_Sensor:Liter"
3fhem-tablet-ui.min.js:1 Function: widget_chart.update > Update triggered with: Heizoel_Abstands_Sensor:Reichweite7Tage
fhem-tablet-ui.min.js:1 call "plugins.update" done for "Heizoel_Abstands_Sensor:Reichweite7Tage"
3fhem-tablet-ui.min.js:1 Function: widget_chart.update > Update triggered with: newestpic:STATE
fhem-tablet-ui.min.js:1 call "plugins.update" done for "newestpic:STATE"
3fhem-tablet-ui.min.js:1 Function: widget_chart.update > Update triggered with: Regenwasser_Abstands_Sensor:Liter
fhem-tablet-ui.min.js:1 call "plugins.update" done for "Regenwasser_Abstands_Sensor:Liter"
3fhem-tablet-ui.min.js:1 Function: widget_chart.update > Update triggered with: Regenwasser_Abstands_Sensor:Reichweite7Tage
fhem-tablet-ui.min.js:1 call "plugins.update" done for "Regenwasser_Abstands_Sensor:Reichweite7Tage"
3fhem-tablet-ui.min.js:1 Function: widget_chart.update > Update triggered with: Regenwasser_Abstands_Sensor:statLogWertHour
fhem-tablet-ui.min.js:1 call "plugins.update" done for "Regenwasser_Abstands_Sensor:statLogWertHour"
3fhem-tablet-ui.min.js:1 Function: widget_chart.update > Update triggered with: Regenwasser_Abstands_Sensor:statLogWertDay
fhem-tablet-ui.min.js:1 call "plugins.update" done for "Regenwasser_Abstands_Sensor:statLogWertDay"
3fhem-tablet-ui.min.js:1 Function: widget_chart.update > Update triggered with: Regenwasser_Abstands_Sensor:statLogWertMonth
fhem-tablet-ui.min.js:1 call "plugins.update" done for "Regenwasser_Abstands_Sensor:statLogWertMonth"
3fhem-tablet-ui.min.js:1 Function: widget_chart.update > Update triggered with: Regenwasser_Abstands_Sensor:statLogWertYear
fhem-tablet-ui.min.js:1 call "plugins.update" done for "Regenwasser_Abstands_Sensor:statLogWertYear"
3fhem-tablet-ui.min.js:1 Function: widget_chart.update > Update triggered with: Regenwasser_Abstands_Sensor:Liter
fhem-tablet-ui.min.js:1 call "plugins.update" done for "Regenwasser_Abstands_Sensor:Liter"
3fhem-tablet-ui.min.js:1 Function: widget_chart.update > Update triggered with: Regenwasser_Abstands_Sensor:Reichweite7Tage
fhem-tablet-ui.min.js:1 call "plugins.update" done for "Regenwasser_Abstands_Sensor:Reichweite7Tage"
3fhem-tablet-ui.min.js:1 Function: widget_chart.update > Update triggered with: Heizoel_Abstands_Sensor:Liter
fhem-tablet-ui.min.js:1 call "plugins.update" done for "Heizoel_Abstands_Sensor:Liter"
3fhem-tablet-ui.min.js:1 Function: widget_chart.update > Update triggered with: Heizoel_Abstands_Sensor:Reichweite7Tage
fhem-tablet-ui.min.js:1 call "plugins.update" done for "Heizoel_Abstands_Sensor:Reichweite7Tage"
3fhem-tablet-ui.min.js:1 Function: widget_chart.update > Update triggered with: Heizoel_Abstands_Sensor:statLogWertHour



Finde ich eh etwas seltsam, habe die als svgplot eingebunden und ein data-refresh="300" angegeben.

<div data-type="svgplot"
        data-device="SVG_ESPAbstand2_1"
        data-gplotfile="SVG_ESPAbstand2_1"
        data-logdevice="logdb"
        data-logfile="HISTORY"
        data-refresh="300" class="" style="background-color: #FFFFFF;"></div>
</li>


P.P.S:
Wenn ich mir das log genau anschaue sieht es doch sehr seltsam aus. Warum gibt es für alle events auch ein Chart update? Auch bei events ganz ohne chart auf der Seite?
Wie z.B. für das reading meines Webcam Bildes:

Function: widget_chart.update > Update triggered with: newestpic:STATE


Ok liegt wohl an der definition des charts. Ich lese aus logdb. Jedes schreiben verursacht wohl ein reload:

<div data-type="chart"
data-logdevice="logdb"
data-logfile="history"
data-columnspec='["meineWetterstation:Temp-outside"]'
data-style='["ftui l5fill"]'
data-ptype='["lines"]'
data-uaxis='["primary"]'
data-legend='["Temperatur außen (°C)"]'
data-yunit=" °C"
data-ytext="Temperature außen (°C)"
data-minvalue="auto"
data-maxvalue="auto"
data-yunit_sec=" "
data-ytext_sec=" "
data-height="350"
data-yticks="auto"
data-minvalue_sec="auto"
data-maxvalue_sec="auto"
data-nofulldays="true"
data-cursorgroup="1"
data-scrollgroup="1"
data-xticks="auto"
data-crosshair="true"
data-showlegend ="true"
style = "font-size:900; font-weight:900;" >
</div>


Hab jetzt noch wie in der Doku angegeben ein data-device angegeben, hilft leider nicht.
Jeder Event triggert ein update der charts? Ist da was kaputt?

data-device="meineWetterstation"


Ich habe das Charts plugin mal rausgenommen. Damit sind die Console Ausgaben von dem Plugin auch verschwunden.
Trotzdem ist es nicht performanter geworden.

Könnte ich denke es liegt schon an der Anzahl der Parameter und das die updates bei Pagebutton nach dem alle Seiten geladen sind auch für alle im Hintergrund laufen.
Das scheint das Tablet doch zu überfordern.

Es wäre super wenn jemand eine Idee hat. sonst muss ich leider wieder zurück zu pagetab. Da ist aber die Ladezeit schon nicht schön.

Gruß und Danke,
Stefan


stefanru

Auch wenn das nicht mein Problem löst scheint es beim Chart Widget einen Fehler zu geben.
Zu mindest bei Benutzung beim logdb gibt es immer eine Aktualisierung sobald ein einziges reading auf der Seite aktualisiert wird.

Siehe:
Function: widget_chart.update > Update triggered with: newestpic:STATE

Das passiert auch wenn man das Deviceals Data-get mit angibt:
<div data-type="chart"
                                                data-device="meineWetterstation"
data-logdevice="logdb"
data-logfile="history"
data-columnspec='["meineWetterstation:Temp-outside"]'
data-style='["ftui l5fill"]'
data-ptype='["lines"]'
data-uaxis='["primary"]'
data-legend='["Temperatur außen (°C)"]'
data-yunit=" °C"
data-ytext="Temperature außen (°C)"
data-minvalue="auto"
data-maxvalue="auto"
data-yunit_sec=" "
data-ytext_sec=" "
data-height="350"
data-yticks="auto"
data-minvalue_sec="auto"
data-maxvalue_sec="auto"
data-nofulldays="true"
data-cursorgroup="1"
data-scrollgroup="1"
data-xticks="auto"
data-crosshair="true"
data-showlegend ="true"
style = "font-size:900; font-weight:900;" >
</div>

fruemmel

#2
Hallo Allerseits,

ich verzweifel auch gerade an der Performance meiner Android-Tablets in Verbindung mit pagebuttons. iPad mit Safari ist sehr schnell, PC sowieso.
Passend zu folgender Aussage

Zitat von: stefanru am 27 Januar 2019, 16:56:55
Auf dem PC in Chrome richtig cool. Die Seiten gehen super schnell auf.

Auf meine Tablets leider nicht.
Ich habe schon etwas analysiert. Es scheint an der schieren Anzahl der Parameter zu liegen.
Lade ich mit prefetch steht am Schluss da 44,7 Sekunden for 280 Parameters. Danach ist das UI nicht mehr bedienbar.
Lade ich ohne Prefetch geht es erstmal. Mit jeder Seite die ich öffne kommen Parameter dazu und das UI wird langsamer.
Habe ich alle pagebuttons einmal geöffnet ist das UI auch wieder unbedienbar.

habe ich nun etwas länger geforscht und folgendes gesehen:

Mit Debug=5 fällt auf, dass immer dann, wenn ein Pagebutton zum ersten Mal ausgelöst wird und die entsprechende Seite geladen wird, wird ein Full-Refresh ausgelöst wird. D. h., obwohl eine anderes Seite eingeblendet wird, werden alle (!) bisher genutzen Readings noch einmal abgerufen. Das ist m. E. der Hauptgrund für den langsamen (ersten) Seitenaufbau, insb. wenn man wie ich in der Hauptansicht schon viele Readings hat.

Kann jemand anders das auch nachvollziehen? Oder habe ich einen Fehler in meinen HTML-Dateien? Ich habe schon versucht, für Tests das Ganze stark zu reduzieren, das Verhalten bleibt aber.

Gruß Fruemmel

ekur

Hallo zusammen,

wie alt sind die Tablets? Ich hatte ähnliche Performanceprobleme bei meinem alten Tablet (Samsung 10.1 von 2014), dort musste ich alle Seiten mit Prefetch laden und habe dann jede Stunde automatisiert einen vollen Refresh gemacht.
Mit meinem aktuelle (Lenovo Tab M 10) werden die gleichen Seiten wesentlich performanter geladen, Seiten mit 150 Parametern werden in 1,1s bis 1,2s geladen ohne Prefetch. Ich führe das auf die bessere WLAN Anbindung sowie auch die bessere Performance zurück.
Ich habe übrigens auch alle fast Charts (Temperaturen und Luftfeuchte ) als Popups eingebunden, Daten werden aus dblog gezogen. Hier ist aber eher wichtig worauf die Datenbank läuft, auf dem Raspi früher war das immer eine zähe Sache, auch im Netzwerk.

Viele Grüße

ekur

FHEM 5.8 auf Intel NUC, Visualisierung TabletUI auf Lenovo Tab10, Datenlogging MySQL
CUL_HM  HM-CC-RT-DN, HM-RC, HM-LC-BL1-FM, HM-PBI-4-FM, HM-SEC-SD, HM-SEC-SCo
ZWave
OWDevice:DS1420,DS18B20 an Intel NUC

fruemmel

Ich teste derzeit mit einem Lenovo TB-X605L (ca. 2 Jahre alt). Nicht das Neueste, aber auch keine schlimme Gurke. Dennoch ist mein deutlich älteres iPad Air bei den Pagebuttons bis zu Faktor 5 schneller.

Auffällig ist vor allem, dass der Wechsel über die Pagebuttons nur auf dem Android so elend langsam ist. Auf PC und iPad geht das fast ohne Verzögerung, auf dem Android dauern vergleichbare Seiten 5-10 Sekunden. Das lässt sich aus meiner Sicht nicht mit der Geräteleistung erklären, zumal bei Vergleichstests mit eher überfüllten Internetseiten der Unterschied zwischen Android und iPad nur gering ist und somit die Netzwerkperformance eher ausscheidet.

Aber unabhängig davon verstehe ich nicht, warum FTUI beim ersten Wechsel auf eine Pagebutton-Seite ein Full-Refresh (start shortpoll) macht. Dabei werden anscheined immer alle Readings komplett abgerufen, die bisher seit Start von FTUI überhaupt angezeigt wurden. Zumindest lässt das die Debug-Anzeige vermuten (Full refresh done in <xx> sec for <yy> parameters). yy geht bei mir über 300 wenn ich alle pages anspringe (Startseite: 105).

ekur

Den Full Request zeigt mein FTUI auch wenn ich die Seiten erstmalig Wechsel, aber ich habe auch kein prefetch drin. Ich glaube FTUI zählt zwar die Parameter hoch, aber es erfolgt kein neuer Request auf die bereits geholten Parameter, den bei mir erfolgt der Request einer neuen Seite auch bei 300 Parametern mit Werten zwischen 0,1 und 0,3 Sekunden wenn wenig Parameter auf der neuen Seite sind.
FHEM 5.8 auf Intel NUC, Visualisierung TabletUI auf Lenovo Tab10, Datenlogging MySQL
CUL_HM  HM-CC-RT-DN, HM-RC, HM-LC-BL1-FM, HM-PBI-4-FM, HM-SEC-SD, HM-SEC-SCo
ZWave
OWDevice:DS1420,DS18B20 an Intel NUC