From e08c47c8cccb298148ef6a821553ad900627e98a Mon Sep 17 00:00:00 2001 From: Steel <mael.acier@ensiie.fr> Date: Fri, 6 Sep 2024 14:08:33 +0200 Subject: [PATCH] better caching --- src/app.html | 1 - src/lib/data.ts | 23 ++++++++++++++++++----- src/routes/quiz/+page.server.ts | 2 +- static/favicon.png | Bin 1571 -> 0 bytes 4 files changed, 19 insertions(+), 7 deletions(-) delete mode 100644 static/favicon.png diff --git a/src/app.html b/src/app.html index ec070ff..fba6fdb 100644 --- a/src/app.html +++ b/src/app.html @@ -2,7 +2,6 @@ <html lang="fr" class="h-full"> <head> <meta charset="utf-8" /> - <link rel="icon" href="%sveltekit.assets%/favicon.png" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" /> diff --git a/src/lib/data.ts b/src/lib/data.ts index 2e536e0..b4db74a 100644 --- a/src/lib/data.ts +++ b/src/lib/data.ts @@ -12,7 +12,8 @@ const cache = new Map<number, PromoCache>(); // 1 hour const CACHE_DURATION_MS = 1000 * 60 * 60; -async function cacheImages(users: UserId[]): Promise<void> { +async function cacheImages(users: Iterable<UserId>): Promise<void> { + let count = 0; for (const user of users) { const response = await client.query(USER_DETAILS_QUERY, { idList: [user] }); @@ -23,17 +24,22 @@ async function cacheImages(users: UserId[]): Promise<void> { const photo = response.data?.page.nodes[0].photo; if (!photo?.url) continue; await fetch(photo.url, { method: "HEAD" }); + count++; } - console.log("cached", users.length, "images"); + console.log("cached", count, "images"); +} + +// background task +async function cachePromotionImages(year: number) { + const promo = cache.get(year); + if (!promo) return; + await cacheImages(promo.promotion); } async function fetchPromotion(year: number): Promise<PromoCache> { const array = await Array.fromAsync(pageIterator(PROMOTION_QUERY, { year })); const users = array.map((node) => node.id); - // background task - cacheImages(users); - return { lastUpdateMs: new Date().getTime(), promotion: new Set(users), @@ -49,6 +55,7 @@ export async function getPromotion(year: number): Promise<Set<UserId>> { console.log("year", year, "not in cache, fetching"); const freshData = await fetchPromotion(year); cache.set(year, freshData); + cachePromotionImages(year); return freshData.promotion; } @@ -70,3 +77,9 @@ export function getPromotionRange( (array) => new Set(array), ); } + +setInterval(() => { + for (const year of cache.keys()) { + cachePromotionImages(year); + } +}, CACHE_DURATION_MS / 2); diff --git a/src/routes/quiz/+page.server.ts b/src/routes/quiz/+page.server.ts index 90b3993..933b6e2 100644 --- a/src/routes/quiz/+page.server.ts +++ b/src/routes/quiz/+page.server.ts @@ -66,7 +66,7 @@ export async function load(event) { } const MAX_POINTS = 10; -const MIN_POINTS = 0; +const MIN_POINTS = 3; // Durée maximale pour obtenir le score maximal const SERVER_DELAY_MAX = 3; diff --git a/static/favicon.png b/static/favicon.png deleted file mode 100644 index 825b9e65af7c104cfb07089bb28659393b4f2097..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1571 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 VHuiSbmk|H}002ovPDHLkV1f%e^4kCa -- GitLab