Slide 1

Slide 1 text

Kevin Bridges Applied Software Technologies [email protected] @kevinast https://bit.ly/r-svelte slides, syllabus, REPL, and article!

Slide 2

Slide 2 text

https://bit.ly/r-svelte slides, syllabus, REPL, and article! Deep Dive Observer Perspective Mystery Improved Insight

Slide 3

Slide 3 text

Svelte Reactivity

Slide 4

Slide 4 text

user: { name: 'Jenny', phone: '867-5309', } Svelte Store Svelte Interpolation GreetUser.svelte Svelte Reactivity

Slide 5

Slide 5 text

GreetUser.svelte Svelte Reactivity

Slide 6

Slide 6 text

Svelte Reactivity snippet: any JavaScript expression that Svelte reactively manages and invokes when it's dependent state changes SideBar (Terminology) … 1. code-snippet found in tag, demarked with $: label 2. html-snippet found in html markup, delineated with curly braces: {…} … svelte refers to this as: “Reactive Statements” … svelte refers to this as: “Interpolation”

Slide 7

Slide 7 text

Svelte is soo KOOL!

Slide 8

Slide 8 text

Svelte is soo KOOL! 1975 1969 1995 2006 2010 2019 is Svelte soo KOOL?

Slide 9

Slide 9 text

Primarily it's unique approach to reactivity it's "baked right in" rather like "magic“! The Svelte compiler: 1) Isolates JS snippets … that provides our dynamics 2) Identifies dependencies 3) Monitors staleness 4) Re-executes as needed … updating DOM fragments GreetUser.svelte Svelte is soo KOOL! Dependents Is Stale? Re-executes updating

Slide 10

Slide 10 text

Exploring Reactivity

Slide 11

Slide 11 text

I want to see Svelte’s Reactivity IN ACTION ! In so doing: • become more grounded in Svelte philosophy • give insight on Svelte Heuristics … dependency monitoring … reactive triggers … DOM updates • better appreciate “all the reactivity around us” May just discover some detail we hadn’t considered! Exploring Reactivity

Slide 12

Slide 12 text

Diagnostic Logging Probes Original: With Logging Probes: Phone section fired Ex: When phone changes, logs: Exploring Reactivity

Slide 13

Slide 13 text

Diagnostic Logging Probes GreetUser.svelte Monitor Setup

Slide 14

Slide 14 text

Diagnostic Logging Probes GreetUser.svelte

Slide 15

Slide 15 text

Advanced Diagnostics logs are great, but … is there a way to Visualize Svelte's Reactivity "right in our app"?

Slide 16

Slide 16 text

ReflectiveCounter Advanced Diagnostics

Slide 17

Slide 17 text

ReflectiveCounter Usage: 1. Monitor a) html-snippet: b) code-snippet: 2. Report (common to both): Advanced Diagnostics

Slide 18

Slide 18 text

Advanced Diagnostic Probes Monitor Report Setup GreetUser.svelte

Slide 19

Slide 19 text

Advanced Diagnostic Probes GreetUser.svelte

Slide 20

Slide 20 text

Re-Render Analysis Unexpected Results!

Slide 21

Slide 21 text

Re-Render Analysis

Slide 22

Slide 22 text

Svelte Dependency Monitoring

Slide 23

Slide 23 text

Svelte Dependency Monitoring Object vs. Primitive Object: “Staleness Granularity” is the object (not individual content) Primitive: To be considered “Stale”, the value must change (Identity Semantics)

Slide 24

Slide 24 text

Is Svelte producing redundant and unnecessary re-renders of our DOM fragments? Re-Render Analysis

Slide 25

Slide 25 text

Svelte optimizes this! … discussed later Is Svelte producing redundant and unnecessary re-renders of our DOM fragments? Re-Render Analysis

Slide 26

Slide 26 text

App-Based Reactivity Tweaks

Slide 27

Slide 27 text

Basic Thrust: move reflexivity … • FROM: html-snippets • TO: code-snippets App-Based Reactivity Tweaks

Slide 28

Slide 28 text

Fine Tune Svelte's Dependency Management by Normalizing referenced state into primitive types App-Based Reactivity Tweaks 1. Finer Grained Dependency Management Before … GreetUser.svelte

Slide 29

Slide 29 text

Fine Tune Svelte's Dependency Management by Normalizing referenced state into primitive types App-Based Reactivity Tweaks 1. Finer Grained Dependency Management After … GreetUser.svelte

Slide 30

Slide 30 text

App-Based Reactivity Tweaks 1. Finer Grained Dependency Management GreetUser.svelte

Slide 31

Slide 31 text

Normalize conditional logic into primitive types App-Based Reactivity Tweaks 2. Preresolve Variations GreetUser.svelte Before …

Slide 32

Slide 32 text

Normalize conditional logic into primitive types App-Based Reactivity Tweaks 2. Preresolve Variations GreetUser.svelte After …

Slide 33

Slide 33 text

App-Based Reactivity Tweaks 2. Preresolve Variations GreetUser.svelte

Slide 34

Slide 34 text

Svelte's Re-Render Optimization Is Svelte producing redundant and unnecessary re-renders of our DOM fragments?

Slide 35

Slide 35 text

Is Svelte producing redundant and unnecessary re-renders of our DOM fragments? Could Svelte be optimizing this? it would make sense for two reasons: 1. Svelte's overly broad dependency granularity 2. App classification grouping - generating same result from multiple dependent values Svelte's Re-Render Optimization

Slide 36

Slide 36 text

Is Svelte producing redundant and unnecessary re-renders of our DOM fragments? Svelte's Re-Render Optimization Could Svelte be optimizing this? it would make sense for two reasons: 1. Svelte's overly broad dependency granularity 2. App classification grouping - generating same result from multiple dependent values

Slide 37

Slide 37 text

Svelte's reflexivity is very efficient! 1. The component's DOM representation is highly optimized 2. Dynamic content is gleaned from executing html-snippets 3. Reflection is triggered by dependent state changes 4. DOM updates occur only when the content has actually changed! Svelte's Re-Render Optimization

Slide 38

Slide 38 text

Svelte's reflexivity is very efficient! knowing what we know now Are App-Based Reactivity Tweaks Necessary? Seriously … was this really Necessary? Svelte's Re-Render Optimization

Slide 39

Slide 39 text

Svelte's reflexivity is very efficient! knowing what we know now Are App-Based Reactivity Tweaks Necessary? most likely only in rare cases consider this: 1. Large reflection/re-render count variance 2. High overhead in html-snippet execution 3. Same html-snippet needed in multiple places Better understand the finer characteristics of Svelte's reactivity! Seriously … was this really Necessary? Svelte's Re-Render Optimization

Slide 40

Slide 40 text

No content

Slide 41

Slide 41 text

Enhance ReflectiveCounter to provide BOTH: • reflexive counts -and- • re-render counts HINT … the invocation will change • FROM: • TO:

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

1.We can visualize Svelte's Reactivity (right in our app) • Diagnostic Logs: logically-ORed expressions • ReflectiveCounter: new utility belt 2.Dependent State and Reactivity • Primitives: trigger reactivity only when the value changes (based on identity semantics) • Objects: trigger reactivity per the entire object, not individual content 3.Svelte's reflexivity is very efficient! • The component's DOM representation is highly optimized • Dynamic content is gleaned from executing html-snippets • Reflection is triggered by dependent state changes • DOM updates occur only when the content has actually changed! 4.App can "fine tune" reactivity (as needed)

Slide 44

Slide 44 text

Kevin Bridges Applied Software Technologies [email protected] @kevinast https://bit.ly/r-svelte slides, syllabus, REPL, and article!