Utilser correctement clearintervall ?

iznobe2601 Messages postés 26 Date d'inscription vendredi 10 avril 2009 Statut Membre Dernière intervention 16 juillet 2009 - 15 juin 2009 à 14:04
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 .

21 réponses

Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
15 juin 2009 à 14:17
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
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
15 juin 2009 à 14:22
à 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.
0
iznobe2601 Messages postés 26 Date d'inscription vendredi 10 avril 2009 Statut Membre Dernière intervention 16 juillet 2009
15 juin 2009 à 14:24
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 !" ??
0
iznobe2601 Messages postés 26 Date d'inscription vendredi 10 avril 2009 Statut Membre Dernière intervention 16 juillet 2009
15 juin 2009 à 14:36
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 .
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
15 juin 2009 à 15:03
>>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...
0
iznobe2601 Messages postés 26 Date d'inscription vendredi 10 avril 2009 Statut Membre Dernière intervention 16 juillet 2009
15 juin 2009 à 15:24
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 .
0
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
15 juin 2009 à 15:52
"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... .. .
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
15 juin 2009 à 15:59
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 !
0
iznobe2601 Messages postés 26 Date d'inscription vendredi 10 avril 2009 Statut Membre Dernière intervention 16 juillet 2009
15 juin 2009 à 16:19
@ [../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 .
0
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
15 juin 2009 à 16:21
"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... .. .
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
15 juin 2009 à 16:26
>>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 !
0
iznobe2601 Messages postés 26 Date d'inscription vendredi 10 avril 2009 Statut Membre Dernière intervention 16 juillet 2009
15 juin 2009 à 16:31
en plus je n ' arrete pas l ' utilisation du chat mais seulement le rafraichissement auto
0
iznobe2601 Messages postés 26 Date d'inscription vendredi 10 avril 2009 Statut Membre Dernière intervention 16 juillet 2009
15 juin 2009 à 16:36
[../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 .
0
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
15 juin 2009 à 16:41
"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... .. .
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
15 juin 2009 à 16:42
il faut surtout un minimum de savoir vivre quand quelqu'un aide
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
15 juin 2009 à 16:45
>>détecter l'utilisateur inactif...
>>ce n'est pas à javascript de faire ça...
[../auteur/KANKRELUNE/377168.aspx kankrelune]++
0
iznobe2601 Messages postés 26 Date d'inscription vendredi 10 avril 2009 Statut Membre Dernière intervention 16 juillet 2009
15 juin 2009 à 17:00
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é .... 
0
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
15 juin 2009 à 23:24
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... .. .
0
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
15 juin 2009 à 23:56
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... .. .
0
iznobe2601 Messages postés 26 Date d'inscription vendredi 10 avril 2009 Statut Membre Dernière intervention 16 juillet 2009
16 juil. 2009 à 23:52
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

@ ++
0
Rejoignez-nous