Ripensa all'interfaccia
Prima di tutto, un design dell'interfaccia utente che mostra 50-100.000 righe su un client non è probabilmente la migliore interfaccia utente in primo luogo. Non solo è una grande quantità di dati da inviare al cliente e che il cliente deve gestire ed è forse impraticabile in alcuni dispositivi mobili, ma ovviamente sono molte più righe di quante un singolo utente leggerà effettivamente in una determinata interazione con la pagina. Quindi, il primo ordine potrebbe essere quello di ripensare il design dell'interfaccia utente e creare una sorta di interfaccia più guidata dalla domanda (impaginata, scorrimento virtuale, digitata per lettera, ecc...). Esistono molte possibilità diverse per un design dell'interfaccia utente diverso (e si spera migliore) che riduce la quantità di trasferimento dei dati. Quale design sarebbe il migliore dipende interamente dai dati e dai probabili modelli di utilizzo da parte dell'utente.
Invia dati in blocchi
Detto questo, se dovessi trasferire così tanti dati al client, probabilmente vorrai inviarli in blocchi (gruppi di righe alla volta). L'idea con i blocchi è di inviare una quantità consumabile di dati in un blocco in modo che il client possa analizzarlo, elaborarlo, mostrare i risultati e quindi essere pronto per il blocco successivo. Il client può rimanere attivo per tutto il tempo poiché ha cicli disponibili tra i blocchi per elaborare altri eventi utente. Tuttavia, l'invio in blocchi riduce il sovraccarico dell'invio di un messaggio separato per ogni singola riga. Se il tuo server utilizza la compressione, anche i blocchi offrono maggiori possibilità di efficienza della compressione. Quanto grande dovrebbe essere un pezzo (ad es. quante righe di dati dovrebbe contenere) dipende da una serie di fattori ed è probabilmente determinato meglio attraverso la sperimentazione con i probabili client o il client con la potenza più bassa prevista. Ad esempio, potresti voler inviare 100 righe per messaggio.
Utilizza un formato di trasferimento efficiente per i dati
E, se stai usando socket.io per trasferire grandi quantità di dati, potresti voler rivisitare come usi il formato JSON. Ad esempio, l'invio di 100.000 oggetti che ripetono tutti esattamente gli stessi nomi di proprietà non è molto efficiente. Spesso puoi inventare le tue ottimizzazioni che evitano di ripetere nomi di proprietà che sono esattamente gli stessi in ogni oggetto. Ad esempio, invece di inviare 100.000 di questi:
{"firstname": "John", "lastname": "Bundy", "state": "Az", "country": "US"}
se ogni singolo oggetto ha le stesse identiche proprietà, puoi codificare i nomi delle proprietà nel tuo codice o inviare i nomi delle proprietà una volta e quindi inviare semplicemente un elenco di valori separati da virgole in un array che il codice ricevente può inserire in un oggetto con i nomi di proprietà appropriati:
["John", "Bundy", "Az", "US"]
La dimensione dei dati a volte può essere ridotta di 2-3 volte semplicemente rimuovendo le informazioni ridondanti.