Slide 1

Slide 1 text

Blazor WebAssembly Performance Optimierung in .NET 5 Patrick Jahr @jahr_patrick Architekt

Slide 2

Slide 2 text

Hello, it’s me. Patrick Jahr Architekt @ Thinktecture AG E-Mail: [email protected] Twitter: @jahr_patrick Slides: https://thinktecture.com/patrick-jahr Blazor WebAssembly Performance Optimierung in .NET 5 Patrick Jahr

Slide 3

Slide 3 text

Motivation Render Prozess Komponenten Events Listen Resumé Blazor WebAssembly Performance Optimierung in .NET 5 P T

Slide 4

Slide 4 text

- Stockende UI - Keine Reaktion nach einem Klick auf einen Button - Lange „unsichtbare“ Ladezeiten → Nur was sich flüssig bedienen lässt, nutzen Anwender auch gerne Blazor WebAssembly Performance Optimierung in .NET 5 Motivation

Slide 5

Slide 5 text

DEMO Blazor WebAssembly Forms in Action

Slide 6

Slide 6 text

Blazor WebAssembly Performance Optimierung in .NET 5 Motivation Render Prozess Komponenten Events Listen Resumé

Slide 7

Slide 7 text

- Initialisierung - Änderung von Parameter des Parent - Parameter der Komponente sich ändern - Aufruf von StateHasChanged() - Nach jedem Event wie z.B. @onclick oder @oninput Blazor WebAssembly Performance Optimierung in .NET 5 Wann wird eine Komponente gerendert?

Slide 8

Slide 8 text

Blazor WebAssembly Performance Optimierung in .NET 5 Erstes Rendern? || ShouldRender() Render Component OnAfterRender/ OnAfterRenderAsync Render tree wird erstellt und an den DOM gesendet DOM Update Rendern wird beendet Nein Ja 1 2a 2b 3 4

Slide 9

Slide 9 text

Blazor WebAssembly Performance Optimierung in .NET 5 Motivation Render Prozess Komponenten Events Listen Resumé P

Slide 10

Slide 10 text

- ShouldRender prüft ob eine Komponente gerendert werden soll - Methode der Basisklasse ComponentBase - Default Wert true - Optimierung - Nutzen von primitiven Typen wie string, int oder bool bei Parametern - ShouldRender überschreiben Blazor WebAssembly Performance Optimierung in .NET 5 Komponente

Slide 11

Slide 11 text

DEMO Blazor WebAssembly Forms in Action

Slide 12

Slide 12 text

Blazor WebAssembly Performance Optimierung in .NET 5 Motivation Render Prozess Komponenten Events Listen Resumé

Slide 13

Slide 13 text

Blazor WebAssembly Forms in Action Erstes Rendern? || ShouldRender() DOM Event oninput, onclick, onblur,... Event Handler ausführen Render Component OnAfterRender/ OnAfterRenderAsync Render tree wird erstellt und an den DOM gesendet DOM Update Rendern wird beendet Nein Ja 1 2 3 4a 4b 5 6

Slide 14

Slide 14 text

- Bei jedem Event wird die Methode HandleEventAsync des Interface IHandleEvent in der Basisklasse ComponentBase aufgerufen - Optimierung - Interface IHandleEvent in der Komponenten Klasse implementieren - Einsatz der Hilfsklasse EventUtils, die von Microsoft angeboten wird - Hinweis: Die Hilfsklasse muss dem Projekt selbst hinzugefügt werden EventUtils: https://docs.microsoft.com/de-de/aspnet/core/blazor/webassembly-performance-best-practices?view=aspnetcore-5.0#avoid-rerendering-after-handling-events- without-state-changes Blazor WebAssembly Performance Optimierung in .NET 5 Events

Slide 15

Slide 15 text

- Wird das Re-Rendering benötigt nach einem Event: - Debounce Events - Throttle Events - Slice Events Blazor WebAssembly Performance Optimierung in .NET 5 Events

Slide 16

Slide 16 text

DEMO Blazor WebAssembly Forms in Action

Slide 17

Slide 17 text

Blazor WebAssembly Performance Optimierung in .NET 5 Motivation Render Prozess Komponenten Events Listen Resumé

Slide 18

Slide 18 text

- Müssen alle Elemente im DOM geladen sein? - Wie schnell komm ich an meine Daten für die Liste? - Optimierung: Virtualize Komponente - Nur der Sichtbereich wird geladen - Lazy Loading - Ladeanimation Blazor WebAssembly Performance Optimierung in .NET 5 Listen

Slide 19

Slide 19 text

DEMO Blazor WebAssembly Forms in Action

Slide 20

Slide 20 text

Blazor WebAssembly Performance Optimierung in .NET 5 Motivation Render Prozess Komponenten Events Listen Resumé

Slide 21

Slide 21 text

- Muss meine Komponente wirklich immer gerendert werden? - Soll ein Event immer ein Re-Rendering triggern? - Listenoptimierung durch Virtualize-Komponente Blazor WebAssembly Performance Optimierung in .NET 5 Resumé

Slide 22

Slide 22 text

Vielen Dank für Ihre Aufmerksamkeit! Patrick Jahr @jahr_patrick [email protected]