Gestion mémoire en JavaScript
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:
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 :D