August 1, 2026

The Bug That Two Graphics Cards Couldn't Fix

Here's a fun assumption to have proven wrong: that a performance problem in a 3D web app is, by definition, a graphics problem.

The Bug That Two Graphics Cards Couldn't Fix

Here's a fun assumption to have proven wrong: that a performance problem in a 3D web app is, by definition, a graphics problem. I have two RTX 3060s sitting in this machine. When my "holographic universe" of every Marvel film ever made started chugging like a dial-up modem the moment you clicked on anything, my first thought wasn't "check the CPU." It was "buy a third graphics card."


https://matthew-davis.github.io/marvel/


Turns out that would have achieved precisely nothing.

The project itself started as an act of digital archaeology. Back in 2018 I'd built a clunky Python script that scraped IMDb into a MySQL database, purely so I could ask it questions like "which actor has been in the most Marvel films nobody's heard of." It worked, then it sat untouched for years, the way these things do. This time round: flat JSON files instead of a database, a weekly GitHub Actions job instead of me remembering to run a script, and because why do anything by halves, a 3D graph you can fly around, where every film and every person who ever worked on one is a glowing node in space.

Getting the data right taught me something I should have already known: never trust a search API's idea of "the same title." Iron Man, Blade, Daredevil, Logan, half a dozen genuinely famous films were quietly vanishing from the dataset, and the reason was almost insulting in its simplicity. TMDB has junk duplicate entries with no release date sitting alongside the real ones, and my matching logic treated "no date" as "could be anything, so it counts as a match too" which turned one obvious answer into two, and two into "I give up, ask a human." Once I saw it, it was a five-line fix. Finding it took rather longer.

But the graphics card thing is the bit that actually stuck with me. When something's slow, it's tempting to reach for the explanation that matches the tool you already own, I have serious hardware, so surely the hardware is being tested. It wasn't. Every one of the twenty-three thousand nodes I'd hidden off-screen was still getting its position recalculated, every single frame, forever, whether you could see it or not. The bottleneck was never the drawing. It was the bookkeeping for things that weren't being drawn.

There's probably a life lesson buried in there somewhere about looking after the stuff you've stopped paying attention to, but I'll leave that to whoever writes those posts. What I'll say instead is that the fix, stop tracking what nobody's looking at took the thing from unusable to instant, and needed no new hardware whatsoever. Just a different question. Not "how do I make this faster," but "what am I doing that I don't actually need to be doing at all."

The site's live now, quietly refreshing itself every Monday morning without me. Which is, genuinely, the whole point.