Related: #7341, #7226
For purely static HTML, instead of walking the node tree and claiming every node/text etc, hydration now uses the same innerHTML optimization technique for hydration compared to normal create. It uses a new data-svelte-h attribute which is added upon server side rendering containing a hash (computed at build time), and then comparing that hash in the client to ensure it's the same node. If the hash is the same, the whole child content is expected to be the same. If the hash is different, the whole child content is replaced with innerHTML.
---------
Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com>
Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com>
Co-authored-by: Simon Holthausen <simon.holthausen@vercel.com>
* start updating tests
* start implementing bitmask-based change tracking (#1943)
* oops
* fix some await block stuff
* slots
* reactive declarations
* component bindings etc
* start fixing slots
* fix store value invalidations
* slot stuff
* fixes
* fix
* fixes
* fix some slot stuff
* fix some invalidations
* fix if blocks
* fix a test
* destructuring in lets
* fix shadowing
* fix if block case
* all runtime tests passinfg
* almost all tests passing
* update tests
* never hoist writable vars in dev mode, fix debug statements
* beef up shadowing test
* always use renderer.reference
* fix sourcemaps
* ugh so close
* all tests passing. phase one complete, i guess
* add test for component with more than 31 dynamic values
* stable sort
* stable sort that preserves order
* linting
* failing test for bitmask overflow
* ok i think this is it
* lint
* rename changed to dirty, for more internal consistency
* update tests
* use bitwise comparison
* add comments... sort of
* update tests
* moar comments
* I don't know what happened to these tests