2016-06-22 1 views
1

Chrome continue de tuer la page au milieu de mon jeu de navigateur connect-quatre quand il fonctionne correctement. Le jeu est un joueur contre l'installation de l'ordinateur et le jeu lui-même fonctionne correctement et ne se bloque jamais. La page se bloque lorsque je mets le nombre d'itérations trop élevé pour entraîner l'adversaire de l'ordinateur. Les programmes entraînent l'ai à l'aide d'un algorithme qLearning où il joue lui-même et stocke une valeur pour chaque état rencontré. Si je place le nombre d'itérations à environ 125 000 ou moins, alors tout fonctionne bien (sauf que l'adversaire n'est pas si génial). Je ne peux pas dire si c'est le temps d'exécution de la boucle (cela prend environ 30 minutes) qui tue le programme ou quelque chose d'autre comme les contraintes de mémoire pour les états d'enregistrement et leurs valeurs q correspondantes.Javascript - Empêcher Chrome de tuer la page pendant la boucle longue

Comment puis-je faire fonctionner le programme pour plus d'itérations d'entraînement sans que le chrome ne tue la page?

+0

Avez-vous essayé 'setInterval'? – Dimava

+0

[Window setInterval() Méthode] (http://www.w3schools.com/jsref/met_win_setinterval.asp) – Dimava

Répondre

2

Vous avez quelques options sur la façon de gérer votre code.

Option 1: setInterval/setTimeout

Comme d'autres l'ont suggéré, en utilisant setInterval ou setTimeout peut exécuter votre code en "morceaux" et ne morceau entraînera un délai d'attente.

Option 2: setInterval + generators

Avec le code imbriqué profondément, en utilisant setTimeout est très difficile de réintégrer correctement le code.

Lire sur generators - cela rend le code de fonctionnement en morceaux beaucoup plus agréable, mais cela peut prendre une nouvelle conception.

Option 3: webworkers

Webworkers fournissent une autre façon, en fonction de ce que vous calculez. Ils courent en arrière-plan et n'ont pas accès au DOM ou à autre chose, mais ils sont excellents au calcul.

Option 4: NodeJS

Votre dernière option est de passer du navigateur et exécuter dans un autre environnement, comme node.JS. Si vous utilisez Windows, les fichiers HTA peuvent être une autre option.

+0

Je dirais que le point de départ devrait certainement être webworkers comme 1) le calcul n'est pas lié à l'interface utilisateur, donc il ne devrait pas être sur le thread principal, et 2) la méthode prend plus de 0.5-1 secondes, donc il ne devrait pas être sur le thread de l'interface utilisateur pour une deuxième raison. 3) J'imagine que le chrome tue le calc parce qu'il est sur le thread principal où il a de lourdes restrictions, alors que s'il était sur un thread d'arrière-plan, le chrome serait plus indulgent. –