mirror of
https://github.com/DioxusLabs/dioxus
synced 2024-09-20 14:21:58 +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.
52 lines
No EOL
1.2 KiB
TOML
52 lines
No EOL
1.2 KiB
TOML
[package]
|
|
name = "dioxus-core"
|
|
version = "0.2.1"
|
|
authors = ["Jonathan Kelley"]
|
|
edition = "2018"
|
|
description = "Core functionality for Dioxus - a concurrent renderer-agnostic Virtual DOM for interactive user experiences"
|
|
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"]
|
|
|
|
|
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
|
|
|
[dependencies]
|
|
# Bumpalo is used as a micro heap backing each component
|
|
bumpalo = { version = "3.6", features = ["collections", "boxed"] }
|
|
|
|
# faster hashmaps
|
|
fxhash = "0.2"
|
|
|
|
# Used in diffing
|
|
longest-increasing-subsequence = "0.1.0"
|
|
|
|
# internall used
|
|
log = { version = "0.4" }
|
|
|
|
futures-util = { version = "0.3", default-features = false }
|
|
|
|
smallvec = "1.6"
|
|
|
|
slab = "0.4"
|
|
|
|
futures-channel = "0.3.21"
|
|
|
|
# used for noderefs
|
|
once_cell = "1.8"
|
|
|
|
indexmap = "1.7"
|
|
|
|
# Serialize the Edits for use in Webview/Liveview instances
|
|
serde = { version = "1", features = ["derive"], optional = true }
|
|
|
|
# todo: I want to get rid of this
|
|
backtrace = "0.3"
|
|
|
|
[features]
|
|
default = []
|
|
serialize = ["serde"]
|
|
debug_vdom = []
|
|
hot-reload = [] |