Um saubere Infos über die Performance der CometVisu zu bekommen habe ich gerade eine Instrumentierung eingebaut. Um diese zu Nutzen muss man an die URL den Parameter "profile" anhängen.
Wenn man das Ergebnis nicht auf der Console sehen möchte (z.B. auf mobilen Geräten), kann man dem Parameter noch den Wert hidden anhängen (also profile=hidden). Um dann den Wert zu sehen, muss man den JavaScript Befehl
ausführen.
(Da das auf mobilen Geräten natürlich auch doof ist, kann man sich leicht behelfen - man erweitert die Statusbar um <a href="javascript: profileCV('list')">Show Profile</a>.)
Um nun über Performance sprechen zu können, muss man erst mal definieren, was es da überhaupt für relevante Größen gibt und wo welcher Fokus liegt. Grob könnte man beispielsweise unterteilen in:
Hier sollte klar sein, dass 1.-3. unmittelbar aufeinander folgen und vom User unabhängig sind.
4. ist reine User-Interaktion und nur vom Browser abhängig.
5. und 6. braucht den Bus dazu.
Auch wenn ich versucht habe überall geschickte Algorithmen zu wählen, hatte ich bisher noch nicht viel Aufwand in Optimierungen gesteckt (ganz im Sinne von Knuth). Und Optimierungen ohne Messungen sind wertlos - daher das Commit zur Revision #2339
(wobei sich die Instrumentierung im wesentlichen auf 1.-3. bezieht)
Hintergrund: Meine Philosophie hinter der aktuellen Struktur war, dass ich Compile-Time vor Setup-Time und Setup-Time vor Run-Time bevorzuge. D.h. alles was man offline (also Compile-Time) lösen kann, wird dort gelöst. (Bei einer Online-App schwierig... Aber das wird zum einen im Build-Prozess durch das Minimizen gemacht, zum anderen mit dem Appcache, der als Nachteil uns somit beim Entwickeln nervt - aber dafür den Nutzern mit deutlich geringerer Datenübertragung hilft).
Und was wir zur Setup-Time (etwas 1. und v.a. 2.) machen können, machen wir dort. Um einfach keine Ressourcen bei 3. und 4. dafür verwenden zu müssen - daher laden wir nicht jede Seite neu, wie manche anderen Visus.
=> Wenn man nun irgendwo Performance Probleme spürt, bitte diese klar benennen (z.B. nach der obigen Liste). Und wenn es um eines der Themen 1., 2. oder 3. geht, dann bitte auch die Profiling-Instrumentierung nutzen um der Diskussion ein paar Fakten beizusteuern.
So, ich geht jetzt mal etwas 2. zu optimieren. Das braucht viel länger als nötig...
Wenn man das Ergebnis nicht auf der Console sehen möchte (z.B. auf mobilen Geräten), kann man dem Parameter noch den Wert hidden anhängen (also profile=hidden). Um dann den Wert zu sehen, muss man den JavaScript Befehl
Code:
profileCV('list')
(Da das auf mobilen Geräten natürlich auch doof ist, kann man sich leicht behelfen - man erweitert die Statusbar um <a href="javascript: profileCV('list')">Show Profile</a>.)
Um nun über Performance sprechen zu können, muss man erst mal definieren, was es da überhaupt für relevante Größen gibt und wo welcher Fokus liegt. Grob könnte man beispielsweise unterteilen in:
- Ladezeit - Seitenaufruf bis die (statischen) Daten intern vorliegen
- Aufbauzeit - bis die Struktur (Widgets) dargestellt sind, die dynamischen Werte vom Bus sind noch nicht vorhanden
- Darstellzeit - bis auch die Werte in den Widgets stehen
- Wechselzeit - Dauer vom Klick bis zur Darstellung der neuen Seite
- Sendezeit - Dauer vom User-Klick bis zum KNX Telegramm
- Updatezeit - Dauer vom KNX-Telegramm bis zur Darstellung des neuen Wertes im Widget
Hier sollte klar sein, dass 1.-3. unmittelbar aufeinander folgen und vom User unabhängig sind.
4. ist reine User-Interaktion und nur vom Browser abhängig.
5. und 6. braucht den Bus dazu.
Auch wenn ich versucht habe überall geschickte Algorithmen zu wählen, hatte ich bisher noch nicht viel Aufwand in Optimierungen gesteckt (ganz im Sinne von Knuth). Und Optimierungen ohne Messungen sind wertlos - daher das Commit zur Revision #2339

Hintergrund: Meine Philosophie hinter der aktuellen Struktur war, dass ich Compile-Time vor Setup-Time und Setup-Time vor Run-Time bevorzuge. D.h. alles was man offline (also Compile-Time) lösen kann, wird dort gelöst. (Bei einer Online-App schwierig... Aber das wird zum einen im Build-Prozess durch das Minimizen gemacht, zum anderen mit dem Appcache, der als Nachteil uns somit beim Entwickeln nervt - aber dafür den Nutzern mit deutlich geringerer Datenübertragung hilft).
Und was wir zur Setup-Time (etwas 1. und v.a. 2.) machen können, machen wir dort. Um einfach keine Ressourcen bei 3. und 4. dafür verwenden zu müssen - daher laden wir nicht jede Seite neu, wie manche anderen Visus.
=> Wenn man nun irgendwo Performance Probleme spürt, bitte diese klar benennen (z.B. nach der obigen Liste). Und wenn es um eines der Themen 1., 2. oder 3. geht, dann bitte auch die Profiling-Instrumentierung nutzen um der Diskussion ein paar Fakten beizusteuern.
So, ich geht jetzt mal etwas 2. zu optimieren. Das braucht viel länger als nötig...
Kommentar