perf: subtitles binary search

This commit is contained in:
2026-05-26 22:37:30 +02:00
parent 9938bf6c57
commit afbe74d975

View File

@@ -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;
});
};