Ho avuto un problema simile in cui avevamo bisogno di visualizzare informazioni su auto e altri prodotti strutturati come un albero (marca automobilistica - > model - > type - > build year). Anche se il browser fosse in possesso di molti dati (non è sicuro), ci sarebbe voluto del tempo per scaricarlo.
Cosa ho fatto: carica il primo livello e carica altri livelli tramite Ajax solo quando è effettivamente necessario per la visualizzazione. Dal momento che dovevamo visualizzare questo come un menu e mostrare il livello successivo molto velocemente con il mouse sui possibili risultati in cui è memorizzato nella cache sul server (se hai bisogno di un ordinamento specifico questo potrebbe diventare un problema).
Lo stesso vale per la ricerca e l'ordinamento. Lascia che sia il server a farlo e carica i risultati. Non dovrai ordinare l'intera struttura in una vista ad albero, ma solo su un livello. Ovviamente questa può essere la parte più difficile a seconda di come sono strutturati esattamente i dati e quali tipi di ricerca e ordinamento si desidera fare.
Anche in una vista ad albero le persone non avranno tutti i nodi aperti in una sola volta, questo è un problema da gestire e sarà necessario scorrere continuamente. È comunque possibile caricare i primi due livelli se la quantità di dati lo consente e quindi caricare il livello tre se il livello due è aperto per alcuni articoli. Quindi questo può essere gestito in base alle tue esigenze.
Anche se il caricamento su richiesta non funzionasse per te, puoi ancora caricare il livello uno e successivamente quando il documento è caricato avvia qualche processo in background che carica i livelli più profondi uno per uno. Molto probabilmente funzionerà più velocemente di quanto l'utente possa scorrere verso il basso.