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

JavaScript Discussion :

[DOM] Ajax et appel récurrent


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 28
    Points : 27
    Points
    27
    Par défaut [DOM] Ajax et appel récurrent
    Bonjour

    J'ai fait une petite appli qui va lire en ajax des données sur le serveur. J’ai besoin de lire ces données à intervalle régulier, Pour le rafraichissement j'ai utilisé la fonction
    function timer(){
    UpdateStatus();
    id=setTimeout("timer()",vdelai);
    avec setTimeout
    Ca marche très bien.
    Cependant si je laisse tourner la page quelques minutes sans intervenir le système se bloque et ne répond plus même si j’utilise clearTimeout
    J’ai aussi fait un essai avec set intervalle même résultat
    Lorsque je veux sortir de la page j’ai le message suivant
    -------------------------------------------------------------------------------------------------------------------------------------
    Windows Internet Explorer
    Arrêter l'exécution de ce script ?
    Un script présent sur cette page ralentit Internet Explorer.
    S'il continue, votre ordinateur risque de cesser de réagir.
    ---------------------------
    Oui Non
    Si quelqu’un avait une idée, une piste, je le remercie d’avance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 89
    Points : 102
    Points
    102
    Par défaut
    Salut,

    Le "vdelay" n'est pas trop court ?
    L'appel Ajax se fait en synchrone ou asynchrone (dans ce cas, il faudrait utiliser de préférence de l'asynchrone).
    La réponse du serveur est bien recue ? comment est-elle traitée ? Les traitements n'interfèrent pas entre eux (ce qui pourrait éventuellement créer des boucles sans fin, etc...) ?
    Le problème se pose-t-il avec un autre navigateur ?

    Si tu peux nous donner une page de test en ligne, ce serait plus simple pour t'aider.

  3. #3
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par JulienC Voir le message
    Si tu peux nous donner une page de test en ligne, ce serait plus simple pour t'aider.
    +1

    Que fais la méthode updateStatus?

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 28
    Points : 27
    Points
    27
    Par défaut Mise en ligne
    Citation Envoyé par JulienC Voir le message
    Salut,

    Le "vdelay" n'est pas trop court ?
    L'appel Ajax se fait en synchrone ou asynchrone (dans ce cas, il faudrait utiliser de préférence de l'asynchrone).
    La réponse du serveur est bien recue ? comment est-elle traitée ? Les traitements n'interfèrent pas entre eux (ce qui pourrait éventuellement créer des boucles sans fin, etc...) ?
    Le problème se pose-t-il avec un autre navigateur ?

    Si tu peux nous donner une page de test en ligne, ce serait plus simple pour t'aider.
    Le problême se pose aussi avec mozilla, il n'y a aucun message mais on perd la main
    Je fais un petite install pour que vous puissiez mieux vous rendre compte

    Merci

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 28
    Points : 27
    Points
    27
    Par défaut Ajax appel reccurent
    Bonjour

    Je reposte aujourd'hui le message posté la semaine dernière (voir ci dessous)
    message déjà posté la semaine dernière
    'ai fait une petite appli qui va lire en ajax des données sur le serveur. J’ai besoin de lire ces données à intervalle régulier, Pour le rafraichissement j'ai utilisé la fonction
    function timer(){
    UpdateStatus();
    id=setTimeout("timer()",vdelai);
    avec setTimeout
    Ca marche très bien.
    Cependant si je laisse tourner la page quelques minutes sans intervenir le système se bloque et ne répond plus même si j’utilise clearTimeout
    J’ai aussi fait un essai avec set intervalle même résultat
    Lorsque je veux sortir de la page j’ai le message suivant
    -------------------------------------------------------------------------------------------------------------------------------------
    Windows Internet Explorer
    Arrêter l'exécution de ce script ?
    Un script présent sur cette page ralentit Internet Explorer.
    S'il continue, votre ordinateur risque de cesser de réagir.
    ---------------------------
    Oui Non
    Si quelqu’un avait une idée, une piste, je le remercie d’avance

    Complément posté aujourd'hui
    J'ai mis en ligne l'appli à http://alain.gallay.free.fr/flashelek/Index.htm
    Il faut rester sur la même page au moins 10 mn pour constater le pb
    Pour répondre aux questions qui m'ont été posées
    L'appel est asynchrone
    Le "vdelay" est de 2 secondes
    updateStatus est la partie ajax, elle ramène une page contenant des variables que je traite en affichage. Ces variables sont une photographie de l'état de chaque lampe composant une ligne de flash. Il s'agit de gérer une ligne de flash qui s'allume a intervalles réguliers paramétrables+ intensité paramétrable etc...
    Le pb se pose aussi bien avec mozilla qu'avec IE avec IE j'ai un message comme décrit ci dessus avec mozilla pas de message mais je reste planté.
    Les traitements n'interfèrent pas entre eux, je n'ai qu'une boucle qui se répète indéfiniment (timer()) mais qui au bout d'un moment ne veut plus s'arrêter.
    Les boutons qui permettent d'appeler une autre page commencent toyus par un clearTimeout(id)

    Merci pour l'éventuel coup de main

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 89
    Points : 102
    Points
    102
    Par défaut
    Salut,

    Premièrement : pourquoi avoir fait un nouveau post si ce n'est pour polluer le forum ? une mise à jour de l'ancien aurait très bien suffit, et même aurait été plus pratique (on aurait pu suivre la discussion).

    Deuxièmement : tu as dans ton code une variable "Garbage" qui semble être un grand tableau. Qui, ou qu'est-ce qui, gère cette variable ? (J'ai cru voir que tu utilisais un framework). Elle grossit à vue d'œil et représente certainement une fuite mémoire. Pour moi, il ne fait aucun doute que le problème vient de là.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 28
    Points : 27
    Points
    27
    Par défaut fuite mémoire
    Désolé d'avoir "pollué", ca n'était pas l'objectif

    J'utilise Mootools, Je ne m'explique pas la fuite mémoire le grand tableau dont tu parles c'est je pense le tableau html dans lequel je range toutes les valeurs que je récupères du serveur par ajax.

    j'appelle une fonction construitTableau à chaque recupération des donnée (timer) voici le texte de la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    function construitTableau() {
     
     
    	var i=0;
     
    	vhtml='<table id="Tableflashes" class="cache">';
    	vhtml+='<tr>';
    	vhtml+='<th class="">'+libelleNoCarte+'</th>';
    	vhtml+='<th class="cache">'+libelleMSB+'</th>';
    	vhtml+='<th class="">'+libelleMarcheArret+'</th>';
    	vhtml+='<th class="">'+libelleBrillance2+'</th>';
    	vhtml+='<th class="">'+libelleErreur+'</th>';
    	vhtml+='<th class="cache">'+libelleLSB+'</th>';
    	vhtml+='<th class="">'+libelleMode+'</th>';
    	vhtml+='<th class="">'+libelleMaitreEsclave+'</th>';
    	vhtml+='<th class="">'+libelleInterval+'</th>';
    	vhtml+='<th class="">'+libelleRepetition+'</th>';
    	vhtml+='</tr>';
    	for(var i=1;i<=nbFlashes;i++) {
    		vhtml+='<tr>';
    		vhtml+='<th><button id="button'+i+'" class="bt_tab" type="button" onClick="finTimer();GetServerFile('+simpleQuote+'3?20='+i+simpleQuote+','+simpleQuote+simpleQuote+');">'+i+'</button></th>';
    		vhtml+='<td id="var_21_'+i+'" class="cache">&nbsp;</td>';
    		vhtml+='<td id="var_29_marche_'+i+'" class="">&nbsp;</td>';
    		vhtml+='<td id="var_21_brillance_'+i+'" class="">&nbsp;</td>';
    		vhtml+='<td id="var_21_erreur_'+i+'" class="">&nbsp;</td>';
    		vhtml+='<td id="var_22_'+i+'" class="cache">&nbsp;</td>';
    		vhtml+='<td id="var_22_mode_'+i+'" class="">&nbsp;</td>';
    		vhtml+='<td id="var_22_maitre_'+i+'" class="">&nbsp;</td>';
    		vhtml+='<td id="var_22_interval_'+i+'" class="">&nbsp;</td>';
    		vhtml+='<td id="var_22_repetition_'+i+'" class="">&nbsp;</td>';
    		vhtml+='</tr>';
    	}
    	vhtml+='</table>';
    	$('flashes').innerHTML=vhtml;
    }
    Je ne vois pas ou il pourrait y avoir une fuite memoire.
    Comment pourrais je avancer pour identifier cette Fuite ?

    Merci

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 89
    Points : 102
    Points
    102
    Par défaut
    OK,
    donc apparemment, si ce n'est pas toi qui gère la variable "Garbage", c'est Mootools, que je ne connais absolument pas, qui crée cette variable ("Garbage" est le nom de la variable). Ce serait donc Mootools qui crée le problème

    Ne connaissant pas Mootools ni son fonctionnement, je ne pourrais pas t'aider plus (il faudrait voir sur leur forum, s'ils en ont un, ou contacter le créateur de Mootools).

    Ce que je peux te dire, c'est que je vois la création de ce tableau (et la fuite mémoire) grace à Firebug (sous Firefox). Ouvres l'onglet "DOM" et regardes la taille du tableau Garbage : elle ne fait qu'augmenter et ne se vide jamais.
    Peut-être existe-t-il une fonction définie par Mootools pour vider la variable Garbage.

Discussions similaires

  1. [DOM]ordre des appels DOM et visualisation selon les navigateurs
    Par Herode dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 06/01/2007, 11h28
  2. [AJAX] et appel de fonction
    Par biozaxx dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 29/11/2006, 10h53
  3. [AJAX] [php] appel de fonction php dans evenement
    Par nicerico dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 20/11/2006, 12h01
  4. [AJAX] probleme appelle page XML sur autre serveur
    Par ldcarpathes dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 14/08/2006, 18h35
  5. [DOM] [Ajax]responseXML et méthodes DOM
    Par Herode dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 24/07/2006, 20h19

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