Il modo più semplice per rendere un'app Rails veloce è non rifare il lavoro costoso. Rails.cache.fetch calcola una volta e ricorda.
def statistiche_lanci
Rails.cache.fetch("stats/launches", expires_in: 1.hour) do
{
totale: Launch.count,
per_anno: Launch.group_by_year(:net).count,
successi: Launch.success.count,
}
end
end
La prima chiamata esegue il blocco (le query pesanti) e salva il risultato; le successive, per un'ora, restituiscono il valore memorizzato in millisecondi. Alla scadenza si ricalcola.
La domanda giusta è: "questo dato è costoso da produrre e cambia di rado?". Se sì, è un candidato perfetto per la cache. Statistiche, classifiche, risposte di API esterne.
Attento a due cose: scegliere una chiave che identifichi bene il dato, e invalidare la cache quando i dati cambiano davvero. Il caching è potente, ma dati vecchi mostrati come nuovi sono un bug.