A React 7,897 application has two performance stories, and they need different tools. The first is load: how many bytes the browser downloads, parses and executes before anything useful appears. The second is update: how long React takes to re-render when state changes. Memoization and Compiler and Concurrent Rendering covered the update story — memoization, the React Compiler, transitions and deferred values. This section covers the load story, and the measurements that tell you which story you are in — because the fixes are opposite. A 600 kB bundle is not cured by memo.
Every claim here carries a number. The bundle sizes come from a real Vite 8.3.0 25,978 build of a small three-route application (React 19.3.0, React Router 8.4.0 139,386 , Recharts 3.10.1 126 , react-window 2.3.1 17,208 ); the render timings come from that code in headless Chrome 152 1 on an Intel Core i9-7980XE. Your numbers will differ — that is the point.