IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Performance var globale


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 150
    Par défaut Performance var globale
    Bonjour,

    Je m’inquiète sur les performances de mon code à propos des variables globales que j'utilise souvent au sein de différentes fonctions et dont je veux conserver leur valeur tout au long du script ( d’où la nécessiter qu'elle existe toujours ). Je sais qu'il faut éviter l'utilisation des variables globales pour leurs manque de performance si elles sont souvent utiliser tel quelle. Pourriez-vous me dire comment procédez-vous afin de les limitées ou de garder leurs aspect d'utilisation avec une autre méthode ? Pour l'instant je pense à différentes solutions :

    1.Conserver la variable globale mais à partir de ça première utilisation copier son contenu dans une variable local à la fonction (afin qu'elle ne remonte pas sans cesse dans le DOM pour récupérer la valeur de la variable globale) puis l'envoyer en paramètre au différentes fonctions qui l'utilisent. La valeur de la variable globale sera mis à jour le plus tard possible.

    2.Utiliser une fonction anonyme du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var monEspace = (function() {
       //code privé....
       return //code public...
    }
    Ce deuxième cas est-il bénéfique au niveau des performances ? Ma variable monEspace est une variable globale donc tous son contenu sera récupéré comme-ci que j'avais créer ce dernier à l'extérieur (donc globale) ?

    3.Créer un espace de travail qui contiendra les variables globales : var myApp = {};

    Merci à vous.

  2. #2
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Je m'inquiéterais davantage des risques de conflits/bogues que de la performance avec l'utilisation excessive de globales. Une erreur classique est d'utiliser deux variables avec le même nom dans des fonctions et contextes différents. Si volontairement ou non, ces variables ont été déclarées dans le scope global, alors elles s'écrasent mutuellement l'une et l'autre. Aussi, ce genre de conflits ne provient pas toujours de ton code, il peut s'agir de librairies externes ou même d'userscripts/extensions spécifiques à un client. Donc la bonne pratique est soit d'éliminer complètement toute variable globale (avec par exemples des modules AMD/CommonJS/UMD), soit de toutes les placer au sein d'un unique namespace comme tu l'as proposé en 3).

    Sinon, je doute que l'idée de la copie de variable améliore les performances, bien au contraire. Aussi, il ne faut pas confondre le DOM avec la mémoire allouée à la page pour JavaScript. Même s'ils peuvent tous les deux être représentés avec une structure d'arbre (quoique pour les closures c'est potentiellement plus compliqué), le DOM se limite à l'arborescence des HTMLElement de ton document.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 150
    Par défaut
    Merci pour ta réponse SylvainPV.
    Je suis au courant pour tout ce qu'il s'agit de conflit vis-à-vis des noms donnés, un rappel ne fait cependant pas de mal

    Sinon, je doute que l'idée de la copie de variable améliore les performances, bien au contraire.
    D'après ce que j'ai pu comprendre lorsque le JS rencontre une variable il remonte vers le haut jusqu’à tomber sur la déclaration de la variable. Le dernier niveau étant le scope global. Si tu confirmes ce que je viens de dire les performances ne sont-elles pas meilleur puisqu'en stockant la valeur de ma variable je rapproche cette dernière évitant au JS d'aller chercher trop loin (haut). Cette méthode serai un gain uniquement s'il y a plusieurs imbrications d'appels successifs dans le cas contraire cela aurai l'effet l'inverse.

  4. #4
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Par défaut
    Oui c'est bien ça, mais je pense que le temps alloué à la copie d'une variable est plus important que le temps de résolution du scope. A confirmer par un bench.
    Par contre si tu passes une variable en argument de fonction, tu passes une référence. La contenu de la variable n'est pas copié, donc les performances sont très bonnes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var a=1;
    (function(){
        a++;
    })(a);
    console.log(a); //a vaut 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var a=1;
    (function(a){
        a++;
    })(a);
    console.log(a); //a vaut 1

Discussions similaires

  1. Var Globale sur MFC Suite 2
    Par torNAdE dans le forum MFC
    Réponses: 7
    Dernier message: 28/11/2007, 20h02
  2. Réponses: 1
    Dernier message: 15/03/2006, 19h28
  3. [VB.NET] Var globales sur plusieurs projets d'une même solut
    Par boulete dans le forum Windows Forms
    Réponses: 8
    Dernier message: 16/02/2006, 14h04
  4. optimisation du code et var globales
    Par tigrou2405 dans le forum ASP
    Réponses: 2
    Dernier message: 23/01/2004, 10h59
  5. [DTS] Passer les var globales d'un lot à un autre
    Par David K. dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 25/07/2003, 12h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo