* feat: wasm-split base implementation
* kinda sorta works with the cli
* okay great it actually works
* fix: cache busting for chunks
* cleaned up version
* it works with the router
* wip: migrate to a faster linear solution using id remapping
* add a good harness
* it works completely on the docsite
* the super tight build works too
* make parallelizable
* works on the docsite but not the harness
* light cleanups, fix for both harness and docsite
* make codegen smaller by extract some shared functions to prevent monos
* chunking works, but tbd on tuning heuristics
* extract used module
* wip: cleaning up module
* wip: much better understanding of how imports work
* fix the call graph
* working again...
* wip: thinking about ifuncs
* ifunc approach works
* yes the ifunc approach works!!
* it all works completely even with chunks
* small cleanups
* comments
* actually locate all of the symbols
* clean up final implementation
* clean up tomls, revert some mono changs
* clean up, add some more comments / docs in places
* hoist more packages
* clean up impl a bit more
* clean cli
* move harness to playwright
* update playwright
* extract codgen
* add lazy to components
* Add docs to split loader
* clippy
* typos
* clippy, don't generate splits if not on wasm
* whoops, const
* Typos and docs
* enable optimizations in ci
* add optimizations to ci
* add wasm-split router feature
* parallel playwright?
* fix no case check
* disable pre-compress... think that might be the issue
* better logging, no default pre-compress, caching of shared symbols
* Fix: compressing assets
* fix non-interactive logging for serve
* cache playwright even on failure, use the cli with optimizations
* fix prebuild
* fix playwright webserver
Improve inline docs
* improve incorrect event handler return error message
* Improve event handler docs
* document the eval functions
* document spawn and common spawn errors
* fix event handler docs
* add notes about how you use attributes and elements in rsx
* add doc aliases for attributes and events we rename
* add some more aliases for common search terms
* don't doc ignore any public examples in core
* don't ignore public doc examples in ssr
* don't ignore examples in the dioxus package readme
* add a warning when you launch without a renderer enabled
* fix some outdated element docs
* add a bunch of examples to resource
* add notes about desktop events
* add more docs for use_resource
* add on_unimplemented hint to Dependency
* fix some unresolved links
* add examples to each of the router traits
* add not implemented errors for router traits
* add an example to the routable trait
* expand rsx macro docs
* improve memo docs
* update the dioxus readme
* mention dioxus crate features in the docs
* fix a bunch of doc tests
* fix html doc tests
* fix router doc tests
* fix dioxus signals doc tests
* fix dioxus ssr doc tests
* fix use_future example in the hooks cheat sheet
* add a javascript alias for eval
* fix hook explanation values
* remove unused embed-doc-image dependency
* Add `#[component]` attribute + system for creating component attributes + other stuff
* Delete inlineprops.rs
* Update inline_props.rs
* Cargo fmt
* Fix clippy warnings and paths in props/mods.rs
* Include where clause in `#[inline_props]` output
* Allow Clippy type complexity in `LinkProps`
* Allow the type complexity lint for the entire link.rs file
* Remove snake_case -> PascalCase converter, but rather enforce PascalCase
Also:
- Put the second function inside the main one instead of besides it.
- Simplify
* Simplify type check lints so they don't return false positives
They will not always work, but they won't return any false positives, like for aliases. This is likely going to be replaced by a more polished Clippy-backed linting system.
* Fix#583
* Cargo fmt
* Add docs for `deserialize()` and remove useless comment
* Add `#[component]` to prelude
* Merge branch 'master' of https://github.com/tigerros/dioxus
* #[inline_props] is no more. Except in the docs folder, but that's going to be removed
* Remove docs folder
* Remove docs from workspace
* Resolve `DeserializerOutput` conversation
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.
* feat: use synchronous router design
* feat: function to get router out of dom
* chore: restructure workspace to use renderers as packages, not features