Manage assets view is heavy: when scrolling through assets there are heavy lags (depends of device but on middle level device it's already visible). Or when check/uncheck token, - it may take 5+ seconds for check mark to appear/disappear.
If Manage Assets view opened then all the reset views on different from wallet tabs laggy too
Smooth experience when scrolling through Manage asseets view
From Galaxy J7 Android 8.1 video:
https://drive.google.com/file/d/1CiAY_j5FvRo73jnOzfUnD8d5AUAqFWAE/view?usp=sharing
Manage Assets viewit may take 5+ seconds for check mark to appear/disappear.
This I recognize and IMO seems relatively more urgent to fix. Tried on Samsung Galaxy s10e (Adroid 10) and Fairphone 2 (Android 7)
Looks like there's a transition going on when checking a box
@Ferossgp i know you were looking at this, any updates? thanks
@Ferossgp is this still an issue?
@cammellos yes, with my latest solution @Serhy mentioned that it was still slow on low-end devices
@Ferossgp @cammellos @flexsurfer
Slowness is caused by checkbox accessory (specifically by its animation).
I tested it on a relatively slow android device by measuring time between log messages which were printed in render-token component, specifically between the first and the last items in the list. There are a bit more than 100 elements in the list.
;; no :accessory at all 6.689s
;; without animation 7.81s
;; with animation 15.579s
Those results show that it is about two times slower with animation, but in fact it is even worse: if you try to use the app when entire list is rendered it doesn't respond because UI thread is blocked (as far as I understand by animation or related code). So, for instance, if I open "manage assets" screen, then go back to the wallet, the app does not respond on any interaction during the next 5-6 seconds (transition back to the wallet works because screen is already rendered and transition itself happens on a native thread).
So we either need to optimise that animation or to make it optional for "manage assets" list.
@rasom why all elements are rendered and not only visible ?
@flexsurfer for testing I scrolled the list to the end, so that's why all elements were rendered. But SectionList would render first 60-80 items in the background anyway, even with initialNumToRender set to a smaller number. That property only sets a size of the initial batch.
@rasom yes, the animation slows the list (seems like there is a lot of bridge usage in this case). But the problem with performance was always there even before animations, with the old list-item and checkbox.
@Ferossgp yep there is a separate issue when you check/uncheck the item, but animation made it way slower when scrolling, thus more noticeable. At the moment I'm looking what can be done with slow check/uncheck.
I've tried using simply pressable here https://github.com/status-im/status-react/pull/11078/files#diff-0a905251f106f1d0bb8a4716380a5a1fe40bb60a0868373cccf711529fe64915R50 and @Serhy mentioned that there is almost no difference in performance on a low-end device.
@Ferossgp it is slow because the change on "manage assets" screen requires entire wallet screen to be re-rendered. So if we comment out wallet screen and interact with checkboxes in assets list it will become noticeably faster.
I will prepare fixes for both slow scrolling and slow checkboxes and file a PR soon, then let's test it and decide if it is enough.
Most helpful comment
I will prepare fixes for both slow scrolling and slow checkboxes and file a PR soon, then let's test it and decide if it is enough.