Christoph Schmalhofer
BOB 2021
Fuhrparkmanagement Software seit 2004
Seit 2019:
React Material-UI
Apollo GraphQL Client
React Hooks
IO Performance unkritisch
große Wertebereiche (Select Box, Autocomplete) problematisch
Formulare mit vielen komplexen Controls werden langsam
Performance Charakteristik
Optimierungsmöglichkeiten
Production Build
React Dev Tools
O(viewsize)
Form State (React Hook Form)
funktionale Berechnung der View (VDOM)
State (und Props) Änderungen sind in der Renderphase nicht zulässig
Standard Mode: Kind Komponenten werden auch berechnet
React.memo Higher Order Component
Default: Vergleich aller Props
explizite Vergleichsfunktion möglich
Alternativ: React.useMemo (Dependency Array)
für Komponenten und allgemeine Berechnungen geeignet
Berechnung ohne Seiteneffekte
Key Attribut für Listeneinträge
möglichst schlanke Props (Kübelpattern vermeiden)
Objektliterale vermeiden
useCallback oder useReducer für Funktionsobjekte
automatische Memoisierung immer wieder mal diskutiert
React State
Store / Session
Fine Grained Reactivity
React kann Kompontenrendering flexibel steuern
Suspense und Transition
Priorisierung, Bail out, Wiederholung
keine unkontrollierten Seiteneffekte
Abramov: Now, if algebraic effects were coming to JS I think we’d happily change Hooks to use them.
| UI Runtime (React) | Language Runtime |
|---|---|
| function component | function |
| React Context | dynamic scope |
| Fiber | Stack frame |
| Component Instance | delimited continuation (multi shot) |
| React State | state effect |
| React Runtime | Effect Handler |
| VDOM Diffing | Partial Evalulation |
Serverkomponenten laufen auf dem Server (nicht nur initiales Rendering)
können asynchron zum Client übertragen/serialisiert werden
Optimierung der Datenübertragung zum Client
können Daten an Clientkomponenten durchreichen
benötigen Concurrent Mode