Morgens halb zehn in Deutschland: Der Puls Ihrer Anwender ist mittlerweile im dreistelligen Bereich und die ersten User denken ernsthaft darüber nach, den PC aus dem Fenster zu werfen. Ursache: Die von Ihnen entwickelte webbasierte App bremst die Nutzer stets an den entscheidenden Stellen aus. An produktives Arbeiten ist kaum noch zu denken und Überstunden stehen auf dem Tagesprogramm. Doch so weit muss es gar nicht kommen. Glückliche Anwender sind nur wenige Handgriffe entfernt. Und genau diese Handgriffe, wird Ihnen André Krämer in diesem Vortrag zeigen. Gemeinsam werden wir den Ursachen langsamer Web- und Mobile-Apps in den Bereichen JavaScript, CSS und Co. auf den Grund gehen und diese Schritt für Schritt eliminieren.
12. Antwortzeiten nach Jakob Nielsen
• 0 – 100 ms: Das System antwortet unverzüglich
Ich habe etwas gemacht
• 101 ms – 1000 ms: Benutzer bemerkt Verzögerung, bleibt im Fluss
Ich habe dem Computer befohlen etwas zu machen
• 1 s – 10 s: Der Benutzer fokussiert sich noch auf die Aufgabe
• > 10 Sekunden: Der Anwender bricht die Aufgabe ab
• Zusatzinfo: Animationen auf dem Bildschirm werden bei 60 Frames
pro Sekunde als flüssig wahrgenommen (1 Frame = 1000/60 =
16,6666 ms)
Angelehnt an: https://www.nngroup.com/articles/response-times-3-important-limits/
15. Interaktion < 100 msErste Darstellung < 1 s
Lebenszyklus einer Webanwendung
Seite und
Ressourcen
werden geladen
Seite wird
dargestellt
Benutzer
interagiert mit der
Seite
AJAX Anfrage
DOM
Manipulation
17. Initiale Darstellung / Critical Rendering Path
(CRP)
Netzwerk
HTML DOM
JavaScript
CSS CSSOM
Render Tree Layout Paint
18. Strategien zur Verbesserung des
Netzwerkzugriffes (Serverseitig / Grundwissen)
• Anzahl der übertragenen Bytes reduzieren
• Reduzieren Sie das DOM
• Verkleinern (Minify) der Dateien
• Komprimieren der Dateien (gzip)
• Nicht benötigte Styles / JavaScript entfernen
• CDNs einbinden
• Domains ohne Cookies für statische Inhalte nutzen
• Cache Header setzen ...
• Anzahl der Anfragen reduzieren
• Kombinieren von Dateien
25. CSS blockiert das Rendering!
Netzwerk
HTML DOM
CSS CSSOM
Render Tree
26. JavaScript blockiert das DOM Parsing und kann erst
ausgeführt werden, wenn das CSSOM vollständig
ist
Netzwerk
HTML DOM
JavaScript
CSS CSSOM
Render Tree
28. Caching
• Über Cache Header und ETags können Dateien im lokalen Browser
Cache vorgehalten werden
• Dieser kann jedoch durch den Benutzer (oder automatisch durch
den Browser) gelöscht werden
• Alternative, besonders für Single Page Applications:
• Caching über den HTML 5 Offline Modus
36. Zusammenfassung
• Verstehen Sie das Critical Path Rendering um die Zeit zur ersten
Darstellung Ihrer Website zu optimieren
• CSS und JavaScript blockieren das Rendering
• Überdenken Sie Ihre Caching Strategien
• Abstrahieren Sie Datenzugriffe um einfach Caching einbauen zu
können
• Liefern Sie nach Möglichkeit zunächst gecachte Inhalte und liefern
Sie die „Live Daten“ anschließend nach
• Rendern / Zeichnen Sie über Request-Animation Frame statt über
SetTimeout
38. Meine Dienstleistungen
• Schulungen
• ASP.NET / AngularJS / Aurelia
• Xamarin
• TX Text Control
• Unit Testing
• Team Foundation Server
• .NET Datenzugriff (Entity Framework, NHibernate, Micro O/R Mapper)
• Consulting
• Durchführung von Technologieworkshops
• Code- / Architekturreviews
• Analyse von managed Memory Leaks / Performancereviews
• Prototypenentwicklung
• Remote Entwickler-Support
• Projektbegleitendes Coaching
• Softwareentwicklung
• Mobile Apps (Android, iOS, Windows 10, Windows 8, Windows Phone)
• Entwicklung von Web-Anwendungen mit ASP.NET und AngularJS oder Aurelia
38andre@andrekraemer.de | http://andrekraemer.de | http://andrekraemer.de/blog | http://github.com/AndreKraemer
Selbständiger Softwareentwickler, Trainer und Berater
Partner im IT-Visions Expertennetzwerk
Microsoft MVP, TX Text Control MVP und Video Trainer bei video2brain
Langsam bedeutet dass der Benutzer unzufrieden ist. Das mag zwar nun sehr subjektiv klingen, allerdings gibt es recht objektiv messbare Wartezeiten ab denen ein Benutzer unzufrieden wird.
Beispiel: Sortieren einer Grid Spalte:
Ich habe die Spalte sortiert
Der Computer hat die Spalte sortiert
Etwas ist