From fbf99a9ccf94bdf212345a5b4832fd6ccb03fb55 Mon Sep 17 00:00:00 2001 From: unfr Date: Fri, 24 Apr 2026 07:47:23 +0200 Subject: [PATCH] Precharge les mappings IMDb au warmup (1.27s -> 16ms sur le premier appel /api?t=imdb) --- lib/imdbMapping.js | 9 +++++++++ server.js | 7 ++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/imdbMapping.js b/lib/imdbMapping.js index 032692c..91088e8 100644 --- a/lib/imdbMapping.js +++ b/lib/imdbMapping.js @@ -33,3 +33,12 @@ export async function lookupImdb(imdbId) { } return null; } + +// Eager-load both mappings — used at server startup to remove the first-request +// 1s latency. Returns the number of entries loaded per type. +export async function preloadMappings() { + const out = { movie: 0, tv: 0 }; + try { out.movie = (await loadOne('movie')).size; } catch { /* missing */ } + try { out.tv = (await loadOne('tv')).size; } catch { /* missing */ } + return out; +} diff --git a/server.js b/server.js index f334a09..295b4ab 100644 --- a/server.js +++ b/server.js @@ -5,6 +5,7 @@ import secureSession from '@fastify/secure-session'; import fastifyStatic from '@fastify/static'; import Fastify from 'fastify'; import { HOST, PORT, RATE_LIMIT_PER_SEC, ROOT, SESSION_SECRET } from './config.js'; +import { preloadMappings } from './lib/imdbMapping.js'; import { getRatings } from './lib/imdbRatings.js'; import { httpDuration, httpRequests, imdbRatingsCount, searchWorkers } from './lib/metrics.js'; import { getPool } from './lib/searchEngine.js'; @@ -80,7 +81,11 @@ fastify.ready().then(async () => { const tv = getPool('tv'); searchWorkers.set({ type: 'movie' }, movie.workers.length); searchWorkers.set({ type: 'tv' }, tv.workers.length); - fastify.log.info({ ratings: ratings.size }, 'Warmup complete'); + const maps = await preloadMappings(); + fastify.log.info( + { ratings: ratings.size, imdb_movie: maps.movie, imdb_tv: maps.tv }, + 'Warmup complete', + ); } catch (err) { fastify.log.warn({ err }, 'Warmup failed'); }