Javascript et consomation mémoire

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
grunk
Arias
Messages : 3
Inscription : 02 janv. 2008, 14:49

Javascript et consomation mémoire

Message par grunk »

Bonjour à tous,

je rencontre un problème avec firefox qui consomme énormément de mémoire sur une de mes fonction javascript :

Code : Tout sélectionner

function displayVideo(idCam,monImage)
{
	clearTimeout(Timer);
	monImage.src = 'includes/createImage.php?act=1&cam='+idCam+'&unique='+new Date()*Math.random();	// partie aléatoire pour éviter le cache du navigateur
	Timer = setTimeout(function(){displayVideo(idCam,monImage)},1000);
}
Cette fonction permet de rafraichir une image à intervalles réguliers pour à terme proposer une vidéo avec peu d'image par seconde.

Le problème c'est qu'avec firefox la mémoire vive n'est pas libéer après chaque rafraichissement de l'image.
A chaque rafraichissement FF consomme environ 1Mo en plus (alors que l'image rafraichie ne fait que 5 à 10ko) ce qui au final fait swaper le PC.

Une idée de la source du problème ?

Merci

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59

Message par Benoit »

Oui, c'est parce que les images sont stockées dans le cache non compressées. Et la partie aléatoire de ton URL n'évite pas le cache, au contraire, elle s'assure que toutes les images passeront dedans !

Comme tu génères tes images en PHP, je te suggèrerais d'au moins envoyer les headers HTTP demandant la non mise en cache (sans garantie que ce soit suffisant dans le cas du cache mémoire)
Voir l'exemple 5 dans http://www.php.net/header

Tu pourrais aussi faire un essai en assignant null à monImage.src pour vérifier que l'image est bien libérée.
♫ Li tens s'en veit, je n'ai riens fais ;
Li tens revient, je ne fais riens. ♪
grunk
Arias
Messages : 3
Inscription : 02 janv. 2008, 14:49

Message par grunk »

Merci de ta réponse.

Alors l'utilisation des entête anti cache de php ne semble pas suffire , je les ai placé sur ma page générant l'image ainsi que sur la page affichant l'image mais la consomation mémoire continu de grossir.
Cependant au départ la fuite est plus modéré et met plus de temps à devenir important que auparavant.

L'assignation à null de mon objet image (et/ou de sa source) ne marche pas non plus et me rajoute une image vide a chaque fois.

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11
teoli2003
Animal mythique
Messages : 7580
Inscription : 13 nov. 2005, 09:23

Message par teoli2003 »

Peux-tu essayer avec une nightly de Firefox3.

Le phénomène devrait être beaucoup moins prononcé voire disparaître car:
1) les problèmes de fragmentation mémoire sur les images sont en cours de réduction;
2) les images non-compressées sont effacées de la mémoire après 60 secondes (s'il s'agit de jpeg ou png, mais pas (encore) les gif;
3) les gif sont décompressées en 8 bits et non en 24 bits;
4) l'effacement des objets js inutilisés est différent.

Si le problème persiste, comme le code est très simple, il peut valoir la peine de remplir un rapport de bug avec "mlk" comme mot clé. On aura un avis des dev de javascript.

Message envoyé avec : Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; fr-CH; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11
La liberté n'est jamais accordée de bon gré par l'oppresseur; elle doit être exigée par l'opprimé (Martin Luther King).
Les convictions sont des ennemis de la vérité plus dangereux que les mensonges. (Nietzsche).
Native Mozillian.
grunk
Arias
Messages : 3
Inscription : 02 janv. 2008, 14:49

Message par grunk »

Salut et merci de ta réponse.
Avec la dernière nightly le phénomène est très atténué ! Au lieu de perdre près d'1Mo à la seconde , la fuite est d'environ 1Mo minute ce qui reste raisonnable mais cependant problématique.

Même si le pb est mineur je pense que ca peut se révéler intéressant à repporter.

Merci

Edit pour info voici un petit test :

Minute 0 : 31080 Ko
Minute 1 : 32420 Ko
Minute 2 : 34156 Ko
Minute 3 : 36104 Ko

Avec la version 2, je tenais même pas une minute sans que le PC swap.

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59

Message par Benoit »

Le problème c'est que pour des raisons historiques (la plupart des scripts de rollover en fait), une image qui a été chargée dans la page doit être conservée en mémoire.

Je crois qu'en réalité la plupart des scripts de webcams et autres utilisent plutôt un élément iframe qu'un élément img pour cette raison.

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11
♫ Li tens s'en veit, je n'ai riens fais ;
Li tens revient, je ne fais riens. ♪
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 6 invités