Performance: Virtual scrolling for large lists
Virtual scrolling improves page load speed and rendering performance by only rendering visible list items instead of the entire large list.
Jump into concepts and practice - no test required
import { Component } from '@angular/core'; import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling'; @Component({ selector: 'app-virtual-list', template: `<cdk-virtual-scroll-viewport itemSize="40" style="height:400px;"> <div *cdkVirtualFor="let item of items">{{item}}</div> </cdk-virtual-scroll-viewport>` }) export class VirtualListComponent { items = Array.from({length: 10000}, (_, i) => `Item ${i + 1}`); }
import { Component } from '@angular/core'; @Component({ selector: 'app-large-list', template: `<div style='height:400px; overflow:auto;'> <div *ngFor='let item of items'>{{item}}</div> </div>` }) export class LargeListComponent { items = Array.from({length: 10000}, (_, i) => `Item ${i + 1}`); }
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Rendering full list | 10,000 nodes created | 10,000 reflows | High paint cost | [X] Bad |
| Virtual scrolling | 20-30 nodes created | 20 reflows | Low paint cost | [OK] Good |
cdk-virtual-scroll-viewport in Angular for large lists?cdk-virtual-scroll-viewport role*cdkVirtualFor instead of *ngFor to render visible items only.itemSize attribute is required on cdk-virtual-scroll-viewport to set fixed item height for scrolling calculations.<cdk-virtual-scroll-viewport itemSize="40" style="height: 120px;">
<div *cdkVirtualFor="let item of items">{{item}}</div>
</cdk-virtual-scroll-viewport>items = ['A', 'B', 'C', 'D', 'E'], how many items will be visible at once?<cdk-virtual-scroll-viewport itemSize="50">
<div *cdkVirtualFor="let item in items">{{item}}</div>
</cdk-virtual-scroll-viewport>itemSize to calculate visible items and smooth scrolling.cdk-virtual-scroll-viewport with a fixed height and *cdkVirtualFor to render only visible items efficiently.itemSize or using *ngFor causes performance issues or errors.