Performance audit finding · Severity: Medium (tracking) · Effort: Large (distributable) · Fix risk: Moderate per component · Test safety net: Partial
Owner: per-component CODEOWNERS
Scope: ~53 class components skipped by React Compiler
What is this about?
React Compiler never compiles class components. At full enablement, #30919 counted 53 class components silently skipped — they ship unoptimized and receive none of the automatic memoization the rest of the app now gets (~60% re-render reduction per #31171). None of the 2026-06-09 audit-run issues track this coverage debt, and it has no owner.
Why it matters
These components are permanently outside the compiler's coverage until migrated to function components. The skip is silent: nothing in CI or DevTools flags them, so the coverage gap persists invisibly (the logger proposed in the companion triage-tooling issue would make the count visible per build).
Scenario
N/A — see Technical Details.
Design
N/A — behavior-preserving migrations.
Technical Details
Enumerate the current skip list (compiler logger output, or grep -rln "extends (React\.)?(Pure)?Component" app --include="*.tsx" --include="*.js"), rank by render frequency/surface (hot screens first), and migrate to function components with hooks. Distributable across teams per CODEOWNERS; each migration is independently shippable. The extension audit tracks the same debt class as MetaMask-planning#6548.
Threat Modeling Framework
N/A — behavior-preserving refactors.
Acceptance Criteria
- Skip-list enumerated and ranked; per-team checklists filed or appended here.
- Count trends down release over release; hot-surface components migrated first; each migration verified with a profiler pass (component gains
Memo ✨ after migration).
References
What is this about?
React Compiler never compiles class components. At full enablement, #30919 counted 53 class components silently skipped — they ship unoptimized and receive none of the automatic memoization the rest of the app now gets (~60% re-render reduction per #31171). None of the 2026-06-09 audit-run issues track this coverage debt, and it has no owner.
Why it matters
These components are permanently outside the compiler's coverage until migrated to function components. The skip is silent: nothing in CI or DevTools flags them, so the coverage gap persists invisibly (the logger proposed in the companion triage-tooling issue would make the count visible per build).
Scenario
N/A — see Technical Details.
Design
N/A — behavior-preserving migrations.
Technical Details
Enumerate the current skip list (compiler logger output, or
grep -rln "extends (React\.)?(Pure)?Component" app --include="*.tsx" --include="*.js"), rank by render frequency/surface (hot screens first), and migrate to function components with hooks. Distributable across teams per CODEOWNERS; each migration is independently shippable. The extension audit tracks the same debt class as MetaMask-planning#6548.Threat Modeling Framework
N/A — behavior-preserving refactors.
Acceptance Criteria
Memo ✨after migration).References
mms-performanceskill,mm-react-compiler-error-triagecoverage accounting (perf: Augmentmms-performancewith frontend learnings from the Extension performance audit skills#49)