From 3dcdca7166a009f1588557728ae3478052fdb558 Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Fri, 28 Nov 2025 22:56:44 +0100 Subject: [PATCH] Reduce image rerenders in continuous reading modes on page change In continuous reading modes the pages are always rendered regardless of if they are visible or not. This is the case to prevent layout shifts when prepending pages while scrolling up. However, this means that a pages "load priority" and its "should load" flag changes everytime the current page changes, which causes unnecessary rerenders. The "load priority" and "should load" flag do not matter once a page has been loaded and therefore should stay consistent once loaded. --- src/features/reader/viewer/pager/ReaderPager.utils.tsx | 5 +++-- .../reader/viewer/pager/components/ReaderHorizontalPager.tsx | 2 +- .../reader/viewer/pager/components/ReaderVerticalPager.tsx | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/features/reader/viewer/pager/ReaderPager.utils.tsx b/src/features/reader/viewer/pager/ReaderPager.utils.tsx index e4f16bd1..41b32740 100644 --- a/src/features/reader/viewer/pager/ReaderPager.utils.tsx +++ b/src/features/reader/viewer/pager/ReaderPager.utils.tsx @@ -258,10 +258,11 @@ const getPageDownloadPriority = ( currentPageIndex: number, pageIndex: number, totalPages: number, + isLoaded: boolean, shouldLoad: boolean, isPreloadMode: boolean, ): number => { - if (!shouldLoad || isPreloadMode) { + if (isLoaded || !shouldLoad || isPreloadMode) { return Number.MAX_SAFE_INTEGER; } @@ -309,7 +310,7 @@ export const createReaderPage = ( src={url} alt={alt} display={display} - priority={getPageDownloadPriority(currentPageIndex, index, totalPages, shouldLoad, isPreloadMode)} + priority={getPageDownloadPriority(currentPageIndex, index, totalPages, isLoaded, shouldLoad, isPreloadMode)} position={position} onLoad={onLoad} onError={onError} diff --git a/src/features/reader/viewer/pager/components/ReaderHorizontalPager.tsx b/src/features/reader/viewer/pager/components/ReaderHorizontalPager.tsx index 7271f86c..c11f77ec 100644 --- a/src/features/reader/viewer/pager/components/ReaderHorizontalPager.tsx +++ b/src/features/reader/viewer/pager/components/ReaderHorizontalPager.tsx @@ -39,7 +39,7 @@ const BaseReaderHorizontalPager = ({ isPreloadMode, onLoad, onError, - shouldLoad, + shouldLoad || pageLoadStates[page.primary.index].loaded, !isPreloadMode, currentPageIndex, totalPages, diff --git a/src/features/reader/viewer/pager/components/ReaderVerticalPager.tsx b/src/features/reader/viewer/pager/components/ReaderVerticalPager.tsx index ca96b189..292895f2 100644 --- a/src/features/reader/viewer/pager/components/ReaderVerticalPager.tsx +++ b/src/features/reader/viewer/pager/components/ReaderVerticalPager.tsx @@ -36,7 +36,7 @@ const BaseReaderVerticalPager = ({ isPreloadMode, onLoad, onError, - shouldLoad, + shouldLoad || pageLoadStates[page.primary.index].loaded, !isPreloadMode, currentPageIndex, totalPages,