Bonjour,
J'étais déjà venu il y a quelques mois pour le même problème, mais depuis, il s'avère que j'ai de nouveaux éléments qui font que le sujet précédent n'est plus vraiment juste.
Je vais essayer d'être assez précis, donc cela risque d'être long à lire, mais courage !
Je travaille actuellement sur un tchat utilisant excessivement la librairie prototype.js. Malgré quelques bugs par ci par là, le tchat est relativement stable. En effet, il peut être utilisé toute une journée sans montrer la moindre faiblesse.
Par contre, si on le laisse tourner toute la nuit, en revenant le lendemain, la page semble plantée. Il n'en est rien, puisqu'en fait, le CPU est utilisé, et au bout de quelques minutes, on récupère la main, et on peut à nouveau utiliser le tchat de manière normal. Le problème, c'est cette attente qui n'est pas très "user-friendly". J'ai bien essayé de visualiser ce qui se passait pendant ce moment là avec le debugger de chrome, mais il se retrouve à utiliser + d'1Go de mémoire utilisé, et finalement ne me rend jamais la main.
Après plusieurs tests, il s'avère que j'ai tendance à penser que le problème viendrait des listeners. En effet, l'application continue de recevoir les données et même les afficher pendant la nuit. En réalité, l'application commence à utiliser le CPU fortement lorsqu'on agit sur l'application.
Par exemple, un test fait ce matin même :
- Je bouge la souris sur l'application, le CPU grimpe en flèche.
- Je le laisse terminer sa réflexion, et lorsque je bouge la souris, mes évènement "onmouseover" fonctionnent à nouveau de manière fluide.
- Je commence à entrer une lettre dans la ligne de saisie (input type=text), et là, rebelote, le CPU grimpe en flèche.
Sur les conseils des ptits gars de l'IRC de prototype, j'ai "optimisé" mes listeners en les regroupant par évènement, et non par objet cible. Le CPU utilisé est en effet moins important lors de l'utilisation normale, mais cela ne résout pas le problème.
Globalement, le script fait ceci :
- Les listeners sont initialisés
- Toutes les secondes, il appelle le serveur qui lui renvoie les données en cas de nouveauté, sinon 0.
- En cas de nouveautés, il parcourt le retour (au format JSON), et effectue les actions en conséquence.
Voilà en gros ce qu'est mon problème. Je reste à disposition pour demande de renseignements supplémentaire.
PS : le site en question est disponible actuellement sur www.kraml.fr, il faut cependant créer un compte pour accéder à la page de tchat. Il n'y a pas grand chose à faire, c'est une inscription basique, sans email, et il n'y a pas de pub sur le site actuellement.
Partager