perf(epg): render only the timeline programmes near the visible range (J3)

Selecting a live channel rendered every programme block of its schedule
(about 240 for the Xtream mock) while the stream was starting: about 6,000
of J3's 6,199 renderer.domMutationsToPlaying. The ribbon now renders the
blocks, ticks and day dividers within half a viewport of the visible range;
the track keeps the full schedule's width, so positions, the scrollbar and
scroll-to-now are unchanged.

A resize reported before the scroll-to-now must not re-centre the window
(it once jumped to the schedule's start and back); resizes only widen it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
4grayandClaude Opus 5.5 committed 2026-10-04 11:30:31 +02:00
1 parent e8b181fcea
commit 67e0133f12
8 files changed
+702 -20

No files matched your search

@@ -370,6 +370,15 @@ remain local when the meaning is explicit.
layouts keep the full EPG-only panel.
- Keep the EPG content mounted while collapsed so current-program state can
continue updating.
- The ribbon renders only the blocks, ticks and day dividers within half a
viewport of the visible range (`TimelineWindowController` in
`epg-timeline-window.controller.ts`); the track keeps the full schedule's
width, so positions, the scrollbar and scroll-to-now are unchanged. A
channel's full schedule is often a few hundred programmes, and rendering
them all competed with the stream's first frame (J3 in
[performance journeys](performance-journeys.md#j3-playback-start-playback-to-the-first-frame)).
Tests and features must not assume an off-screen programme is in the DOM:
scroll the ribbon to it first.
### Collapsible Live Sidebar