From afbe74d9750bb42c674e3083570c22140bb05f5f Mon Sep 17 00:00:00 2001 From: mkelvers Date: Tue, 26 May 2026 22:37:30 +0200 Subject: [PATCH] perf: subtitles binary search --- static/player/subtitles/index.ts | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/static/player/subtitles/index.ts b/static/player/subtitles/index.ts index 1ed473b..885e112 100644 --- a/static/player/subtitles/index.ts +++ b/static/player/subtitles/index.ts @@ -80,8 +80,24 @@ export const updateSubtitleRender = (time: number): void => { return; } - // find cue containing current time - const cue = state.activeSubtitles.find(c => time >= c.start && time <= c.end); + // binary search: cues are sorted by start time + let lo = 0; + let hi = state.activeSubtitles.length - 1; + let cue: SubtitleCue | undefined; + while (lo <= hi) { + const mid = (lo + hi) >> 1; + const c = state.activeSubtitles[mid]; + if (time < c.start) { + hi = mid - 1; + continue; + } + if (time > c.end) { + lo = mid + 1; + continue; + } + cue = c; + break; + } if (!cue) { hideSubtitleText(); return; @@ -110,6 +126,8 @@ export const setupSubtitles = (): void => { state.activeSubtitles = []; return; } - state.activeSubtitles = await loadSubtitle(track.url); + const cues = await loadSubtitle(track.url); + cues.sort((a, b) => a.start - b.start); + state.activeSubtitles = cues; }); };