11548 sujets

JavaScript, DOM et API Web HTML5

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)
a écrit :
Dans un environnement comme un portail, il est fréquent que le même fichier .js soit présent plusieurs fois dans une page.

Je ne suis pas d'accord, ce n'est pas fréquent... A mon avis, ton site rencontre un gros problème de logique...
Ce n'est pas le sujet de la question.
Peut importe la cause, comment résoudre la problématique.
Pas de soucis mais tu veux pas résoudre le problème à la base et tu préfères opter pour une solution de type "bidouillage"...

Question (pour mieux comprendre): tous tes fichiers *.js sont bien déclarés entre les balises <head> ?
Oui ils sont dans <head> mais ils sont aussi dynamiquement ajouté.

On est en plein web 2.0 là. Tu charges un script qui verifie ses dépendances et les ajoute si besoin.

La question tourne plus autour de Pourquoi ne par mettre de function *statement* dans un block?
A chaque fois que tu dois insérer un fichier javascript, tu places la ligne de code dans un tableau PHP et ensuite, une fois que tu as fini d'insérer des fichiers JS, tu fais un implode() de ton tableau.

Deux solutions :
1° La ligne de code correspond à la clé du tableau et comme tu ne peux pas avoir deux fois la même clé dans un tableau, tu ne peux pas avoir deux fois le même fichier JS.
2° Tu utilises la fonction in_array() pour vérifier l'existence d'un élément (fichier JS) dans le tableau.
Hello,

Pourquoi ne pas faire monObject = function() {} ?
Modifié par Tymlis (01 Oct 2008 - 11:02)
C'est ce que je fais maintenant en effet:

if (typeof MonObject == 'undefined') {
var MonObject = function() {


};
}

Maintenant reste la problématique concernant les conséquences si un même object,constructeur,librairie est chargée X fois.
Modifié par Grumelo (02 Oct 2008 - 14:10)