Utilser correctement clearintervall ?

Messages postés
26
Date d'inscription
vendredi 10 avril 2009
Statut
Membre
Dernière intervention
16 juillet 2009
- - Dernière réponse : kankrelune
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015
- 17 juil. 2009 à 20:36
bonjour à tous ,

je vous explique mon soucis :

 j ' ai un petit probleme d ' utilisation de la fonction clearinterval dans mon code .

j ' utilise un raffraichissement auto de ma shoutbox par l ' intermediare de XMLHttpRequest et set interval pour faire cela toutes les x secondes .

tout cela marche à merveille , mais le probleme est que certains membres oublie de fermer leur navigateur et consomme donc des ressources inutilement .

je voudrais donc pouvoir dire au navigateur du membre que au bout d' une heure il arrete de faire les mises àjour de la div .
d ' ou je pense qu ' il faut utiliser la fonction clear intervall .

maintenant voilà le code que j ' utilise pour actualiser la div :

var shoutbox_refresh;
function auto_refresh() {
/*active le refresh de la shoutbox toute les X secondes*/
    shoutbox_refresh=setInterval(refresh(),120000);
}

j ' ai testé cela pour arreter mais ça ne marche pas apres plusieurs essais rien à faire .

var timer;
var test;
function stop_auto_refresh(duree) {
    test=clearInterval(shoutbox_refresh);
    duree==0?clearTimeout(timer):timer = setTimeout(test,duree);
}

j ' ai du loupé un truc mais je ne vois plus rien un peu d ' aide serait tres appreciée .
Afficher la suite 

20/21 réponses

Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
Bonjour,

t'as pensé à :
si le visiteur a fermé son navigateur ou s'il est parti vers un autre site :
ça n'existe plus !!, ton clearInterval est coté client !

tu sembles mélanger allègrement (?) setInterval et setTimeout....
pour l'un comme pour l'autre :
var timid=setTimeout ==> clearTimeout(timid)
var timid=setInterval ==> clearInterval(timid)

Cordialement [mon Site] [M'écrire] Bul
Commenter la réponse de Bul3
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
à mon avis, tu as le même souci que de savoir si
un visiteur a quitté le site
( pour un compteur de visiteurs actuellement connectés  par exemple )

à part, "s'il n'a pas eu d'activité depuis un certain temps",
pas sûr qu'il existe une autre approche !
coté serveur ! pas client.
Commenter la réponse de Bul3
Messages postés
26
Date d'inscription
vendredi 10 avril 2009
Statut
Membre
Dernière intervention
16 juillet 2009
0
Merci
je ne vois pas trop ce que tu veux dire par  "tu sembles mélanger allègrement (?) setInterval et setTimeout...."

j ' utilise le settimeout pour me donner un delai d ' une heure et lancer le clear intervall afin de ne plus faire d' autorefresh.

je crois etre dans le vrai .

par contre si le membre ferme son navigateur tout cela continue sur mon serveur c' est ce que tu veux dire par
"t'as pensé à :
si le visiteur a fermé son navigateur ou s'il est parti vers un autre site :
ça n'existe plus !!, ton clearInterval est coté client !" ??
Commenter la réponse de iznobe2601
Messages postés
26
Date d'inscription
vendredi 10 avril 2009
Statut
Membre
Dernière intervention
16 juillet 2009
0
Merci
si le client n ' est plus connecté sur mon serveur le serveur ne continue quand meme pas de lui envoyer les pages d ' autorefresh de la shoutbox ???

j ' ai un doute maintenant .
Commenter la réponse de iznobe2601
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
>>si le client n ' est plus connecté sur mon serveur le serveur ne continue
>>quand meme pas de lui envoyer les page
une fois à priori.... puisque coté client, le setTimeout ou setInterval est mort

>>shoutbox_refresh=setInterval(refresh(),120000);
t'es sur de la syntaxe ?
shoutbox_refresh=setInterval("refresh()",120000); ou
shoutbox_refresh=setInterval(refresh,120000);

>>duree==0?clearTimeout(timer):timer = setTimeout(test,duree);
t'es sur de ta syntaxe ?
je ne vois pas ce que tu veux faire ?
on fait "normalement" var variable = (test) ? 'si vrai' : 'si faux' ;
mais bon...
Commenter la réponse de Bul3
Messages postés
26
Date d'inscription
vendredi 10 avril 2009
Statut
Membre
Dernière intervention
16 juillet 2009
0
Merci
il est vrai que pour la syntaxe il manque les "" .

shoutbox_refresh=setInterval("refresh()",120000); ceci est corrigé firebug me l ' avait signalé . merci quand meme .

et là en fait  "duree==0?clearTimeout(timer):timer = setTimeout(test,duree);"

si ma variable durée est egale à 0 je supprime le timer sinon je place mon timer pour annuler l ' autorefresh.

ça me permet en fait par un bouton manuel de raffraichissement de relancer un nouveau timer apres avoir supprimé en faisant stop_auto_refresh(0); dans le HTML .
Commenter la réponse de iznobe2601
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015
0
Merci
"Aucun" interêt le setTimeout... si je reste (activement) sur la page 1h tu fais quoi... ton timeout s'éxecutera et je ne pourrais plus me servir du chat... .. .

Le mieux c'est de coupler ça au system d'auth de ton site... si la session tombe le chat aussi... .. .

@ tchaOo°

l'homme est un loup pour l'homme... .. .
Commenter la réponse de kankrelune
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
j'avais mal lu pour duree==...

revenons à nos moutons :
>>mais le probleme est que certains membres oublie de fermer
>>leur navigateur et consomme donc des ressources inutilement
donc... il te faut tester l'inactivité du visiteur !
Commenter la réponse de Bul3
Messages postés
26
Date d'inscription
vendredi 10 avril 2009
Statut
Membre
Dernière intervention
16 juillet 2009
0
Merci
@ [../auteur/KANKRELUNE/377168.aspx kankrelune] justement le but c' est de limiter les utilisateurs non actifs sur le chat ,

et je met un bouton manuel derafraichissementqui me supprime et me relance le timer juste apres pour palier au cas ou le membre est actif pendant plus d' une heure .( pas top mais mieux que rien )

faudrait lire un minimum quand meme avant de repondre .

comment peut on faire pour tester l ' inactivité des membres ?

je n ' ai ce probleme que sur une seule page du site : celle de la shoutbox .
Commenter la réponse de iznobe2601
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015
0
Merci
"faudrait lire un minimum quand meme avant de repondre"

Et bien justement relis moi avant de monter au créneau... .. !

@ tchaOo°

l'homme est un loup pour l'homme... .. .
Commenter la réponse de kankrelune
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
>>faudrait lire un minimum quand meme avant de repondre .

tu causes à qui là ?
[../auteur/KANKRELUNE/377168.aspx kankrelune] ou moi ne cherchons qu'à t'aider
quelqu'un qui tente d'aider, même en disant des
bêtises, je parle pour moi ! ça m'arrive plus souvent
qu'à mon tour, ben il tente d'aider et ça aide malgré tout !
Commenter la réponse de Bul3
Messages postés
26
Date d'inscription
vendredi 10 avril 2009
Statut
Membre
Dernière intervention
16 juillet 2009
0
Merci
en plus je n ' arrete pas l ' utilisation du chat mais seulement le rafraichissement auto
Commenter la réponse de iznobe2601
Messages postés
26
Date d'inscription
vendredi 10 avril 2009
Statut
Membre
Dernière intervention
16 juillet 2009
0
Merci
[../auteur/BUL3/812304.aspx @ Bul3 ]
oui je suis entierement d' accord , mais quand meme il faut lire un minimum

je m ' adressais à [../auteur/KANKRELUNE/377168.aspx kankrelune.]

@ [../auteur/KANKRELUNE/377168.aspx kankrelune]
je ne monte pas au creneau mais je ne vois pas vraiment le rapport entre ta reponse et ma question c' est tout et j ' ai encore relu,  desolé et merci de vouloir m ' aider .
Commenter la réponse de iznobe2601
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015
0
Merci
"en plus je n ' arrete pas l ' utilisation du chat mais seulement le rafraichissement auto"

Pour moi c'est pareil un chat qui ne se rafraichit pas j'appels ça un forum... .. . ;o)

Bref tu te prend la tête à mon avis... il va falloir jongler avec les event et/ou les cookies pour détecter l'utilisateur inactif de celui qui est actif mais ne change pas de page... ce n'est à mon avis pas à javascript de faire ça... donc je réitère... tu fais un contrôle via les sessions coté serveur... .. .

A la limite en js le plus simple et le moins crade serait de mettre à jour ton timeout lorsque l'utilisateur poste un message... mais bon... c'est du bricolage... .. .

@ tchaOo°

l'homme est un loup pour l'homme... .. .
Commenter la réponse de kankrelune
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
il faut surtout un minimum de savoir vivre quand quelqu'un aide
Commenter la réponse de Bul3
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
>>détecter l'utilisateur inactif...
>>ce n'est pas à javascript de faire ça...
[../auteur/KANKRELUNE/377168.aspx kankrelune]++
Commenter la réponse de Bul3
Messages postés
26
Date d'inscription
vendredi 10 avril 2009
Statut
Membre
Dernière intervention
16 juillet 2009
0
Merci
je suis tres novice et j ' avoue que lorsqu ' on me parle de sessions , meme si je sais ce que c ' est , je ne crois pas que mon site est un systeme de session en place .

je me vois mal refaire tout un systeme de sessions expres pour ça .

voilà pour quoi je me suis tourné vers une solution moins " propre" mais qui pourrait limiter les degats des utilisateurs qui ne ferme pas leurs navigateurs ou qui ont plusieurs onglets d ' ouverts .

car le serveur en periode de fort trafic souffre d  ' un manque de ressources et de bandes passantes alors c' est sur je peux aussi changer de serveur mais bon je suis pas pressé .... 
Commenter la réponse de iznobe2601
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015
0
Merci
Cela dit je ne pense pas que désactiver le chat au bout d'une heure va énormément épargner ton serveur... peu de chance que ton chat prenne énormément de resources s'il est correctement codé... et s'il ne l'est pas c'est de ce coté la qu'il faut se pencher mais bon... .. .

Pour ce qui est des sessions si tu as un site en php il y a forcement des sessions mais bon... .. .

Pour ce qui est de le faire en javascript... une piste... les évènements... .. .

Poste le code que tu fais ça aidera les posteurs à te conseiller... me pencherais peut être dessus plus tard si j'ai le temps... .. .

@ tchaOo°

l'homme est un loup pour l'homme... .. .
Commenter la réponse de kankrelune
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015
0
Merci
Bon du coup vu que j'avais que ça à faire... vu qu'on est dans le forum POO on va en profiter...

var checkTheChat = {
   
    timeout: 60,
    timer: null,
    handler: null,
    wrapper: null,
   
    start: function( handler, timeout)
    {
        this.timeout = (this.timeout*60*1000);
        this.setTime(timeout);
        this.setHandler(handler);
        this.observe(window, 'mousemove', function() { checkTheChat.reset(); });
        checkTheChat.reset();
    },
   
    observe: function(element, eventName, handler)
    {
        if(element.addEventListener) {
            element.addEventListener(eventName, handler, false);
        }
        else {
            element.attachEvent("on" + eventName, handler);
        }
    },
   
    setHandler: function(handler) {
        this.handler = handler;
        this.wrapper = function() {
            checkTheChat.handler.call(checkTheChat);
        };
    },
   
    setTime: function(timeout) {
        if(!isNaN(timeout)) {
            this.timeout = (timeout*60*1000);
        }
    },
   
    reset: function()
    {
        if(this.timer) {
            clearTimeout(checkTheChat.timer);
        }
        checkTheChat.timer = setTimeout( function() { checkTheChat.wrapper(); }, this.timeout);
    }
};

checkTheChat.start( function() {
        alert('Ca fait '+(this.timeout/1000).toFixed(0)+' secondes que tu glande...');
        this.setHandler(function() { alert("Je t'avais prevenu... bye... .. ."); window.location.reload();});
    },
    0.5
);

Pas testé plus que ça... ça marche sous firefox à première vu... c'est juste une piste... .. .

@ tchaOo°

l'homme est un loup pour l'homme... .. .
Commenter la réponse de kankrelune
Messages postés
26
Date d'inscription
vendredi 10 avril 2009
Statut
Membre
Dernière intervention
16 juillet 2009
0
Merci
bonsoir à vous .

merci kankrelune d ' avoir codé tout ça , je n ' ai pas encore testé , mais ça me parait vachement complexe et long .

pourrais tu m ' expliquer ( succinctement ) le but de tout ce code stp.

excuse mon ignorance , mais alors là , je suis carrément époustouflé !!!!!!!!!! moi qui pensait qu ' un simple clear intervall pourrait suffire ....

il est plus qu ' évident qu ' avec mes 2 lignes de PHP j ' aurais pu faire la meme chose que toi en 2 ou 3 ans d ' études acharnées ( 24 / 24 , 7 /7 ).

enfin j ' aimerais bien comprendre un minimum , je n ' aime pas faire les choses sans avoir compris .

merci d' avance .

je vais essayer de creuser la question de mon coté et de faire des essais et te tiens au courant

@ ++
Commenter la réponse de iznobe2601