Why it's needed
Rendering 5,000 contacts at once exhausts memory. Virtualization draws visible rows and recycles them (Android Developers, n.d.; web.dev, n.d.), keeping responses within 0.1 s (Miller, 1968). Great for infinite scroll and poor Core Web Vitals.
Implementation pitfalls
Estimate variable heights then correct; keep a generous buffer; pair with lazy loading. People notice brief blanks (Card et al., 1983). For simple pages, CSS content-visibility (MDN, n.d.) helps.
Accessibility and search
Unrendered rows are invisible to screen readers and find-in-page. Use aria-setsize/posinset (W3C WAI, n.d.), add in-app search, and preserve focus (W3C, 2023). Skip it for short lists.
FAQ
- When do I need it?
- Measure when lists reach hundreds of items or scrolling stutters.
- Does Ctrl+F break?
- Yes for unrendered rows, so provide in-app search.
Sources reviewed: 2026-10-27
References
- web.dev. (n.d.). Virtualize large lists with react-window. Rendering only visible rows.
- Android Developers. (n.d.). Create dynamic lists with RecyclerView. Recycling views on Android.
- MDN Web Docs. (n.d.). content-visibility. CSS to skip offscreen rendering.
- W3C WAI. (n.d.). Feed pattern. ARIA Authoring Practices Guide. Announcing size and position.
- Miller, R. B. (1968). Response time in man-computer conversational transactions. In Proceedings of the December 9–11, 1968, Fall Joint Computer Conference, Part I (pp. 267–277). ACM. Response-time limits.
- Card, S. K., Robertson, G. G., & Mackinlay, J. D. (1991). The information visualizer, an information workspace. In Proceedings of the SIGCHI Conference on Human Factors in Computing Systems (pp. 181–186). ACM. Perception timing model.
- World Wide Web Consortium. (2023). Web Content Accessibility Guidelines (WCAG) 2.2. Focus order and name/role.
