Start here. This is the direct spoken answer to practice first.
Overview
Virtualization trades DOM volume for scroll and measurement complexity, so it is justified by evidence rather than row count alone.
I virtualize when profiling shows that rendering or maintaining the full list causes meaningful startup, update, or scrolling cost. The list renders the visible window plus a small overscan region and uses stable item IDs. The scroll container represents the full estimated size while visible rows are positioned within it. I use a proven library unless the layout is unusually simple.