[spip-dev] problème avec cache-js

Bonjour

Je viens de m'apercevoir que sur mon site le dossier /local/cache-js gonfle très vite et dans des proportions importantes.
En effet, celui-ci faisait 1.3 Go avant que je le vide.

D'où mes 2 questions :
- qu'est-ce qui pourrait expliquer ça ?
- y a-t-il un moyen de l'éviter ?

Merci pour toute piste.

JC

Hop,

Le squelette utilisé est le plugin Escal.

JC

quels sont les différences entre les différents js generés ? ca permettrait de voir si l'env joue un role

Ok mais comparer quoi exactement car j'ai environ 1700 fichiers actuellement dans /cache-js pour un total de 50Mo alors que je l'ai vidé hier vers 16h.

Quelques exemples :

des dizaines de
jsdyn-javascript_porte_plume_start_js-xxxxx.js
et de
jsdyn-javascript_porte_plume_start_js-xxxxx.js.last
mais qui ne font que 26 ko

d'autres du type
01c79be019f1d0eb15acb6376e4f02ba.js (plus de 800ko, voire 1.3 Mo)
et
01c79be019f1d0eb15acb6376e4f02ba.js.gz (environ 220ko ou 310ko )

plus d'autres encore

JC

ah ! Ca le fait qu'avec le porteplume ? ou bien d'autres ? (laisse tomber pour l'instant ceux avec un hash). Le porte plume est appelé côté public ?

Tu peux comparer entre 2 versions avec le même nom par exemple.

Avant d’user le soleil, on commencerait par dire quelle version de SPIP tu utilise précisemment ?
Et notamment, quelle est la version de ton plugin compresseur ?

Ben les toutes dernières stables.

version spip : 3.2.9
version compresseur : 1.12.10

JC

Question de béotien : c'est quoi les fichiers "avec un hash" ?

Oui, le porte-plume est appelé côté public et oui ça le fait surtout avec lui (1682 fichiers sur les 1715)

JC

j'ai comparé 2 fichiers venant du porte-plume, générés à 30 min d'intervalle.
1 seule différence :

,{"name":"Insérer un modèle","key":"M","className":"outil_inserer_modeles separateur separateur_apres sepInsMod","beforeInsert":function() {jQuery.modalboxload("http://escal.ac-lyon.fr/spip/spip.php?page=inserer_modeles&modalbox=oui*&date=2017-11-05&lang=fr*",{minHeight: "90%", type: "ajax"});},"dropMenu":[{"id":"inserer_modele_choix_article","name":"Une liste d’articles","className":"outil_inserer_modele_choix_article","beforeInsert":function() {jQuery.modalboxload("http://escal.ac-lyon.fr/spip/spip.php?page=inserer_modeles&modalbox=oui&date=2017-11-05&lang=fr&formulaire_modele=choix_article",{minHeight: "90%", type: "ajax"});},"display":true}
,{"id":"inserer_modele_album_nivoslider","name":"un album (carousel Nivoslider)","className":"outil_inserer_modele_album_nivoslider","beforeInsert":function() {jQuery.modalboxload("http://escal.ac-lyon.fr/spip/spip.php?page=inserer_modeles&modalbox=oui&date=2017-11-05&lang=fr&formulaire_modele=album_nivoslider",{minHeight: "90%", type: "ajax"});},"display":true}
,{"id":"inserer_modele_media","name":"un document","className":"outil_inserer_modele_media","beforeInsert":function() {jQuery.modalboxload("http://escal.ac-lyon.fr/spip/spip.php?page=inserer_modeles&modalbox=oui&date=2017-11-05&lang=fr&formulaire_modele=media",{minHeight: "90%", type: "ajax"});},"display":true}
]

,{"name":"Insérer un modèle","key":"M","className":"outil_inserer_modeles separateur separateur_apres sepInsMod","beforeInsert":function() {jQuery.modalboxload("http://escal.ac-lyon.fr/spip/spip.php?page=inserer_modeles&modalbox=oui&id_article=177&id_forum=6039&retour=spip.php%3Farticle177%26lang%3Dfr&lang=fr",{minHeight: "90%", type: "ajax"});},"dropMenu":[{"id":"inserer_modele_choix_article","name":"Une liste d’articles","className":"outil_inserer_modele_choix_article","beforeInsert":function() {jQuery.modalboxload("http://escal.ac-lyon.fr/spip/spip.php?page=inserer_modeles&modalbox=oui&id_article=177&id_forum=6039&retour=spip.php%3Farticle177%26lang%3Dfr&lang=fr&formulaire_modele=choix_article",{minHeight: "90%", type: "ajax"});},"display":true}
,{"id":"inserer_modele_album_nivoslider","name":"un album (carousel Nivoslider)","className":"outil_inserer_modele_album_nivoslider","beforeInsert":function() {jQuery.modalboxload("http://escal.ac-lyon.fr/spip/spip.php?page=inserer_modeles&modalbox=oui&id_article=177&id_forum=6039&retour=spip.php%3Farticle177%26lang%3Dfr&lang=fr&formulaire_modele=album_nivoslider",{minHeight: "90%", type: "ajax"});},"display":true}
,{"id":"inserer_modele_media","name":"un document","className":"outil_inserer_modele_media","beforeInsert":function() {jQuery.modalboxload("http://escal.ac-lyon.fr/spip/spip.php?page=inserer_modeles&modalbox=oui&id_article=177&id_forum=6039&retour=spip.php%3Farticle177%26lang%3Dfr&lang=fr&formulaire_modele=media",{minHeight: "90%", type: "ajax"});},"display":true}
]

Un hash c'est une sorte de résumé informatique d'un texte. SOuvent une suite de caractère melangt lettre et chiffe

ici 01c79be019f1d0eb15acb6376e4f02ba.js bah typiquement 01c79be019f1d0eb15acb6376e4f02ba c'est un hash (qui condense en gros le nom des fichiers JS compacté)

Et j’ai recherché le forum 6039 et il date d’avril 2016 …

JC

mouais, mais ca peut importe. On dirait qu'il y un js par page generé ou tu appeler inserer_modele (donc sans doute par page où il y a unformulaire de réponse aux forums).

C'est un bug quelque part, sans doute dans inserer_modeles.

J'essaie de voir cela après ma sieste

Ok

J’ai donc désactivé insrérer_modeles pour voir comment ça évolue

Bonne sieste.

JC

Ah ben tu m’étonnes...

le plugin inserer_modeles modifie donc le JS du porte-plume en lui insérant dedans du JS *avec* une URL qui reprends peu ou prou tous les args de la page en cours.
Autant dire que c’est une hérésie totale : chaque URL de l’espace privé génère une version de JS pour le porte plume, qui génère donc une version de JS compressée pour l’espace privé.

De ce que je vois c’était déjà pas beau avant mais ce commit a fini de clouer le cercueil https://git.spip.net/spip-contrib-extensions/inserer_modeles/commit/98f968594986746ec2eb26bd354e67f63f3266ea

Et il y en a encore qui se demande pourquoi je crie au scandale à chaque fois que je vois du JS ou du CSS généré via un squelette SPIP ?

Le JS aurait été statique, cela aurait obligé à se poser des questions et faire autrement, plus finement.
Là c’est tellement facile que boum j’envoie n’importe quoi dans le JS sans me poser de question et à la fin on rammase les sites à la petite cuillère...

Il faut tout recoder en faisant la tambouille en JS, pas en PHP : le script du porte plume ne doit *pas* dépendre de la page ou de l’URL en cours

+1, il faut toujours partir du principe que le JS doit être statique (ça doit être une méga méga exception, qu'il soit en squelette), et donc architecturer le code pour utiliser des infos utilisables en JS (data dans le HTML, etc, notamment)

Arf, oui. Je ne pensais pas du tout que le le js du porte plume était dynamique. Sinon je n'aurais pas codé comme cela.

Je reverte ce commit, et j'essaie de voir comment l'écrire plus proprement pour répondre au besoin en full JS.

Cela étant le problème est donc aussi du côté de porte plume qui generer un js différent selon ce que les gens lui ont fourni dans ses pipelines.

non non non, le problème ne vient pas de porte-plume.
Il permet de modifier le JS pour insérer des boutons et utiliser des infos de config pour ce faire, et c’est le pourquoi du JS en squelette modifiable via pipeline.

Mais bon là à partir du moment où on insère dedans du contenu qui change à chaque URL comment est-ce qu’on peut supposer que ça marche ?
Et je redis, ton commit n’a fait que généraliser ce qu’il y avait avant, en l’empirant certes, mais le problème était déjà là.

Et du coup je pense que @nicod était aussi touché par ce soucis avec ses répertoires cache qui gonflaient à tour de bras...

Attention ton revert à perdu le patch https://git.spip.net/spip-contrib-extensions/inserer_modeles/commit/9eba5fd9ea20ce1d959733fa23ae55c011c29289

En tout cas je confirme qu'une fois le plugin "Insérer modeles" désactivé, je n'ai plus de nouveau fichiers créés dans cache-js depuis presqu'une heure maintenant.

Merci pour le debug et bon code pour les corrections.

JC