-
Notifications
You must be signed in to change notification settings - Fork 44
[C-1091] Improve selector performance #1932
[C-1091] Improve selector performance #1932
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Curious if we want to use this approach or replace the selectors themselves at the "reselect" level. That way dev flow looks similar with useSelector still and the component doesn't need to think about it
https://github.com/dai-shi/proxy-memoize#reselect
packages/mobile/package.json
Outdated
@@ -73,6 +73,7 @@ | |||
"node-libs-react-native": "1.2.1", | |||
"numeral": "2.0.6", | |||
"path-dirname": "1.0.2", | |||
"proxy-memoize": "^1.2.0", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
pin
} from '@audius/common' | ||
import { isEqual } from 'lodash' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Unused import
We can do that in some cases, but because these ones need the |
[3394a06] Fix infinite lineup fetch (#1940) Sebastian Klingler [19381a3] [C-296] Persist stack history across bottom tabs (#1939) Dylan Jeffers [6705cb5] [C-1118] Send tip -> send audio (#1937) nicoback2 [9c63ab7] [C-1023] [C-1039] Sync account entropy from webview and improve splashscreen (#1938) Sebastian Klingler [e3d9cc4] [C-1064] Show "You're Offline" component on mobile (#1936) Andrew Mendelsohn [16a8b96] [C-1113] Improve native render performance (#1935) Dylan Jeffers [7f4ede3] Fix broken signup on web (#1934) Michael Piazza [2373ae0] fix rewards claim (#1933) nicoback2 [54dcd64] [C-1107] Fix push to sign in when identity is down (#1931) Raymond Jacobson [43222ee] [C-1091] Improve selector performance (#1932) Dylan Jeffers [eee12c7] Add request pagination for favorites for the new table (#1850) Kyle Shanks [5d43c12] upgrade sdk (#1929) nicoback2 [2fd28e4] [Reloaded] No more useDispatchWeb, messages C-1089 (#1927) nicoback2 [6fc8709] Merge pull request #1928 from AudiusProject/jn-exporter-default Johannes Naylor [24d9d3b] [C-838] Fix desktop update banner flow (#1719) Raymond Jacobson [aace104] remove console exporter and change default to undefined Johannes Naylor [81e9a4d] Detach mobile reachability state from non existent webview C-938 (#1913) nicoback2 [9c6c067] Merge pull request #1878 from AudiusProject/jn-con-385 Johannes Naylor [5f335bb] Update mobile readme install instructions (#1926) Dylan Jeffers [8469883] [C-907] Fix react native push notifications (#1922) Raymond Jacobson [543b013] Fix pull to refresh (#1925) Sebastian Klingler [370088e] Fix issue with using `accountUser` handle (#1924) Sebastian Klingler [5a496fa] fix more by artist lineup (#1921) nicoback2 [cab5181] downgrade node Johannes Naylor [5602eab] pin deps Johannes Naylor [7a95b3f] Fix infinite 404 (#1920) Sebastian Klingler [8cdc9b9] [C-1060] Fix /check page (#1919) Raymond Jacobson [375c5dd] [PAY-578] Fade in socials on mobile user screen (#1905) Reed [2b1cc7f] Wait for libs before signing data (#1918) Sebastian Klingler [d06e2c1] update env var Johannes Naylor [5efd985] [C-1031] Improve profile expand section touch target (#1911) Dylan Jeffers [f327636] [C-1053] Fix ios status color in dark/light modes (#1917) Dylan Jeffers [7a167b6] [C-1050] Fix profile search crash (#1916) Dylan Jeffers [32b8c82] [C-1057] Fix blank edit-profile screen (#1915) Dylan Jeffers [406e6c0] no more useselector web (#1914) nicoback2 [98ed3f6] [C-1029] Fix pull-to-refresh (#1912) Dylan Jeffers [7582351] Migrate useGetFirstOrTopSupporter (#1910) Sebastian Klingler [b9e4e41] add env vars Johannes Naylor [44060c1] remove telemetry Johannes Naylor [53483ef] remove telemetry Johannes Naylor [ae57626] remove telemetry Johannes Naylor [0515567] more telemetry Johannes Naylor [2da8c47] install Johannes Naylor [379af75] Merge branch 'main' into jn-con-385 merge main Johannes Naylor [d0deea6] changing things around Johannes Naylor [22288b1] [C-1012] Remove web build from mobile build (#1907) Raymond Jacobson [8572ee3] [C-1027] Improve bottom-bar perf (#1909) Dylan Jeffers [a41d536] the goods Johannes Naylor [128aa9b] move the instrumentation to the audiusBackend Johannes Naylor [a27c976] Fix profile clearing (#1908) Dylan Jeffers [75e6eec] Remove react-nil and NATIVE_NAVIGATION (#1906) Dylan Jeffers [ebbb561] Update social features to use entity manager (#1853) Isaac Solo [99952d1] [C-990] Nativefy oauth (#1885) Raymond Jacobson [c149204] Fix failing CI init (#1904) Sebastian Klingler [d436adb] [C-1009] Fix misaligned social icons (#1901) Dylan Jeffers [d21d5d4] [C-1020] Remove web pushes (#1902) Dylan Jeffers [600f673] [C-711] Change useSize to useMeasure in ProfileBio (#1903) Reed [497da98] stuff Johannes Naylor [7f4a144] try a bunch of things Johannes Naylor [66995fa] Clean up some more instances of useSelectorWeb/useDispatchWeb (#1900) Sebastian Klingler [3383135] Nativefy remixes screen (#1887) nicoback2 [8b0d1e5] Fix edit profile screen (#1899) Sebastian Klingler [fb3c189] [C-996] Remove NATIVE_MOBILE references (#1895) Dylan Jeffers [bb0a03e] Fix lineup state persisting across profile screens sliptype [5150a58] [PAY-626] Change playlist+tip challenges copy and emoji (#1897) Reed [e816c64] [PAY-625] Playlist challenge optimistic claiming (#1891) Reed [f3c02b6] [C-892] Fix multiple menus open at once (#1889) Andrew Mendelsohn [192c669] run setupTracing Johannes Naylor [00f3951] add tracer Johannes Naylor
Description
Improves selector performance with a new library, proxy-memoize. What this library does to improve our perf is to look at every distinct element in the state that we need for a specific selector, and strictly compare those for any changes. This is much better than what we currently have with reselect, which will trigger a re-render every time our cache changes for selectors that need to grab multiple items from it.
This is just a demo showing it's usage, and we should decide an approach. For collection-list-item, we went from ~80 rerenders to 5, so a 90% reduction!
Moving forward some things to decide:
useProxySelector
hook for the selectors that require many things from the storeuseSelector
hook, or something similar.