Skip to content

[Due for payment 2026-06-08] Perf: Use NavigationDeferredMount to improve Search/Reports warm start performance #91731

Description

@luacmartins

Background

Investigation into the Reports/Search page load times revealed three distinct start types:

Category Description Time to Display
Cold start Data not yet fetched from backend; skeleton screen shown ~200ms
Warm start (first render in session) Full page with data loaded immediately ~550ms
Warm start (subsequent renders) Tab navigator cache hit ~30ms

Root Cause

The ~550ms warm start is caused by two factors:

  1. We wait for the entire page — including the expenses list — to finish rendering before showing anything to the user.
  2. Each list row re-renders 6–10 times before becoming visible, due to unstable application state and insufficient reference stabilization that prevents the React Compiler from optimizing those re-renders.

Proposed Solution

Apply NavigationDeferredMount to the Reports/Search page, the warm start (first render) will behave like a cold start:

  • Show skeleton after ~200ms
  • Render full content ~400ms later

This improves perceived performance even though the final render arrives slightly later in absolute terms.

Issue OwnerCurrent Issue Owner: @mallenexpensify

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

Awaiting PaymentAuto-added when associated PR is deployed to productionDailyKSv2

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions