Le 20/04/2017 à 14:44, Vincent a écrit :
Bonjour,
sans répondre à la question, je me permets de poser une question : la quantité de js et de css vaut elle réellement le coup d'être séparée du reste des éléments du site ? Car au final, il est souvent mieux d'un point de vue performance de ne charger que quelques fichiers un peu plus gros qu'une foule de petits. Du moins dans des cas similaires, j'en suis souvent arrivé à cette conclusion.
Sinon, pour n'insérer un élément qu'une seule fois en js même si la noisette est présente plusieurs fois, il suffit d'avoir un mécanisme qui au moment ou les éléments sont insérés va déclarer une variable globale par exemple ou insérer un élément dans la page avec un ID. Le script à chaque appel vérifie simplement si cette variable est définie ou si l'id existe, et dans ce cas ne fait rien. Dans le cas contraire, on insère les js et css ( avec un id ou on déclare une variable ).
Le problème avec un pipeline, c'est que si la css ou le js sont fusionnés et minifiés il risque d'y avoir un gag: dans un cas on aura un gros fichier qui contient les css de base et dans le second, on aura un fichier encore plus gros qui contiendra les css de base plus les éléments de la noisette, donc double peine coté cache et téléchargement de fichiers ... Je ne suis pas sur de mon coup, mais ça vaudrait le coup de vérifier que l'on est pas dans ce cas: ça entrainerait de la perte au lieu d'un gain.
_______________________________________________
Bonjour,
je comprends bien... le truc c est que j utilise le noizetier (massivement) et je ne peux pas savoir au préalable quelles noisettes vont etre insérée, en combien d exemplaire sur mon site... Il faut donc que ce soit mes noisettes qui appellent les css et js (sinon, faut que je charge tout sans savoir si cela va etre utilisé ou pas)
Appeler les css et js depuis la noisette, c est un peu moche (et un link en dehors du head est a priori non valide) et si une noisette est utilisée plusieurs fois sur une page (cas assez courant) elle va à chaque fois appeler le meme css et js...
Alors, je viens de bricoler cette petite boucle qui sauf erreur de ma part, permet de charger UNE seule fois et uniquement si la noisette est présente sur la page (ou sur la page defaut)
[(#REM)inclusion des css et js propres aux noisettes]
<BOUCLE_noisettes(NOISETTES){type IN #ENV{type},defaut}>
[(#NOISETTE|unique|oui)
[(#SET{noisettecss,#NOISETTE.css})]
[(#SET{noisettejs,#NOISETTE.js})]
[<link href="(#CHEMIN{noisettes/css/#GET{noisettecss}}|compacte)" rel="stylesheet" type="text/css"/>]
[<script src="(#CHEMIN{js/#GET{noisettejs}}|compacte)" type="text/javascript"></script>]
]
</BOUCLE_noisettes>
bien sur, cela implique de nommer ses css et js du nom exacte de la noisette et de respecter la structure de dossier...
Pour l instant, ça à l air de marcher comme attendu...
amicalement
triton