This commit adds subtree memoization to Dioxus.
Subtree memoization is basically a compile-time step that drastically
reduces the amount of work the diffing engine needs to do at runtime by
extracting non-changing nodes out into a static "template." Templates
are then understood by the various renderers in the ecosystem as a
faster way of rendering the same items.
For example, in the web, templates are simply a set of DOM Nodes created
once and then cloned later. This is the same pattern frameworks like Lithtml
and SolidJS use to achieve near-perfect performance.
Subtree memoization adds an additional level of complexity to Dioxus. The RSX
macro needs to be much smarter to identify changing/nonchanging nodes and
generate a mapping between the Template and its runtime counterparts.
This commit represents a working starter point for this work, adding support
for templates for the web, desktop, liveview, ssr, and native-core renderers.
In the future we will try to shrink code generation, generally improve
performance, and simplify our implementation.
* chore: dont use prebuilt builder pattern for configuring desktop
* chore: use regular config pattern for web
* Chore: update docs too
* chore: clean up some warnings
* minor formatting
* Internationalization: move guide to en folder and preserve its history. (#494)
* chore: move guide to en folder
* docs: add english as language
* merged conf resolved
* chore: remove outdated docs
* chore: use taffy dimension directly
* Add PT-BR translations (#456)
* Translate final.md, hello_world.md, README.md, ROADMAP.md and SUMMARY.md
* Translatation complete
* Internationalization: move guide to en folder and preserve its history. (#494)
* Clean files and build mdBook with localization feature
* Rebase, remove leftovers and check book builds for every language: ✅
Co-authored-by: Jon Kelley <jkelleyrtp@gmail.com>
* Remove argument from `use_hook` closure (#496)
Also; update docs for said function
* chore: prevent reference from being uploaded
Co-authored-by: Altug Sahin <altugsahin@gmail.com>
Co-authored-by: Jon Kelley <jkelleyrtp@gmail.com>
Co-authored-by: Breno Rocha <66398400+amindWalker@users.noreply.github.com>
Co-authored-by: Reinis Mazeiks <rMazeiks@users.noreply.github.com>
Co-authored-by: = <evanalmloff@gmail.com>
* Fix typo - wrong example for "stopping propagation" section
* Move `lib.rs` in guide back to `src`
* Make sure tests get run when guide is updated (there's examples in the guide to check for compilation errors)
* Translate final.md, hello_world.md, README.md, ROADMAP.md and SUMMARY.md
* Translatation complete
* Internationalization: move guide to en folder and preserve its history. (#494)
* Clean files and build mdBook with localization feature
* Rebase, remove leftovers and check book builds for every language: ✅
Co-authored-by: Jon Kelley <jkelleyrtp@gmail.com>
* feat: use synchronous router design
* feat: function to get router out of dom
* chore: restructure workspace to use renderers as packages, not features
* Move getting started to Guide
* Clean up summary and getting started
* Shorten intro by moving stuff to individual platform docs
* Make intro even shorter, summarize features
* Further cleanup; move development-related docs to separate section
* Make `guide` a crate. Turn code samples into examples so that we can check if they compile
* Rewrite "Describing the UI":
* Focus on RSX syntax (interactivity covered in later chapters); make sure samples are tested; concise language
* Move some "special attribute" samples to the `examples` directory
* Simplify introduction to components
* Simplify introduction to component props
* Document Prop features; add code samples
* Simplify component children docs
* Interactivity: better introduction to events
* Hooks: better introduction
* Remove outdated doc
* Introducs use_ref
* Simplify User Input chapter
* Document event handler props
* Meme editor example
* Meme editor walkthrough
* Add dark mode example
* Guide for context; dark mode example
* Guide: custom hooks
* Guide: conditional rendering
* Guide: rendering lists
* Guide: rendering lists + keys
* Move remaining infor from Reference to guide
* Delete reference book
Fixing this warning when I try to compile
warning: function `App` should have a snake case name
--> src/main.rs:7:4
|
7 | fn App(cx: Scope) -> Element {
| ^^^ help: convert the identifier to snake case: `app`
|
= note: `#[warn(non_snake_case)]` on by default
Also changing edition from 2018 to 2021
What was there was an abomination that would not behave at all properly.
The changes I’ve made are extremely conservative. Myself, I’d get rid of
the <html>, <head>, </head>, <body>, </body> and </html> lines as
superfluous, and remove the space inside the div, which I certainly hope
isn’t load-bearing.