Caricare tutti i dati contemporaneamente non è necessariamente pessimo, nel senso che ha molti vantaggi in termini di prestazioni. Tuttavia, userei questo metodo solo se:
- Ero sicuro al 100% che questo elenco non sarebbe cresciuto di grandi quantità
- Memorizzo i dati non attualmente mostrati in oggetti javascript (in altre parole, non sovraccarichi il browser oltre alla memoria effettiva necessaria per tenerlo).
Il più delle volte, non posso garantire che l'elenco non cresca, quindi di solito devo attenermi alla seconda soluzione che hai menzionato. Carica per pagina su richiesta. Ciò significa anche che non è possibile effettuare la ricerca utilizzando gli elementi disponibili a meno che la ricerca di elementi nella pagina corrente sia accettabile. La ricerca deve eseguire la sua query sul database separata dalla cache che hai.
Non mi preoccuperei di memorizzare nella cache le pagine che hai già caricato, dal momento che ogni quanto ritorni alle pagine precedenti dopo averle viste? Non vale la perdita della memoria a mio modesto parere. Piuttosto, ti consiglierei di caricare più pagine contemporaneamente anziché solo una alla volta. Quando l'utente fa clic su Avanti e non viene caricato nulla, si recuperano le 4 pagine successive. In questo modo, nulla deve essere recuperato per il seguente 3. Questa è già una soluzione che soddisferà la maggior parte dei tuoi requisiti e sarà comunque 4 volte più efficiente di scaricare una pagina alla volta.
Se vuoi diventare ancora più sofisticato, useresti AJAX per caricare la pagina successiva una volta che l'utente ha caricato la pagina corrente. Devi solo controllare che la pagina successiva sia già stata caricata prima di mostrare la pagina successiva, il che, spero, sarà sufficiente per il tempo che sarà già stato caricato. E nel caso in cui non è stato ancora caricato, è possibile mostrare una sorta di animazione di caricamento per fornire un feedback all'utente che si sta attualmente lavorando su di esso. Questo ha le migliori prestazioni di tutte le soluzioni, tuttavia è anche la più difficile da implementare.
Spero che ti aiuti!