2009-09-25 5 views
2

Je suis continuellement en tirant une liste (plus de 200) entrées à partir d'un serveur distant et en les montrant dans un tableau (plusieurs morceaux de données par ligne). Les données changent et fluctuent au fil du temps. Quel est le moyen le plus efficace dans JS pour le rendre à l'écran. Au fur et à mesure que les données changent, j'efface simplement mon DOM et le restitue avec les nouvelles données; ai-je une liste d'identifiants qui mettront simplement à jour les entrées correctes?Un moyen efficace d'afficher beaucoup d'informations en Javascript

Son déjà trié et filtré pour être les informations correctes (côté serveur) donc c'est juste l'afficher à l'utilisateur qui me concerne.

Toutes les suggestions seraient utiles. J'utilise jQuery pour mes demandes mais cela peut être changé. J'ai besoin de connaître le moyen le plus rapide (en termes de latence) d'extraire ce grand ensemble de données et de l'afficher dans un format tabulaire.

Éditer: La pagination n'est pas possible dans ce scénario. Edit2: Le backend est Python (WSGI) exécuté dans un équilibreur de charge et est capable de débusquer 600 reqs/seconde. Les données sont seulement disponibles en JSON et le backend est plus une API.

Répondre

1

Utilisez-vous des tables HTML? Il y a quelque temps, j'ai croisé un blog Microsoft de l'équipe d'IE indiquant que les tables de rendu sont lentes. Très lent. Le ré-rendu de la table entière à chaque fois sera probablement plus lent que la mise à jour de ses valeurs, mais ce n'est qu'une estimation.

En fait, mon opinion ici est que la mise à jour des valeurs sera plus rapide que le re-rendu des éléments dans la page. Pour optimiser votre latence, vous pouvez conserver un hachage d'objets mappés, vous n'avez donc pas besoin de rechercher le DOM chaque fois que vous mettez à jour les valeurs.

+0

Les tables de rendu sont lentes. La taille dépend de beaucoup de facteurs, et il faut un certain nombre de recalculs pour obtenir les dimensions finales. – Dykam

+0

Il est toujours recommandé de séparer les données de l'affichage. Conservez vos données dans un tableau, puis mettez à jour uniquement les champs de la table qui ont été modifiés. Vous pouvez facilement lier une cellule à une valeur de tableau. Par exemple: array [4] [2] contient la valeur de la 4ème ligne/2ème colonne. – Mike

+0

La vérification des valeurs mises à jour/sales prendrait plus de temps que la mise à jour complète, je suppose. Mais je suppose que mapper une position (array [4] [2]) à l'élément DOM (2nd td à partir du 4ème tr) le rendrait plus rapide, puisque vous n'aurez pas à le rechercher encore et encore. – wtaniguchi

1

Si votre liste de données devient vraiment volumineuse, pensez à ne pas afficher toutes ces données à la fois pour l'utilisateur (si cela est possible dans votre situation). Non seulement l'utilisateur sera perdu à regarder autant de données, mais le navigateur devra rendre toute la liste et vous ralentir.

Vous ne mentionnez pas la technologie côté serveur que vous utilisez. Si vous êtes dans .Net, il existe deux contrôles ASP.Net qui utilisent un pager de données (comme une vue de grille). Il existe également un objet PagedDataSource que vous pourriez utiliser (qui peut être utilisé avec n'importe quel contrôle ASP.Net possédant une propriété DataSource). Les deux vont diviser vos données en pages, et seule la page vue sera rendue en même temps. Cela réduit considérablement la latence.

Questions connexes