Virtualization is mandatory for large grids.
Approach:
Calculate visible row/column range from scroll position
Render only cells in that range plus buffer
Position cells absolutely based on cumulative widths/heights
Update on scroll
Variable dimensions: Columns and rows can have custom widths/heights. Precompute cumulative positions for fast lookup.
Overscan: Render extra rows/columns outside viewport to reduce flicker during fast scrolling.