re-add session cache for loaded images

This commit is contained in:
jeffvli
2026-03-11 21:20:31 -07:00
parent 5b4da3bc29
commit 1526f9b8d6
+10 -2
View File
@@ -20,6 +20,8 @@ import { useDebouncedValue } from '/@/shared/hooks/use-debounced-value';
import { useInViewport } from '/@/shared/hooks/use-in-viewport'; import { useInViewport } from '/@/shared/hooks/use-in-viewport';
import { ImageRequest } from '/@/shared/types/domain-types'; import { ImageRequest } from '/@/shared/types/domain-types';
const loadedImageCacheKeys = new Set<string>();
export interface ImageProps extends Omit<ImgHTMLAttributes<HTMLImageElement>, 'src'> { export interface ImageProps extends Omit<ImgHTMLAttributes<HTMLImageElement>, 'src'> {
containerClassName?: string; containerClassName?: string;
enableAnimation?: boolean; enableAnimation?: boolean;
@@ -78,10 +80,14 @@ export function BaseImage({
() => imageRequest ?? (src ? { cacheKey: src, url: src } : undefined), () => imageRequest ?? (src ? { cacheKey: src, url: src } : undefined),
[imageRequest, src], [imageRequest, src],
); );
const isInSessionCache = Boolean(
rawImageRequest?.cacheKey && loadedImageCacheKeys.has(rawImageRequest.cacheKey),
);
const [debouncedImageRequest] = useDebouncedValue(rawImageRequest, 100, { const [debouncedImageRequest] = useDebouncedValue(rawImageRequest, 100, {
waitForInitial: true, waitForInitial: true,
}); });
const effectiveImageRequest = enableDebounce ? debouncedImageRequest : rawImageRequest; const effectiveImageRequest =
isInSessionCache || !enableDebounce ? rawImageRequest : debouncedImageRequest;
const [hasLoadedInInstance, setHasLoadedInInstance] = useState(false); const [hasLoadedInInstance, setHasLoadedInInstance] = useState(false);
@@ -90,7 +96,8 @@ export function BaseImage({
}, [effectiveImageRequest?.cacheKey]); }, [effectiveImageRequest?.cacheKey]);
const shouldLoadImage = Boolean( const shouldLoadImage = Boolean(
effectiveImageRequest && (!enableViewport || inViewport || hasLoadedInInstance), effectiveImageRequest &&
(!enableViewport || isInSessionCache || inViewport || hasLoadedInInstance),
); );
const nativeImage = useNativeImage({ const nativeImage = useNativeImage({
@@ -109,6 +116,7 @@ export function BaseImage({
return; return;
} }
loadedImageCacheKeys.add(effectiveImageRequest.cacheKey);
setHasLoadedInInstance(true); setHasLoadedInInstance(true);
}, [effectiveImageRequest?.cacheKey, nativeImage.isLoaded]); }, [effectiveImageRequest?.cacheKey, nativeImage.isLoaded]);