mirror of
https://github.com/DioxusLabs/dioxus
synced 2024-12-24 19:43:10 +00:00
047ed1e553
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.
90 lines
2.1 KiB
TOML
90 lines
2.1 KiB
TOML
[package]
|
|
name = "dioxus-web"
|
|
version = "0.2.1"
|
|
authors = ["Jonathan Kelley"]
|
|
edition = "2018"
|
|
description = "Dioxus VirtualDOM renderer for the web browser using websys"
|
|
license = "MIT/Apache-2.0"
|
|
repository = "https://github.com/DioxusLabs/dioxus/"
|
|
homepage = "https://dioxuslabs.com"
|
|
documentation = "https://dioxuslabs.com"
|
|
keywords = ["dom", "ui", "gui", "react", "wasm"]
|
|
|
|
[dependencies]
|
|
dioxus-core = { path = "../core", version = "^0.2.1", features = ["serialize"] }
|
|
dioxus-html = { path = "../html", version = "^0.2.1", features = ["wasm-bind"] }
|
|
dioxus-interpreter-js = { path = "../interpreter", version = "^0.2.1", features = [
|
|
"web"
|
|
] }
|
|
|
|
js-sys = "0.3.56"
|
|
wasm-bindgen = { version = "0.2.79", features = ["enable-interning"] }
|
|
wasm-bindgen-futures = "0.4.29"
|
|
log = { version = "0.4.14" }
|
|
fxhash = "0.2.1"
|
|
console_error_panic_hook = { version = "0.1.7", optional = true }
|
|
once_cell = "1.9.0"
|
|
anyhow = "1.0.53"
|
|
gloo-timers = { version = "0.2.3", features = ["futures"] }
|
|
futures-util = "0.3.19"
|
|
smallstr = "0.2.0"
|
|
serde-wasm-bindgen = "0.4.2"
|
|
futures-channel = "0.3.21"
|
|
serde_json = { version = "1.0" }
|
|
|
|
[dependencies.web-sys]
|
|
version = "0.3.56"
|
|
features = [
|
|
"Comment",
|
|
"Attr",
|
|
"Document",
|
|
"Element",
|
|
"CssStyleDeclaration",
|
|
"HtmlElement",
|
|
"HtmlInputElement",
|
|
"HtmlSelectElement",
|
|
"HtmlTextAreaElement",
|
|
"HtmlFormElement",
|
|
"EventTarget",
|
|
"HtmlCollection",
|
|
"Node",
|
|
"NodeList",
|
|
"Text",
|
|
"Window",
|
|
"Event",
|
|
"MouseEvent",
|
|
"InputEvent",
|
|
"ClipboardEvent",
|
|
"NamedNodeMap",
|
|
"KeyboardEvent",
|
|
"TouchEvent",
|
|
"WheelEvent",
|
|
"AnimationEvent",
|
|
"TransitionEvent",
|
|
"PointerEvent",
|
|
"FocusEvent",
|
|
"CompositionEvent",
|
|
"ClipboardEvent",
|
|
"DocumentType",
|
|
"CharacterData",
|
|
"SvgElement",
|
|
"SvgAnimatedString",
|
|
"HtmlOptionElement",
|
|
"IdleDeadline",
|
|
"WebSocket",
|
|
"Location",
|
|
"MessageEvent",
|
|
"console",
|
|
]
|
|
|
|
[features]
|
|
default = ["panic_hook"]
|
|
panic_hook = ["console_error_panic_hook"]
|
|
hot-reload = ["dioxus/hot-reload"]
|
|
|
|
|
|
[dev-dependencies]
|
|
dioxus = { path = "../dioxus" }
|
|
wasm-bindgen-test = "0.3.29"
|
|
dioxus-ssr = { path = "../ssr" }
|
|
wasm-logger = "0.2.0"
|