Il fatto che tu debba fare questa domanda è di per sé un grande indizio sul fatto che non esiste una risposta univoca. Se il carico impaziente fosse sempre migliore, gli sceneggiatori avrebbero trasformato il default immutabile; se fosse sempre peggio, non lo offrirebbero. Ecco alcuni aspetti della situazione che posso pensare che potrebbero essere rilevanti:
- Quanto è profondo il tuo tipico albero degli oggetti? Più oggetti fai riferimento indirettamente al primo, maggiore diventa la differenza di velocità durante il caricamento.
- Quanto è veloce la tua connessione al database? Quanto più lontano è dal tuo codice, tanto più evidente questa differenza diventa.
- Hai abbastanza RAM per archiviare i risultati tipici del caricamento ansioso? Memorizzare nella cache le cose in memoria di solito porta a un aumento generale, fino a quando non si oltrepassa un passaggio nella gerarchia della memoria - quindi può diventare drasticamente più lento. Quello che succede dipende dal tuo carico di lavoro tipico.
- Qual è il tuo modello di accesso all'entità caratteristica? Se in realtà si cammina l'albero degli oggetti connessi durante il normale funzionamento, allora il caricamento impaziente fa esattamente questo, e più veloce di quanto farebbe l'ingenua query del database. Se gli accessi sono imprevedibili e vogliono solo leggere nodi molto specifici nella tua rete di oggetti, possono creare un sovraccarico di grandi dimensioni per un uso limitato.
Come sempre in questi casi, la tecnica è utile in alcune situazioni e la sovraingegneria negli altri. Solo tu, con la conoscenza specializzata delle tue reali esigenze, puoi dire quale è per te - e come sempre, di solito non puoi dire senza misurare.