updated files with new features and improvements: caching proper

This commit is contained in:
2026-04-22 00:16:20 -07:00
parent b3a11cf735
commit 1b7d752e4e
3 changed files with 106 additions and 14 deletions
+34 -4
View File
@@ -140,6 +140,7 @@
const cardBackCache = new Map();
const cardBackThumbnailCache = new Map();
const imagePreloadCache = new Map();
const loadedImageCache = new Map();
const deckImagePreloadCache = new Map();
const deckPreloadStatus = {
activeDeckId: DEFAULT_DECK_ID,
@@ -574,6 +575,7 @@
cardBackCache.clear();
cardBackThumbnailCache.clear();
imagePreloadCache.clear();
loadedImageCache.clear();
deckImagePreloadCache.clear();
backgroundDeckWarmupPromise = null;
setDeckPreloadStatus({
@@ -948,7 +950,11 @@
function preloadImageUrl(url) {
const normalizedUrl = String(url || "").trim();
if (!normalizedUrl) {
return Promise.resolve(false);
return Promise.resolve(null);
}
if (loadedImageCache.has(normalizedUrl)) {
return Promise.resolve(loadedImageCache.get(normalizedUrl));
}
if (imagePreloadCache.has(normalizedUrl)) {
@@ -971,12 +977,20 @@
}
image.decoding = "async";
image.onload = () => finalize(true);
image.onerror = () => finalize(false);
image.onload = () => {
loadedImageCache.set(normalizedUrl, image);
finalize(image);
};
image.onerror = () => finalize(null);
image.src = normalizedUrl;
if (image.complete) {
finalize(Boolean(image.naturalWidth));
if (image.naturalWidth) {
loadedImageCache.set(normalizedUrl, image);
finalize(image);
} else {
finalize(null);
}
}
});
@@ -984,6 +998,20 @@
return preloadPromise;
}
function ensureImageLoaded(url) {
return preloadImageUrl(url);
}
function isImageLoaded(url) {
const normalizedUrl = String(url || "").trim();
if (!normalizedUrl) {
return false;
}
const cachedImage = loadedImageCache.get(normalizedUrl);
return Boolean(cachedImage?.complete && cachedImage?.naturalWidth);
}
async function preloadImageUrls(urls, concurrency = 6) {
const queue = Array.from(new Set(Array.isArray(urls) ? urls.map((entry) => String(entry || "").trim()).filter(Boolean) : []));
if (queue.length === 0) {
@@ -1268,6 +1296,8 @@
resolveTarotCardBackThumbnail,
preloadDeckImages,
preloadAllDeckImages,
ensureImageLoaded,
isImageLoaded,
getDeckPreloadStatus: () => emitDeckPreloadStatus(),
getTarotCardDisplayName,
getTarotCardSearchAliases,