Even with the speedups gained from computing all synergies for a given card at once (rather than commander-by-commander), plus only updating if the score has changed, it takes almost an hour to run.
Ideas:
Refresh synergies only once a week
Like (1), but refresh top synergies a little more frequently
Compute synergy on demand and store it (but this would make the first page load for any commander really slow)
Cull some of the work, for example, is it really synergy if there's a commander with only one deck and a card is unique to that deck?
Even with the speedups gained from computing all synergies for a given card at once (rather than commander-by-commander), plus only updating if the score has changed, it takes almost an hour to run.
Ideas: