perf(feed): smoother scrolling for long feeds
Three low-risk wins for large filtered feeds: - content-visibility:auto on cards (.cv-card/.cv-row) so the browser skips layout/paint for off-screen cards; contain-intrinsic-size keeps the scrollbar stable and is remembered per card after first render. - memo(VideoCard) + stable onState/onChannelFilter callbacks (onState reads the loaded list via a ref) so appending a page only renders the ~60 new cards instead of reconciling every card already on screen. - Prefetch the next page earlier (sentinel rootMargin 800px → 1500px) so the 'Loading more…' flash is far less likely during fast scrolling.
This commit is contained in:
parent
0b5f7f5769
commit
9e8c890893
3 changed files with 70 additions and 39 deletions
|
|
@ -72,6 +72,19 @@ html[data-perf="1"] body {
|
|||
background: var(--bg);
|
||||
}
|
||||
|
||||
/* Skip layout/paint for off-screen feed cards so long lists stay smooth while
|
||||
scrolling. contain-intrinsic-size reserves an approximate box so the scrollbar
|
||||
stays stable; `auto` lets the browser remember each card's real size after it
|
||||
has rendered once. */
|
||||
.cv-card {
|
||||
content-visibility: auto;
|
||||
contain-intrinsic-size: auto 320px;
|
||||
}
|
||||
.cv-row {
|
||||
content-visibility: auto;
|
||||
contain-intrinsic-size: auto 96px;
|
||||
}
|
||||
|
||||
/* ===== Motion ===== */
|
||||
@keyframes fadeIn {
|
||||
from { opacity: 0; }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue