Repenser l'interface
Tout d'abord, une conception d'interface utilisateur qui affiche 50 à 100 000 lignes sur un client n'est probablement pas la meilleure interface utilisateur en premier lieu. Non seulement il s'agit d'une grande quantité de données à envoyer au client et à gérer par le client et ce n'est peut-être pas pratique sur certains appareils mobiles, mais il s'agit évidemment de beaucoup plus de lignes qu'un seul utilisateur ne lira réellement dans une interaction donnée avec la page. Ainsi, la première commande pourrait être de repenser la conception de l'interface utilisateur et de créer une sorte d'interface plus axée sur la demande (paginée, défilement virtuel, saisie par lettre, etc.). Il existe de nombreuses possibilités différentes pour une conception d'interface utilisateur différente (et, espérons-le, meilleure) qui réduit la quantité de transfert de données. La meilleure conception dépend entièrement des données et des modèles d'utilisation probables par l'utilisateur.
Envoyer des données par blocs
Cela dit, si vous deviez transférer autant de données au client, vous voudrez probablement l'envoyer par blocs (groupes de lignes à la fois). L'idée avec les morceaux est que vous envoyez une quantité consommable de données dans un seul morceau de sorte que le client puisse l'analyser, le traiter, afficher les résultats, puis être prêt pour le prochain morceau. Le client peut rester actif tout le temps car il dispose de cycles disponibles entre les blocs pour traiter d'autres événements utilisateur. Mais, l'envoyer en morceaux réduit la surcharge liée à l'envoi d'un message séparé pour chaque ligne. Si votre serveur utilise la compression, les morceaux donnent également une plus grande chance d'efficacité de compression. La taille d'un bloc (par exemple, le nombre de lignes de données qu'il doit contenir) dépend d'un ensemble de facteurs et est probablement mieux déterminée par l'expérimentation avec des clients probables ou le client attendu avec la plus faible puissance. Par exemple, vous pouvez envoyer 100 lignes par message.
Utilisez un format de transfert efficace pour les données
Et, si vous utilisez socket.io pour transférer de grandes quantités de données, vous voudrez peut-être revoir la façon dont vous utilisez le format JSON. Par exemple, envoyer 100 000 objets qui répètent tous exactement les mêmes noms de propriété n'est pas très efficace. Vous pouvez souvent inventer vos propres optimisations qui évitent de répéter des noms de propriété qui sont exactement les mêmes dans chaque objet. Par exemple, plutôt que d'en envoyer 100 000 :
{"firstname": "John", "lastname": "Bundy", "state": "Az", "country": "US"}
si chaque objet a exactement les mêmes propriétés, vous pouvez soit coder les noms de propriété dans votre propre code, soit envoyer les noms de propriété une fois, puis simplement envoyer une liste de valeurs séparées par des virgules dans un tableau que le code de réception peut mettre dans un objet avec les noms de propriété appropriés :
["John", "Bundy", "Az", "US"]
La taille des données peut parfois être réduite de 2 à 3 fois en supprimant simplement les informations redondantes.