Aller au contenu

Chat, Ajax, mémoire et performance


Nocta

Sujets conseillés

Bonjour,

J'aime à développer pleins de petites applications et actuellement je suis sur un nième chat ajax.

Aucun soucis côté dev, mais question performance j'aimerai des avis.

Voici le fonctionnement acutel du script :

- Une page index avec la fenetre du chat (fenetre de discussion, liste des connectés ~ IRC like)

- Un script jQuery ($.ajax) qui interoge un chat.php toutes les n milisecondes et injecte les nouvelles données

- Une page chat.php qui maintient la connexion, retourne la liste des utilisateurs en ligne, retourne les nouvelles lignes de chat

- Une base mysql avec deux tables; les utilisateurs en lignes, le lignes de chats

Tout ceci fonctionne sans problème.

Cependant j'ai un soucis notable de performance.

En effet, malgré le fait de vider le contenu la réponse de ma requette ajax après utilisation, le cout en mémoire ne fait que croitre.

Si par exemple, on arrive sur la page et que celle-ci coute 50 Mo de mémoire vive, au bout d"une heure et plusieurs milleurs de requettes ajax, on arrive vite à des 250, 300Mo de mémoire dégustée par le navigateur qui garde en mémoire une trace de chaque requette. Et ce, si l'on ne reste qu'une heure... imaginez pour une nuit complète à garder la fenetre ouverte...

Après moultes recherches pour pallier à ce problème il est apparu qu'il n'était pas possible de supprimer completement les traces en mémoire d'une requette ajax après s'en être servi.

Donc j'en viens à me demander s'il existe d'autres solutions que celle ci.

Peut-on pallier à ce problème directement ?

Ou alors existe-t-il d'autre façon (en Javascript/PHP toujours) de faire ce type de chat ?

Est-il possible de maintenir la connexion Ajax simplement ouverte ?

D'avance merci pour vos précieux conseils.

Lien vers le commentaire
Partager sur d’autres sites

- Un script jQuery ($.ajax) qui interoge un chat.php toutes les n milisecondes et injecte les nouvelles données

Il ne serait pas plutôt là le problème ? Lancer des requêtes Ajax à un tel rythme (plusieurs fois par seconde), c'est énorme, et ne peut que causer de gros problèmes !

L'idéal serait de limiter au maximum la quantité de requêtes. Par exemple :que le navigateur lance une requête style "y a-t-il du nouveau ?", et que le serveur ne réponde que dans le cas d'une nouvelle réponse. Tant qu'aucune nouvelle contribution n'a été ajoutée, le serveur ne retourne rien. Il ne retourne sa réponse que lorsqu'un visiteur a écrit quelque chose. Le navigateur attend gentiment la réponse, pas la peine de lui retourner quelque chose si c'est pour lui dire qu'il n'y a rien de nouveau.

Mais bon, sinon, je te conseille plutôt de regarder du côté de http://nodejs.org/ , à condition que tu aies la main sur le serveur. Ça te permettra notamment de faire des sockets en javascript entre le client et le serveur, ce qui résout le traditionnel problème requête/réponse du web.

Lien vers le commentaire
Partager sur d’autres sites

Tout d'abbord, merci de tes conseils.

L'idéal serait de limiter au maximum la quantité de requêtes.

En réalité, la page chat.php ne retourne rien s'il n'y a rien de neuf.

La liste des membres et l'id du derniers messages sont stockés en sessions (donc aucun parametres n'est envoyé via javascript) et donc la page ne retourne rien s'il n'y a rien de neuf.

Si la liste des membres a changé elle ne retourne la nouvelle et s'il y a un ou plusieurs nouveaux messages elles les renvois et met le dernier ID à jour.

Mais bon, sinon, je te conseille plutôt de regarder du côté de http://nodejs.org/ , à condition que tu aies la main sur le serveur. Ça te permettra notamment de faire des sockets en javascript entre le client et le serveur, ce qui résout le traditionnel problème requête/réponse du web.

C'est exactement ce que je cherchais pour le cas ou j'ai la main sur le serveur. Je vais aller zieuter ça de plus prêt.

Et dans le cas ou on n'a pas la main sur le serveur ?

Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines plus tard...

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...