[Perf] Video: Avoid redundant renders

This commit is contained in:
Alexander Zinchuk 2023-01-22 18:12:40 +01:00
parent c6bd762a4c
commit f17f1f533e

View File

@ -2,6 +2,7 @@ import type React from '../lib/teact/teact';
import { useCallback, useMemo, useState } from '../lib/teact/teact';
import { debounce } from '../util/schedulers';
import { isSafariPatchInProgress } from '../util/patchSafariProgressiveAudio';
import { areDeepEqual } from '../util/areDeepEqual';
type BufferingEvent = (e: Event | React.SyntheticEvent<HTMLMediaElement>) => void;
@ -33,9 +34,11 @@ const useBuffering = (noInitiallyBuffered = false, onTimeUpdate?: AnyToVoidFunct
if (!isSafariPatchInProgress(media)) {
if (media.buffered.length) {
const ranges = getTimeRanges(media.buffered, media.duration);
setBufferedRanges(ranges);
const bufferedLength = ranges.reduce((acc, { start, end }) => acc + end - start, 0);
setBufferedProgress(bufferedLength / media.duration);
setBufferedRanges((currentRanges) => {
return areDeepEqual(currentRanges, ranges) ? currentRanges : ranges;
});
}
setIsBufferedDebounced(media.readyState >= MIN_READY_STATE || media.currentTime > 0);