Startup profile
The initial HTML stays small because row markup is not shipped in the document. Most startup work is JS execution plus the first recycled node pool.
Demo 3
This page ships very little row HTML. It keeps the dataset in JavaScript and reuses a small pool of row nodes so startup stays light and scrolling work stays bounded.
The scroll height still represents 100,000 rows, but the live DOM only contains a recycled slice around the viewport.
The initial HTML stays small because row markup is not shipped in the document. Most startup work is JS execution plus the first recycled node pool.
A fixed set of DOM nodes is reused for different records as you scroll. The viewport moves through data instead of mounting a new row for every item.
This is usually the fastest startup model here, but it depends on JavaScript to synthesize content instead of letting the browser parse prebuilt HTML.