updated files with new features and improvements: caching proper
This commit is contained in:
+34
-4
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user