2 votes

Gestion de la mémoire Javascript

Je travaille actuellement sur un projet avec Kendo UI, jQuery et Symfony 1.4 et j'ai quelques variables globales.

  var addURL = '<?php echo url_for('dashboard/addEmployee') ?>';
  var deleteURL = '<?php echo url_for('dashboard/deleteEmployee') ?>';
  var editURL = '<?php echo url_for('dashboard/editEmplouee') ?>';
  var viewURL = '<?php echo url_for('dashboard/viewEmployees') ?>';
      ... quelques autres URL suivent ici.

Et j'utiliserais ces variables comme suit:

$.ajax({
  url: addURL,
  .. autres options ici
});

Disons par exemple que j'ai beaucoup de variables globales, peut-être une centaine, dois-je m'inquiéter de "détruire" ces variables? Puisque j'ai lu quelque part que javascript est récupéré par l'ordure. Ces variables seront-elles collectées par le GC lorsque je change de page?

Et enfin avec Kendo UI, j'utilise le widget Kendo UI Window pour agir comme une boîte de dialogue dans mon projet, comment gérer la boîte de dialogue une fois qu'elle est fermée? Parce que je réutilise la même boîte de dialogue partout, des messages d'information aux messages d'erreur. Est-ce qu'elle est perdue/détruite (hors de portée) si le gestionnaire de clic d'un élément est terminé?

2voto

Beetroot-Beetroot Points 12006

"... dois-je m'inquiéter de 'détruire' ces variables?"

Je ne sais pas si vous devez vous inquiéter ou non, mais les variables globales définies avec var name = expression ne peuvent pas être supprimées manuellement avec delete, ou par le ramasse-miettes (GC).

Si vous voulez définir vos chaînes de caractères de manière à ce qu'elles puissent être supprimées individuellement, alors définissez-les comme des propriétés d'un objet. Si vous voulez en savoir plus sur l'utilisation de delete en javascript, alors lisez ceci.

Si vous voulez vous assurer que vos chaînes de caractères deviennent disponibles pour le GC, alors définissez-les à l'intérieur d'une fonction, et assurez-vous également que la fonction (plus précisément tout "contexte d'exécution" généré par l'exécution de la fonction) ne fait pas partie d'une ou de plusieurs chaînes de portée "closure". Ce faisant, la fonction (et le GC) devra travailler davantage, donc il y a un compromis entre la mémoire et la charge CPU.

"Est-ce que ces variables seront collectées par le GC lorsque je change de page?"

Tout comme le DOM, l'ensemble de l'objet window de javascript (l'espace de noms global et tout ce qui s'y trouve) est détruit lors du changement/rechargement de la page. Je ne suis pas sûr que ce soit correct de dire que le GC fait la destruction mais c'est académique - c'est soit le GC, soit quelque chose de très similaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X