The current implementation of the Registry classes uses a naive Map as backing store, using composite keys (lists of strings). This has shown as a performance bottle-neck on older mobile devices which affects overall performance significantly as uiFor is in heavy use and it reads the registries constantly. This is especially impactful if the application uses composite element kinds with more than a few entries.
[x] Re-implement the basic Registry using a Trie / Compact Trie implementation with proper element-kind-specificity behavior
[x] Add a memoizer for registry chains which will remember lookups (also using the above trie).
The current implementation of the Registry classes uses a naive Map as backing store, using composite keys (lists of strings). This has shown as a performance bottle-neck on older mobile devices which affects overall performance significantly as
uiFor
is in heavy use and it reads the registries constantly. This is especially impactful if the application uses composite element kinds with more than a few entries.