Avevo già segnalato la cosa, la ripropongo.
La base del problema è semplice: 1000 richieste al db, ognuna per chiedere un singolo record, impiegano MOLTO più tempo di un unica richiesta per chiederne 1000.
Quindi, se io ho un tabella di 1000 clienti e una tabella di 1000 ordini, e nel pannello ordini vi è un campo di lookup per mostrare il cliente padre, assisto a queste tempistiche (semplificate, ovviamente)
prima chiamata del pannello ordini:
- 200ms per caricare la tabella ordini
- 50ms x 40 lookup query = 2000ms per decodificare i nomi dei clienti (ho preso 40 come valore ragionevole per un pannello ben popolato)
TOTALE: 2200ms
seconda chiamata al pannello ordini
- 200ms per caricare tabella ordini
- 0ms per la decodifica, è già tutto in cache
TOTALE: 200ms
Ora, se io potessi precaricare la cache dei clienti, avrei (ragionevolmente) queste performance:
prima chiamata del pannello ordini:
- 200ms per caricare la cache dei clienti
- 200ms per caricare la tabella ordini
TOTALE: 400ms
Detto tutto ciò, si potrebbe avere una funzione proprio di questo tipo?
Non credo sia eccessivamente complessa da implementare
Ho provato anche qualche soluzione fai da te, tipo caricare una collection di clienti prima, ma non sembra avere effetto.