From 6fca5bae396ca7ceea209be91c8b1d26dd4b9872 Mon Sep 17 00:00:00 2001 From: Yuri Tatishchev Date: Wed, 11 Feb 2026 22:59:52 -0800 Subject: [PATCH] perf(player): virtualize queue list rendering Extract a generic VirtualList.svelte component that only renders visible rows + overscan buffer using absolute positioning in a tall sentinel div. Queue.svelte now uses VirtualList with 64px row height (supporting 2-line titles) instead of rendering all items. This reduces DOM nodes from 1000+ to ~20 for large queues. --- src/lib/components/player/Queue.svelte | 173 ++++++++++++----------- src/lib/components/ui/VirtualList.svelte | 101 +++++++++++++ 2 files changed, 192 insertions(+), 82 deletions(-) create mode 100644 src/lib/components/ui/VirtualList.svelte diff --git a/src/lib/components/player/Queue.svelte b/src/lib/components/player/Queue.svelte index 7b393ee..c317481 100644 --- a/src/lib/components/player/Queue.svelte +++ b/src/lib/components/player/Queue.svelte @@ -1,18 +1,18 @@ + +
+ {#if items.length === 0} + {@render empty?.()} + {:else} +
+ {#each visibleItems as entry (key ? key(entry.item, entry.index) : entry.index)} +
+ {@render row(entry)} +
+ {/each} +
+ {/if} +
+ +