2009-09-19 10 views
0

Je travaille sur un projet web qui nécessitera pas mal de mises à jour de la part de plusieurs utilisateurs et de gros volumes de données.moyen le plus efficace pour mettre à jour un site (beaucoup de données) sans actualisation?

L'ammount de données attendu est de 70 lignes uniques avec chacune 14 champs à mettre à jour régulièrement. C'est un total de 980 champs.

J'ai d'abord tenté une série de requêtes ajax synchrones à la base de données en utilisant une boucle for pour mettre à jour tous les champs. Cela a causé un grand blocage. Je dirais que pendant 20 secondes de mes 30 secondes entre les mises à jour, la page était gelée.

La tentative suivante consistait à exécuter les requêtes ajax de manière asynchrone en mettant à jour les champs dans une boucle for. Cela atténuait le ralentissement, mais je recevais des problèmes étranges. Je pense que mon changement de variable de boucle forçait les choses à être écrites sur les mauvais éléments HTML.

Actuellement, j'ai une page .asp back-end écrit le code HTML, et efface le innerHTML de la div contenant, puis définissant div.innerHTML = transport.responseText. Cela semble fonctionner assez bien pour moi, mais je suis juste curieux de savoir ce que les autres auraient fait pour mettre à jour autant de données étant donné les outils disponibles (vbscript, javascript, et une base de données Access).

Les données sur tous les postes de travail seront les mêmes, et plusieurs utilisateurs interagiront en temps réel pour éditer les données. Cependant, ils seront tous concernés par la mise à jour de leur propre partie des données, mais il est nécessaire que tout soit mis à jour et visible dans sa dernière itération par tous les utilisateurs.

Répondre

1

Un tableau HTML avec 1000 champs n'est pas une "grande quantité de données". Si vous donnez un ID à chaque cellule et obtenez les données en utilisant JSON ou CSV simple, puis mettez tout à jour avec javascript, ce serait plus rapide car le navigateur n'a pas besoin de redessiner la table et de créer de nouvelles structures DOM.

exemple por:

Imaginez que le serveur vous donne les données de cette façon: 12,234,564,423,1223,2413,133,113,5443 ...

puis en javascript vous pouvez faire:

var data = responseText.split(','); 

puis remplissez la table (supposons que les cellules du tableau ont des noms d'id comme CELL_0, CELL_1, CELL_2 ...).

for (i=0; i<data.length; i++) { 
    document.getElementById('CELL_'+i).innerHTML=data[i]; 
} 

c'est tout.

+0

Ceci est assez proche de la façon dont je le faisais auparavant. Je passais comme JSON, cependant. Le prototype eval.json est-il un appel intensif du processeur? –

+0

sur votre question, vous dites: "Actuellement, j'ai une page .asp back end écrire le code HTML, et effacer le innerHTML de la div contenant, puis en définissant div.innerHTML = transport.responseText.". Ceci est très différent de simplement mettre à jour le contenu de la cellule. Pour seulement 1000 valeurs JSON est correct. – Peter

+0

ouais ... J'essayais de mettre à jour juste le contenu de la cellule, mais j'avais des comportements vraiment bizarres, donc je l'ai fait à la place. –

0

Comment les utilisateurs sont censés interagir avec la page? Est-ce que plusieurs utilisateurs travailleront sur les mêmes données en même temps et sont-ils censés voir les résultats des autres? Vous avez tagué cet asp.net mais en mentionnant seulement pouvoir utiliser vbscript, javascript et access - comment est ce asp.net?

Éditer:

Merci pour les clarifications. Aurait-il un bouton d'édition/sauvegarde sur chaque ligne d'aide? Les lignes seraient lues seulement jusqu'à ce que l'utilisateur ait besoin d'éditer leurs données (je suppose qu'elles éditent chaque rangée) les données se régénéreraient et la rangée serait bloquée pour éditer par n'importe quel autre utilisateur. Lorsque l'utilisateur a terminé, il clique sur Enregistrer et ses données sont mises à jour, la ligne est déverrouillée et les données de la page sont actualisées. Vous pouvez en outre avoir le jeu ajax à exécuter toutes les quelques minutes pour obtenir le dernier lorsque l'utilisateur ne modifie pas activement. En outre, en fonction de la structure de vos données, vous devez uniquement obtenir les données qui ont été modifiées depuis la dernière mise à jour de la page de l'utilisateur. Pas besoin de tout avoir à chaque fois. Votre mise à jour doit également être petite, limitée aux données de la ligne de l'utilisateur en cours de modification.

+0

Je ne savais pas que je le taguais asp.net, je voulais juste le tag asp, qui ne semble pas exister. J'ai modifié le message pour plus de clarté, y compris pour répondre à votre question. –

Questions connexes