2010-07-04 18 views
0

L'état global est généralement désapprouvé. Cependant, je pense que je peux l'utiliser côté client pour rendre mon application plus simple.Serait-ce un bon usage des variables globales?

J'ai une application Web AJAX qui définit plusieurs valeurs lorsque l'utilisateur se connecte - ID utilisateur, ainsi que d'autres informations. Cette information ne change pas pour la durée de vie de l'application. J'ai également un cache de données pour minimiser les déplacements vers le serveur.

Puis-je faire en toute sécurité tous ces globaux? (les informations utilisateur en lecture seule et le cache) Je pense que cela rendrait la chose plus simple parce que je n'aurais pas à m'inquiéter de faire passer les valeurs entre les fonctions de manière parfois maladroite. Essentiellement, ce serait comme des constantes dont les valeurs ne sont pas connues à la "compilation". À certains égards, le DOM lui-même sert de forme d'état global - je pourrais stocker une valeur en HTML et il serait accessible à partir de n'importe où dans le programme.

+0

Que voulez-vous dire par global dans le contexte d'ajax? Sur le serveur ou sur le client? –

+0

** côté client **. Désolé pour le manque de clarté. –

Répondre

0

Il n'y a rien de mal à utiliser les globales, si vous savez ce que vous faites. Essayez de le garder propre en enveloppant toutes vos «constantes» dans un seul objet global. La principale préoccupation avec les globals est que vous êtes lié à une seule instance de n'importe quel état de votre magasin global, ce qui peut ou peut ne pas être un problème dans votre cas.

0

Vous pouvez créer un espace de noms, de cette façon les variables seraient comme global, mais vous ne devriez pas trop vous inquiéter des conflits et de ce genre de choses. Facebook fait cela sur certaines de ses API.

Juste pour être sûr, voici un exemple la mise en œuvre d'espace de noms en toute sécurité:

if(!window.MY_NAMESPACE){ 
    MY_NAMESPACE = { 
    a_variable : "some value", 
    a_function: function(params){ 
     return a_variable; 
    }, 
    }; 
} 

De cette façon, vous obtenez quelque chose comme la substance globale, sans se heurter à d'autres variables dans le document (ou des copies de votre script)

0

Je pense qu'il est parfaitement correct d'utiliser l'état global pour les buts que vous avez mentionnés. Assurez-vous simplement qu'ils sont écrits une seule fois, c'est-à-dire qu'ils n'ont pas été modifiés pendant l'exécution. Alors essayez de leur donner des noms que vous ne les écraserez pas par la suite (ce qui est toujours un danger en Javascript - en oubliant var et votre variable devient globale, c'est-à-dire attachée à l'objet window) et de préférence les réduire davantage le risque de collisions de noms (moins de noms, moins de collisions).

Gardez également à l'esprit que les variables ne sont pas vraiment 'globales'; Si l'utilisateur reste connecté mais ouvre une nouvelle fenêtre sur votre site, les variables 'globales' ont disparu. Dans ce cas, vous devez vous assurer qu'il n'y aura pas d'incohérence, c'est-à-dire que le serveur suppose que, si un utilisateur est connecté, les variables sont définies.