JeuWeb - Crée ton jeu par navigateur
Problème JS et changement d'onglet navigateur - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Problème JS et changement d'onglet navigateur (/showthread.php?tid=6913)



Problème JS et changement d'onglet navigateur - Argorate - 08-10-2013

Bonsoir,

je voulais savoir si quelqu'un avait des suggestions pour contrer le problème lié au fait que les setInterval et setTimeout ne marche pas ou moins lorsqu'on change d'onglet sur son navigateur, exemple: http://testbed.nicon.nl/timeouttest/.

C'est assez problématique dans le sens où j'ai par exemple, une animation au démarrage d'une page, qui ne se fait pas si on change d'onglet juste après avoir lancer la requette HTTP, et du coup le callback de fin d'animation, supposé initialiser la suite du code, ne se fait pas non plus...

Y a t-il une solution autre que gérer "manuellement" via l'event onblur?


Et dans un cas plus général, si on a des traitements qui doivent être fait, par exemple des opérations mathématique, prenons le simple exemple d'une variable qui s'incrémente toutes les 100ms, du coup là aussi grave problème si on change d'onglet...


Connaissiez-vous le problème? Des suggestions pour gérer ça?


Merci.


RE: Problème JS et changement d'onglet navigateur - srm - 08-10-2013

http://stackoverflow.com/questions/6032429/chrome-timeouts-interval-suspended-in-background-tabs
http://stackoverflow.com/questions/5927284/how-can-i-make-setinterval-also-work-when-a-tab-is-inactive-in-chrome


RE: Problème JS et changement d'onglet navigateur - Argorate - 08-10-2013

J'ai déjà vu tout ça oxman, si je viens en discuter c'est parce que les neurones de plusieurs cerveaux sont supposé dépasser les seul mien. Et surtout ceux qui aurait déjà eut le problème.

Donc, je cherche d'autres alternatives que celle-ci.

merci


RE: Problème JS et changement d'onglet navigateur - niahoo - 08-10-2013

est-ce que quand on réactive l'onglet les timeouts sont lancés et l'interval reprend ?


RE: Problème JS et changement d'onglet navigateur - Xenos - 08-10-2013

Bon, désolé, j'vais pas amener de solution de résolution, mais je vais avancer l'autre catégorie de solutions: le contournement.

Cela me semble totalement inadapté de vouloir faire tourner activement (aka, avec timeout et interval) un onglet en arrière-plan. Par définition, l'onglet en arrière-plan n'est pas voulu par l'utilisateur, et il me semble parfaitement normal que le navigateur laisse trapiner (j'inventoie de nouveaux verbous) trainer ces arrières-plans (point de vue performances et autonomie principalement).

Je dirai que si tu as besoin d'un timeout obligé, même en étant en arrière-plan, c'est que l'architecture utilisée est mal adaptée.
Javascript se base sur les évènements il me semble, pas sur les boucles, et ici, vouloir faire une boucle "quelles que soient les conditions (arrière-plan ou non)" ne me semble pas être une approche javascript correcte.

"onblur" n'est pas manuel à mon sens, c'est seulement la logique de l'approche évènementielle.


RE: Problème JS et changement d'onglet navigateur - Sephi-Chan - 08-10-2013

D'accord avec Xenos. Faire tourner tout ce qui est en arrière plan n'est pas une bonne solution au problème et n'est pas à l'ordre du jour dans les navigateurs modernes (et même dans les OS).


RE: Problème JS et changement d'onglet navigateur - Argorate - 10-10-2013

Bon, je vais la faire autrement:

imaginer que vous êtes sur un jeu, en plein combat, votre barre de temps avant la prochaine action est en train de se remplir, et là, pour X raison qui importe peu, vous changer d'onglet, puis revenez, le client sera désynchroniser, puisque la barre de temps aura ralenti voir stoper durant le temps du changement d'onglet.

Javascript c'est évènementiel oui, mais si je veux des événements sur le temps?

Je vais bien voir avec l'astuce du onblur mais je trouve ça imprécis. Confused


RE: Problème JS et changement d'onglet navigateur - Sephi-Chan - 10-10-2013

Ce n'est pas parce qu'on ne te propose pas la solution que tu attends que l'on a pas compris ton problème.

Tu peux utiliser les workers Web (http://caniuse.com/webworkers) mais un simple calcul de delta à la récupération du focus me paraît plus simple pour resynchroniser ton client.