IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

[AJAX] Barre de progression de chargement serveur


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de lightbulb
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 108
    Par défaut [AJAX] Barre de progression de chargement serveur
    Bonjour à tous,
    Pour vous placer dans le contexte je travail sur un module qui permet de créer des documents csv (excel) à partir d'une base de données, ces fichiers font plusieurs dizaines de milliers d'enregistrement.

    Comme vous pouvez l'imaginer le temps de chargement est plutôt long et j'aimerai créer une barre de chargement assez évoluée qui afficherai le pourcentage de tuples traités.

    Malheureusement je ne vois pas bien comment faire, mais voila ma première approche :
    1- Le fichier de génération met à jour une variable de session dans la boucle de remplissage des fichiers
    2- A partir de ma page de départ j'appelle ma page de génération en AJAX.
    3- Au même moment je place un setInterval sur une autre fonction AJAX qui me ramène la valeur de la session sensée avoir été mise à jour par le serveur.

    L'idée est que les sessions sont stockées sur le serveur, malheureusement le résultat est un ensemble de réponses vides jusqu'à ce que la page soit chargée et donc la liste terminée. A partir de ce moment la effectivement, la session contient les dernière valeurs de bouclage...

    Contrairement à ce que je pensais les sessions ne sont mises à jour qu'une fois la page chargée, à mon grand regret...

    Du coup je vois mal comment faire pour faire communiquer le client et le serveur pendant que celui-ci réalise une action.

    Si vous avez des idées, je suis preneur !

    Merci =)

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 105
    Par défaut
    Salut l'idée de stocker l'état de ta requête dans une variable de session, il fallait y penser ....
    Cependant, pour que ça marche, tu devrais créer une fonction ajax qui va appeler le script php pour modifier la valeur de la variable de session.

    Alpha.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 105
    Par défaut
    J'ai dit une bêtise dans le msg précédent. Effectivement, le code php est exécuté par le serveur en une fois.
    Cependant, tu as une autre possibilité:
    Il s'agit de fractionner ta procédure de création de fichier, en utilisant ajax.
    A l'aide d'une procédure ajax, tu va chercher le nbre d'enregistrements que tu vas traiter.

    Ensuite, si tu veux une progression par 5%, tu crée ton document csv en 20 fois, via ajax, et tu mets à jour à chaque pas de 5% ta barre de progression.

    Donc si tu as 10.000 enregistrements, par ex, tu divise 10.000 par 20 cela fait 500 , et tu traites 500 enreg à la fois.

    Je pense que cela pourrait fonctionner.

    Alpha.

  4. #4
    Membre confirmé Avatar de lightbulb
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 108
    Par défaut
    Salut, merci pour ta réponse !
    Afin de valider le fait que php, asp créent le document en une seule fois j'ai tenté de faire un transfert d'information via un simple fichier texte qui est rempli et consulté de la même façon que je l'ai fait avec ma variable de session.

    Suspens....

    Rien n'y fait, tu as raison côté serveur le code est bien exécuté en une fois et les fichiers et variables ne sont disponibles qu'à la fin de cette exécution...

    Effectivement un pas de 5% me semble raisonnable, je vais fractionner de la sorte !

    Merci pour l'aide ! =)

  5. #5
    Membre confirmé Avatar de lightbulb
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 108
    Par défaut
    Nouvelle problématique,
    J'ai divisé le traitement en n pas afin de permettre au serveur d'actualiser les variables de sessions qui sont récupérés par un script AJAX sous interval.

    Le gros problème c'est que déjà je trouve pas ça propre. Une boucle de redirection plusieurs 10ènes de fois de suite, ça fait bricolo, mais en plus Firefox et chrome empêchent de faire plus de 20 redirections et IE je crois qu'à la première ça déconne O_o'

    J'ai modifié la config de mon firefox pour qu'il puisse faire plus de redirection, ça marche impeccable, rien à redire. Malheureusement les personnes qui vont utiliser ce logiciel n'ont absolument aucune connaissance en informatique et je ne pense pas qu'ils aillent voir dans le about:config de firefox...

    La question est donc comment faire autrement?

    Il y a bien un moyen pour permettre au serveur de communiquer avec le client pendant un traitement quand même !!!

    Merci

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 139
    Par défaut
    Je ne l'ai jamais fait, mais voilà une piste : utiliser Apache pour lancer une commande PHP

    Ton premier appel Ajax lance un script coté serveur (ajax.php?id=123456) qui exécute en ligne de commande système un autre script (traitementServeur.php) avec un paramètre unique propre au client web (123456) qui permettra de l'identifier (je ne sais plus comment on passe des paramètres à un script en ligne de commande) php5 /var/www/[...]traitementServeur.php id=123465 etc.

    traitementServeur.php met à jour une entrée dans un table de BDD identifiée par l'id et contenant le pourcentage de traitement. Comme il boucle pour créer ton CSV, il le connait.
    Quand traitementServeur.php a fini, il flag l'enregistrement comme fini d'une manière ou d'une autre et écrit le fichier sur le disque dur

    ajax.php?id=123456 regarde si il existe un enregistrement dans la table en donnant son ID : si il n'y a rien, il lance le traitement, si il y a quelque-chose il prend le pourcentage et le donne au navigateur. Si l'enregistrement est flagué comme fini, il retourne une autre valeur au javascript qui modifie le DOM pour proposer le fichier au téléchargement via une 3è méthode qui cherche le fichier depuis le disque dur

Discussions similaires

  1. Barre de progression - de chargement
    Par mitmal dans le forum ImageJ
    Réponses: 3
    Dernier message: 28/03/2011, 11h07
  2. [AJAX] barre de progression ajax
    Par osuwariboy dans le forum AJAX
    Réponses: 17
    Dernier message: 05/11/2010, 14h17
  3. [AJAX] barre de chargement
    Par bb62 dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 07/11/2008, 15h46
  4. [AJAX] Utilisation d'un barre de progression
    Par pierrot10 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/03/2008, 16h22
  5. Barre de progression et chargement d'images
    Par buzzkaido dans le forum Interfaces Graphiques en Java
    Réponses: 10
    Dernier message: 19/09/2006, 16h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo