Performance audit finding · Severity: Medium Ruled out · Resolution: closed after per-selector triage
File: app/components/Views/Wallet/index.tsx
Audit result (2026-06-10)
All 19 useSelector reads triaged; no expensive or unstable selector found:
- 16 are memoized selectors returning primitives/booleans (feature flags, chain id, unread count) or stable controller-state references (the engine slice replaces only the changed controller's key per 250ms batched flush; BaseController v2 state is Immer-produced with structural sharing, so unchanged paths keep their references).
- 3 are inline
useSelector arrows returning primitives or a stable slice field (state.security.dataCollectionForMarketing, state.settings.basicFunctionalityEnabled, state.networkOnboarded.networkOnboardedState). A new arrow function per render is irrelevant to re-rendering — only the result identity matters — so these are reuse/style debt, not perf findings. Optional cleanup: promote to named selectors per app/selectors/ convention; no perf issue warranted.
Original finding (superseded by the audit above)
The Wallet home screen makes 19 separate useSelector calls; each was triaged for per-check cost and reference stability under the batched-sync dispatch cadence (app/core/Batcher/constants.ts 250ms flush, app/core/EngineService/EngineService.ts:38 unstable_batchedUpdates) and ruled out.
References
Audit result (2026-06-10)
All 19
useSelectorreads triaged; no expensive or unstable selector found:useSelectorarrows returning primitives or a stable slice field (state.security.dataCollectionForMarketing,state.settings.basicFunctionalityEnabled,state.networkOnboarded.networkOnboardedState). A new arrow function per render is irrelevant to re-rendering — only the result identity matters — so these are reuse/style debt, not perf findings. Optional cleanup: promote to named selectors perapp/selectors/convention; no perf issue warranted.Original finding (superseded by the audit above)
The Wallet home screen makes 19 separate
useSelectorcalls; each was triaged for per-check cost and reference stability under the batched-sync dispatch cadence (app/core/Batcher/constants.ts250ms flush,app/core/EngineService/EngineService.ts:38unstable_batchedUpdates) and ruled out.References
app/core/Batcher/constants.ts,app/core/EngineService/EngineService.ts:38mms-performancesweep + per-selector triage (perf: Augmentmms-performancewith frontend learnings from the Extension performance audit skills#49,mm-state-normalization)