React.lazy Always Suspends Once, and That Costs You 300 ms

React.lazy, Suspense and the Hidden 300 ms Delay

React.lazy Always Suspends Once, and That Costs You 300 ms

Tab Widgets, a React 19 tab extension, found its dashboard took ~380 ms to appear even though all widget code loaded within ~100 ms. The culprit: React.lazy always suspends on first render, and React's 300 ms fallback throttle then holds content back. Preloading helped, but the real fix was skipping Suspense entirely—rendering a placeholder as normal content and swapping in the widget when its code arrives. That got first widget content on screen ~240 ms sooner.

A lazy component always suspends the first time it renders, even if its code has already loaded.

More from this day

2026-10-29