Dans un environnement comme un portail, il est fréquent que le même fichier .js soit présent plusieurs fois dans une page.
Quels en sont les conséquences?
* Évidement cela fait des requêtes http pour rien et le poids de la page s'alourdit. Au mieux le browser gère correctement le cache et le chargement du fichier à une incidence faible.
* Mais d'un point de vue javascript que ce passe il ? Si dans ce fichier j'ai des Objects, est que des instances déjà existantes vont être perturbées ?
Un moyen d'éviter des perturbations serait de vérifier qu'un script à déjà été chargé et si c'est le cas alors de ne rien faire.
On peut ajouter dans chaque fichiers .js une variable du type:
var monfichier_isLoaded = true;
Ainsi si on dispose d'un module de chargement des dépendance il est très simple de vérifier la présence ou nom d'un fichier, d'une librairie.
Je suis aller plus loin en mettant systématiquement le code suivant dans mes fichiers:
if (!window.monfichier_isLoaded) {
var monfichier_isLoaded = true;
MonObject() {}
}
Malheureusement JSLint m'explique que:
Function statements cannot be placed in blocks. Use a function expression or move the statement to the top of the outer function.
En gros ça veut dire que mon test est inutile?
Et que dans tout les cas ce qui se trouve dedans sera exécuté ou rendu public ??
Modifié par Grumelo (25 Sep 2008 - 13:40)
Quels en sont les conséquences?
* Évidement cela fait des requêtes http pour rien et le poids de la page s'alourdit. Au mieux le browser gère correctement le cache et le chargement du fichier à une incidence faible.
* Mais d'un point de vue javascript que ce passe il ? Si dans ce fichier j'ai des Objects, est que des instances déjà existantes vont être perturbées ?
Un moyen d'éviter des perturbations serait de vérifier qu'un script à déjà été chargé et si c'est le cas alors de ne rien faire.
On peut ajouter dans chaque fichiers .js une variable du type:
var monfichier_isLoaded = true;
Ainsi si on dispose d'un module de chargement des dépendance il est très simple de vérifier la présence ou nom d'un fichier, d'une librairie.
Je suis aller plus loin en mettant systématiquement le code suivant dans mes fichiers:
if (!window.monfichier_isLoaded) {
var monfichier_isLoaded = true;
MonObject() {}
}
Malheureusement JSLint m'explique que:
Function statements cannot be placed in blocks. Use a function expression or move the statement to the top of the outer function.
En gros ça veut dire que mon test est inutile?
Et que dans tout les cas ce qui se trouve dedans sera exécuté ou rendu public ??
Modifié par Grumelo (25 Sep 2008 - 13:40)