Bonjour,

Une question me préoccupe en ce moment, je me demande si le garbage collector en JavaScript est robuste (surtout que cela dépend des navigateurs...)

Mon exemple est le suivant : une fonction est appelée très fréquemment (plusieurs dizaines de fois par seconde). Cette fonction instancie une variable locale à chaque exécution (cf. code technique #1). À la sortie de cette fonction, la mémoire de la variable locale est théoriquement libérée. Le mécanisme de garbage collector est-il fiable à ce niveau ? Ou est-il préférable d'utiliser une instance unique de la variable, qui se situera dans le scope immédiatement supérieur ? (cf. code technique #2)

Je ne sais pas si ma question est claire, voire même pertinente... j'espère que l'exemple de code suivant sera plus parlant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
// - l'event "mousemove" est déclenché des dizaines (centaines ?) de fois par seconde
// - "maVariable" est utilisé uniquement dans la fonction déclenchée par le mousemove
// - les 2 techniques sont équivalentes en terme de vitesse d'exécution
 
// technique 1 : la variable est réinstanciée à chaque fois
// avantages : variable locale en accès direct, meilleure encapsulation
// inconvénient (a priori) : la mémoire est-elle toujours bien nettoyée ?
$(document).ready(function () {
	$('#monElement').mousemove(function (e) {
		var maVariable = uneFonction();
		// (...)
	});
});
 
// technique 2 : une seule instance de la variable
// avantage (a priori) : gestion mémoire plus sûre ?
// inconvénients : accès indirect à la variable, mauvaise encapsulation
$(document).ready(function () {
	var maVariable;
	$('#monElement').mousemove(function (e) {
		maVariable = uneFonction();
		// (...)
	});
});
j'attends vos avis