Skip to content

[Due for payment 2026-05-28] perf: Defer EditableCell interactivity #91037

@mountiny

Description

@mountiny

Problem

The initial render of a Reports list mounts a full PressableWithFeedback tree (including Tooltip, Hoverable, and BoundsObserver) inside every EditableCell. Doing this synchronously during the skeleton render is expensive and keeps the JS thread busy, delaying the moment the network response for the screen can be processed. Cold/first navigations to Reports are noticeably slower as a result (~3500 ms average).

Solution

Defer the interactive subtree of EditableCell using useDeferredValue(true, false). While the deferred flag is still false, the cell renders a layout-identical plain View (the same fallback used when canEdit is false), so layout/skeleton work stays cheap. Once React has idle time, the deferred value flips to true and the full pressable/tooltip tree mounts. This shaves ~330 ms (~9%) off the cold navigation to Reports while leaving repeat navigations effectively unchanged.

PR

#91034

Issue OwnerCurrent Issue Owner: @mallenexpensify

Metadata

Metadata

Labels

Awaiting PaymentAuto-added when associated PR is deployed to productionDailyKSv2Task

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions