[object Object]

← back to AsSeenInMovies

asseeninmovies: /movie/:id + /person/:id — parallelize credits + spotted queries via Promise.all (was sequential after the lookup-row await; ~2x speedup on cold cache; ~5ms warm now)

08671effed8146f85e508c07a8eed45597a8c92a · 2026-05-12 18:05:28 -0700 · SteveStudio2

Files touched

Diff

commit 08671effed8146f85e508c07a8eed45597a8c92a
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date:   Tue May 12 18:05:28 2026 -0700

    asseeninmovies: /movie/:id + /person/:id — parallelize credits + spotted queries via Promise.all (was sequential after the lookup-row await; ~2x speedup on cold cache; ~5ms warm now)
---
 server.js | 73 ++++++++++++++++++++++++++++++++++-----------------------------
 1 file changed, 39 insertions(+), 34 deletions(-)

diff --git a/server.js b/server.js
index f795d46..5fa4af1 100644
--- a/server.js
+++ b/server.js
@@ -929,21 +929,24 @@ app.get('/movie/:id', async (req, res) => {
     const m = await pool.query(`SELECT * FROM asim_movies WHERE id=$1 LIMIT 1`, [id]);
     if (!m.rows[0]) return res.status(404).type('html').send(htmlShell('Not found', '<div class="empty">Movie not found.</div>'));
     const mv = m.rows[0];
-    const credits = await pool.query(`
-      SELECT c.role, c.character_name, c.order_idx, c.job_title, c.department,
-             p.id AS person_id, p.full_name, p.headshot_url, p.headshot_source, p.premium_tier
-        FROM asim_credits c JOIN asim_people p ON p.id = c.person_id
-       WHERE c.movie_id=$1 ORDER BY
-         CASE c.department
-           WHEN 'Directing' THEN 1 WHEN 'Acting' THEN 2 WHEN 'Writing' THEN 3
-           WHEN 'Art' THEN 4 WHEN 'Camera' THEN 5 WHEN 'Editing' THEN 6
-           WHEN 'Sound' THEN 7 WHEN 'Production' THEN 8 ELSE 9 END,
-         c.order_idx NULLS LAST, p.full_name`, [id]);
-    // Public /movie/:id should only surface verified placements; pending
-    // submissions (verified_at IS NULL) wait for admin review.
-    const spotted = await pool.query(`
-      SELECT * FROM asim_spotted WHERE movie_id=$1 AND verified_at IS NOT NULL AND (verified_by IS NULL OR verified_by NOT LIKE 'rejected%')
-       ORDER BY verified_at DESC, created_at DESC`, [id]);
+    // Credits + spotted are independent — parallel cuts wall time roughly in
+    // half on cold cache. Public /movie/:id should only surface verified
+    // placements; pending submissions wait for admin review.
+    const [credits, spotted] = await Promise.all([
+      pool.query(`
+        SELECT c.role, c.character_name, c.order_idx, c.job_title, c.department,
+               p.id AS person_id, p.full_name, p.headshot_url, p.headshot_source, p.premium_tier
+          FROM asim_credits c JOIN asim_people p ON p.id = c.person_id
+         WHERE c.movie_id=$1 ORDER BY
+           CASE c.department
+             WHEN 'Directing' THEN 1 WHEN 'Acting' THEN 2 WHEN 'Writing' THEN 3
+             WHEN 'Art' THEN 4 WHEN 'Camera' THEN 5 WHEN 'Editing' THEN 6
+             WHEN 'Sound' THEN 7 WHEN 'Production' THEN 8 ELSE 9 END,
+           c.order_idx NULLS LAST, p.full_name`, [id]),
+      pool.query(`
+        SELECT * FROM asim_spotted WHERE movie_id=$1 AND verified_at IS NOT NULL AND (verified_by IS NULL OR verified_by NOT LIKE 'rejected%')
+         ORDER BY verified_at DESC, created_at DESC`, [id])
+    ]);
 
     // Group credits by department
     const groups = {};
@@ -1016,25 +1019,27 @@ app.get('/person/:id', async (req, res) => {
     const p = await pool.query(`SELECT * FROM asim_people WHERE id=$1 LIMIT 1`, [id]);
     if (!p.rows[0]) return res.status(404).type('html').send(htmlShell('Not found', '<div class="empty">Person not found.</div>'));
     const person = p.rows[0];
-    const credits = await pool.query(`
-      SELECT c.role, c.character_name, c.job_title, c.department,
-             m.id AS movie_id, m.title, m.release_year, m.poster_url, m.poster_source
-        FROM asim_credits c JOIN asim_movies m ON m.id = c.movie_id
-       WHERE c.person_id=$1 ORDER BY m.release_year DESC NULLS LAST`, [id]);
-    // Spotted placements from films this person worked on — surfaces the
-    // person ⇄ movie ⇄ spotted graph. Today this is mostly empty (only 14
-    // verified spotted rows), but the join is structurally correct so it
-    // lights up as submissions accumulate.
-    const personSpotted = await pool.query(`
-      SELECT DISTINCT s.id AS spot_id, s.product_name, s.product_category, s.brand,
-                      s.scene_timecode, s.shop_url,
-                      m.id AS movie_id, m.title, m.release_year
-        FROM asim_spotted s
-        JOIN asim_movies m ON m.id = s.movie_id
-        JOIN asim_credits c ON c.movie_id = m.id
-       WHERE c.person_id = $1 AND s.verified_at IS NOT NULL AND (verified_by IS NULL OR verified_by NOT LIKE 'rejected%')
-       ORDER BY m.release_year DESC NULLS LAST, s.product_name
-       LIMIT 24`, [id]);
+    // Credits + spotted are independent — parallel. Spotted surfaces the
+    // person ⇄ movie ⇄ spotted graph: any verified placement on a film
+    // this person worked on. Mostly empty today (14 rows) but lights up as
+    // submissions accumulate.
+    const [credits, personSpotted] = await Promise.all([
+      pool.query(`
+        SELECT c.role, c.character_name, c.job_title, c.department,
+               m.id AS movie_id, m.title, m.release_year, m.poster_url, m.poster_source
+          FROM asim_credits c JOIN asim_movies m ON m.id = c.movie_id
+         WHERE c.person_id=$1 ORDER BY m.release_year DESC NULLS LAST`, [id]),
+      pool.query(`
+        SELECT DISTINCT s.id AS spot_id, s.product_name, s.product_category, s.brand,
+                        s.scene_timecode, s.shop_url,
+                        m.id AS movie_id, m.title, m.release_year
+          FROM asim_spotted s
+          JOIN asim_movies m ON m.id = s.movie_id
+          JOIN asim_credits c ON c.movie_id = m.id
+         WHERE c.person_id = $1 AND s.verified_at IS NOT NULL AND (verified_by IS NULL OR verified_by NOT LIKE 'rejected%')
+         ORDER BY m.release_year DESC NULLS LAST, s.product_name
+         LIMIT 24`, [id])
+    ]);
 
     const isPremium = person.claimed_at && (!person.premium_expires_at || new Date(person.premium_expires_at) > new Date());
     const heroHtml = `

← 40fa8dd asseeninmovies: /spotted — full parallelization of all 5 que  ·  back to AsSeenInMovies  ·  asseeninmovies: GET /sitemap.xml + /robots.txt — XML sitemap bbaae4b →