Problème relié à la compression des javascripts

2 participants

Voir le sujet précédent Voir le sujet suivant Aller en bas

En cours Problème relié à la compression des javascripts

Message par Le Grand Duc Lun 21 Déc 2020 - 21:19

... ou « Pour quelques millisecondes de moins »
Bonjour,
un problème bizarre aujourd'hui.
Contexte : j'ai deux scripts qui fonctionnent super bien si je les teste indépendamment sur mon site de test.
Problème : quand je les installe tous les deux, ils ne fonctionnent plus ni l'un ni l'autre.
Enquête : je remarque qu'ils sont intégrés en un seul fichier (Est-ce que c'est nouveau ? Il me semble qu'avant ils restaient chacun dans un fichier propre, mais bon... ).
Le constat : à la fin du premier script, il manque un ; !
La preuve :Voici la fin du 1er script : Notez le ; montré par la flêche

Problème relié à la compression des javascripts Fa0110

Le début du second :

Problème relié à la compression des javascripts Fa0210

Or, le débogueur de Chrome accuse mon script d'avoir un identifiant illegal juste à la jonction des deux fichiers, alors j'inspecte le code source, et je constate qu'un ; a été escamoté à quelques caractères de la fin de mon premier script à cet endroit.

Problème relié à la compression des javascripts Fa510

Le débogueur d'Explorer est encore plus précis et signale carrément qu'il manque un ;

Problème relié à la compression des javascripts Fa0610

Le suspect : La compression du code visant à rendre le fichier aussi court que possible : tous les espaces, commentaires ; sauts de ligne ou autres inutiles sont supprimés. Tout ça pour rendre le fichier le moins lourd possible. Bon, c'est bien gentil  de se soucier à ce point de la bande passante de nos utilisateurs, mais trop c'est trop. Il y a des ; qui sont obligatoires, la preuve.
Recommandation de la peine : Obtenir du système FA qu'il ne supprime pas les ; obligatoires. Dans le doute, n'en supprimer aucun. Ce n'est pas pour quelques dizaines de caractères que ça fera une grosse différence.

La Cour se retire, veuillez vous lever s'il vous plaît
Le Grand Duc

Le Grand Duc
****

Masculin
Messages : 252
Inscrit(e) le : 29/01/2017

https://accropedia.com
Le Grand Duc a été remercié(e) par l'auteur de ce sujet.

En cours Re: Problème relié à la compression des javascripts

Message par Le Grand Duc Lun 21 Déc 2020 - 22:40

En attendant, j'ai trouvé un contournement : ajouter un énoncé inutile au bon endroit, comme ça le rouleau compresseur passe sa rage sur une autre ; qui lui est bien inutile.

Code:
     });
     var truc = 0;
  });
Le Grand Duc

Le Grand Duc
****

Masculin
Messages : 252
Inscrit(e) le : 29/01/2017

https://accropedia.com
Le Grand Duc a été remercié(e) par l'auteur de ce sujet.

En cours Re: Problème relié à la compression des javascripts

Message par Le Grand Duc Mer 23 Déc 2020 - 16:58

Bon, j'ai pu trouver un contournement, mais il n'empêche que ce bogue reste une épée de Damoclès sur la rête de tous ceux qui ajoutent des scripts à leur forum. Personne n'a déjà eu un problème similaire ?
Le Grand Duc

Le Grand Duc
****

Masculin
Messages : 252
Inscrit(e) le : 29/01/2017

https://accropedia.com
Le Grand Duc a été remercié(e) par l'auteur de ce sujet.

En cours Re: Problème relié à la compression des javascripts

Message par Le Grand Duc Dim 3 Jan 2021 - 23:57

Bonjour,
mon contournement ne marche plus, nos scripts non plus.
On a tj le même problème : le (rouleau) compresseur de script nous supprime un caractère ;

La console de Chrome me signale un « unexpected token 'if' » dans le fichier 99145.js

Problème relié à la compression des javascripts 0036

J'ouvre ce fichier, et on voit effectivement un if ligne 1, car 1. Comment peut-il y avoir une erreur sur le premier caractère du fichier ? Impossible,... à moins que Chrome considère une suite de fichiers script comme un seul et même script et que l'erreur date de la fin du fichier précédent.

Problème relié à la compression des javascripts 01134

Le fichier qui précède s'appelle 16923.js. L'erreur doit donc se trouver à la fin de ce fichier.
J'ouvre le fichier correspondant chez nous et je vois qu'on a exactement );}); à la fin.

Problème relié à la compression des javascripts 0265

Mais j'ouvre ensuite le fichier 16923.js, version compressée de notre script et en effet, il manque encore un ; vers la fin !

Problème relié à la compression des javascripts 0359

Conclusion : on s'est fait encore scrapper un ; Problème relié à la compression des javascripts 2628632689

Cette erreur est assommante, elle peut se produire n'importe quand, d'ailleurs le temps que je fasse cette recherche, ça marche de nouveau sur le forum. ça dépend de l'ordre dans lequel se trouvent les fichiers, et comme à chaque fois qu'on en édite un il se retrouve en tête du peloton, l'erreur peut se produire n'importe quand.
Je ne vois personne se plaindre sur le forum FA. Je pense que d'une part il ne doit pas y avoir beaucoup de forums qui développent leur propres scripts. Mais par contre, j'en vois plusieurs qui disent avoir installé tel ou tel script et que « ça ne marche pas ». 
Ce n'est pas parce qu'ils sont capables d'installer un script qu'ils sont capables d'aller voir pourquoi et comment ça ne marche pas, et naturellement dans un cas comme ça, personne ne peut les aider dans le forum.

Au tout début du javascirpt (oui, j'ai connu cette époque !) les ; en fin d'énoncé étaient facultatifs. En effet, le langage était assez rudimentaire et les navigateurs pouvaient s'en passer. Mais de nos jours, avec l'avènement des fonctions orientées objet, ce n'est plus possible, l'absence de ; peut créer des ambiguïtés. C'est pour ça que personnellement, j'en mets toujours.
C'est clairement expliqué ici : You Might Need Those Semicolons in Your JavaScript After All 

En cas d'ambiguïté, le navigateur est alors forcé de deviner un ; quelque part. S'il devine juste, Bingo ! Vous avez gagné, aller à la case départ et recevez 20 000 $ !  Siffleur
Mais s'il devine de travers, alors là plusieurs choses peuvent se passer :
1° l'erreur cause une erreur de syntaxe et la console vous le signale, c'est comme ça que j'ai pu mettre le doigt sur le bobo, mais il peut arriver un cas plus grave :
2° le ; mal deviné ne cause pas d'erreur de syntaxe. Ce qui arrive, c'est que la fonction qui suit le ; manquant est définie à l'intérieur de l'objet précédent. Elle est correcte, mais comme elle n'existe pas là où elle devrait dans la structure, elle ne sera tout simplement pas exécutée.
Et là, vous pouvez chercher longtemps pourquoi « ça ne marche pas », surtout si c'est un script que vous avez installé des années plus tôt et qui a toujours fonctionné fidèlement. scratch

Alors je lance un appel désespéré : AU SECOURS QUELQU’UN ! salut victoire Bravo2 Désactivez nous ce rouleau compresseur, merci ! Baston Pc ok
Le Grand Duc

Le Grand Duc
****

Masculin
Messages : 252
Inscrit(e) le : 29/01/2017

https://accropedia.com
Le Grand Duc a été remercié(e) par l'auteur de ce sujet.

En cours Re: Problème relié à la compression des javascripts

Message par Luzz Jeu 21 Mar 2024 - 12:27

Bonjour @Le Grand Duc ,

Je suis sincèrement désolée, l'équipe technique n'a pas pu se pencher sur ce problème jusqu'ici, mais je viens vers vous pour vous demander si le problème est toujours actuel aujourd'hui.

Merci d'avance de votre retour, cordialement.
Luzz

Luzz
Adminactive
Adminactive

Autre / Ne pas divulguer
Messages : 4730
Inscrit(e) le : 25/10/2007

https://forum.forumactif.com
Luzz a été remercié(e) par l'auteur de ce sujet.

En cours Re: Problème relié à la compression des javascripts

Message par Le Grand Duc Jeu 21 Mar 2024 - 16:33

Bonjour,
À vrai dire, je ne sais pas si le problème est toujours là, mais je présume que si vous n'avez pas apporté de changement, il ne s'est pas corrigé tout seul.
En fait il y a deux problèmes :
1° quand une ligne comporte un ; qui n'est pas à la fin de la ligne, il est perdu (le problème décrit ici), donc
Règle n° un : quand on termine un énoncé avec un ;, continuer absolument la suite sur la ligne suivante.
2° En Javascript, en principe, tout énoncé doit être terminé par un ; Cependant si on continue avec un autre énoncé sur une ligne suivante, le ; est supposé par le compilateur s'il est absent. Mais comme le compresseur élimine les sauts de ligne, le compilateur ne sait plus où ajouter le ; manquant, donc,
Règle n° deux : ne jamais omettre les ; à la fin des énoncés terminés par un saut de ligne.

Note : Ceci dit, on n'est plus à l'époque des modems à 300 bauds, cette compression est devenue franchement futile, elle rend les scripts beaucoup plus difficiles à déboguer. Même le fait de regrouper tous les scripts en un seul est très malcommode. Le plus simple serait de les laisser tel quel et de les faire charger successivement et indépendamment et ça règlerait les problèmes d'un seul coup.
Le Grand Duc

Le Grand Duc
****

Masculin
Messages : 252
Inscrit(e) le : 29/01/2017

https://accropedia.com
Le Grand Duc a été remercié(e) par l'auteur de ce sujet.

En cours Re: Problème relié à la compression des javascripts

Message par Luzz Jeu 21 Mar 2024 - 16:48

Merci @Le Grand Duc de votre retour.

Ne faisant pas vraiment partie de l'équpe technique, je ne peux pas vous dire si nous avions fait quelque chose ou pas : en 3 ans, il y a eu pas mal de changement à tous les niveaux.

Je vais créer un ticket pour les dévs et / ou voir avec eux (pas avant la semaine prochaine à cause des vacances Embarassed -mais bon, vous avez sagement attendu plus de 3 ans... pirat )

Cordialement.
Luzz

Luzz
Adminactive
Adminactive

Autre / Ne pas divulguer
Messages : 4730
Inscrit(e) le : 25/10/2007

https://forum.forumactif.com
Luzz a été remercié(e) par l'auteur de ce sujet.
  • 0

En cours Re: Problème relié à la compression des javascripts

Message par Le Grand Duc Jeu 21 Mar 2024 - 16:56

Luzz a écrit:mais bon, vous avez sagement attendu plus de 3 ans... pirat )  

Cordialement.

À vrai dire, en trois ans j'ai surtout acquis la sagesse de ne pas attendre et de régler les problèmes moi-même Problème relié à la compression des javascripts GrosRire
Le Grand Duc

Le Grand Duc
****

Masculin
Messages : 252
Inscrit(e) le : 29/01/2017

https://accropedia.com
Le Grand Duc a été remercié(e) par l'auteur de ce sujet.

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum