Si vous êtes préoccupé par les performances, je voudrais utiliser un framework tel que AngularJS. Vous pouvez injecter du code modularisé. Mieux encore, avec MVC, votre vue est liée à votre modèle. En changeant le modèle, la vue se met automatiquement à jour.
De même, arrêtez d'utiliser des sélecteurs de classe. Utilisez des sélecteurs d'identifiant. Ils sont beaucoup plus rapides. Vous voulez également précharger des sélecteurs (même avec des sélecteurs de classe). De cette façon, vous recherchez uniquement le DOM une fois:
var ele = $('#elementId');
$(ele).doSomething();
De cette façon, vous avez une référence à l'élément DOM. Vous pouvez utiliser une structure de données pour stocker toutes vos références en dehors de la portée mondiale:
var elementReferences = {}; //declaration
elementReferences.mainPage = {}; //use
elementReferences.mainPage.root = $('#mainPage'); //load the root div of a page segment
elementReferences.mainPage.title = $(elementReferences.mainPage.root).children('#title'); //load the title
elementReference.mainPage.form = $(elementReferences.mainPage.root).children('#form'); //load the form
Maintenant, vous pouvez faire ceci:
$(elementReference.mainPage.form).whatever();
et il n'a pas à rechercher les DOM de l'élément . Ceci est particulièrement utile pour les applications plus volumineuses.
Si vous placez une fonction dans document.ready, selon votre violon, vous ne pouvez accéder à cette fonction que dans le cadre de l'appel document.ready. Vous voulez vraiment pouvoir charger/décharger des fonctions dynamiquement dans la portée dans laquelle ils sont requis, où angularjs entre en jeu.
Vous aussi, pour la plupart, vous voulez supprimer vos fonctions et variables de la portée globale et les mettre dans des conteneurs qui sont triés par leurs dépendances et leur utilisation. Ceci est la programmation orientée objet 101. Au lieu d'avoir un tas de tableaux assis dans le cadre global où ils pourraient être écrasés par erreur par un autre développeur, vous voulez les mettre dans un conteneur:
var arrays = {}; //create the object
arrays.whatever1 = [];
arrays.whatever2 = [];
De toute évidence, vous allez probablement vouloir un nom plus descriptif que "tableaux". Les fonctions fonctionnent de la même manière:
var ajax = {}; //ajax object
var ajax.get = function(){
};
var ajax.post = function(){
};
var ajax.delete = function(){
};
Cela favorise généralement un code plus propre qui est plus réutilisable et plus facile à entretenir. Vous voulez passer une bonne partie de votre temps à écrire une spécification qui documente entièrement l'architecture globale avant de commencer le développement. NE JAMAIS sauter le pistolet si vous pouvez l'aider. Passez du temps à faire des recherches approfondies et à planifier l'ensemble de la situation et à voir comment tout se déroule au lieu d'essayer de l'agencer et de la comprendre au fur et à mesure. Vous passez moins de temps à réinventer la roue quand vous le faites de cette façon.
Il a été développé par google, il devrait donc exister depuis longtemps. Je ne sais pas si vous êtes le responsable de l'architecture de votre système, mais si la performance/la réutilisation est un problème dans votre entreprise, cela vaut vraiment la peine d'y jeter un coup d'œil. Je serais plus qu'heureux de vous donner un aperçu de la plupart de ce que je sais en termes d'architecture logicielle et d'ingénierie. Juste MSG moi si vous êtes intéressé. Toujours heureux d'aider!
Pas un exemple de workoff complet dans jsfiddle sans le HTML, mais ma conjecture immédiate serait la suivante: vous êtes des variables de "portée globale" qui sont seulement globales à l'état prêt. Les fonctions en dehors du prêt n'ont pas accès à ces variables. Déplacez-les au-dessus de la fonction 'ready' de jquery pour qu'ils soient vraiment globaux et que ces autres fonctions puissent y accéder. –
Ok, je vais essayer que Eli Gassert – IronSpoon
En savoir plus sur la portée variable de JavaScript et de lire sur [programmation fonctionnelle] (http://eloquentjavascript.net/chapter6.html) –