Problème relié à la compression des javascripts
3 participants
Forum gratuit : Le forum des forums actifs :: Entraide & Support... :: Besoin d'un Dévactif... :: Archives: les corrections apportées
Page 1 sur 1 • Partagez
Problème relié à la compression des javascripts
... 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
Le début du second :
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.
Le débogueur d'Explorer est encore plus précis et signale carrément qu'il manque un ;
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
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
Le début du second :
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.
Le débogueur d'Explorer est encore plus précis et signale carrément qu'il manque un ;
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
Re: Problème relié à la compression des javascripts
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;
});
Re: Problème relié à la compression des javascripts
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 ?
Re: Problème relié à la compression des javascripts
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
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.
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.
Mais j'ouvre ensuite le fichier 16923.js, version compressée de notre script et en effet, il manque encore un ; vers la fin !
Conclusion : on s'est fait encore scrapper un ;
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 $ !
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.
Alors je lance un appel désespéré : AU SECOURS QUELQU’UN ! Désactivez nous ce rouleau compresseur, merci !
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
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.
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.
Mais j'ouvre ensuite le fichier 16923.js, version compressée de notre script et en effet, il manque encore un ; vers la fin !
Conclusion : on s'est fait encore scrapper un ;
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 $ !
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.
Alors je lance un appel désespéré : AU SECOURS QUELQU’UN ! Désactivez nous ce rouleau compresseur, merci !
Re: Problème relié à la compression des javascripts
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.
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.
Re: Problème relié à la compression des javascripts
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.
À 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.
Re: Problème relié à la compression des javascripts
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 -mais bon, vous avez sagement attendu plus de 3 ans... )
Cordialement.
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 -mais bon, vous avez sagement attendu plus de 3 ans... )
Cordialement.
Re: Problème relié à la compression des javascripts
Luzz a écrit:mais bon, vous avez sagement attendu plus de 3 ans... )
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
Re: Problème relié à la compression des javascripts
Bonjour,Le Grand Duc a écrit:Luzz a écrit:mais bon, vous avez sagement attendu plus de 3 ans... )
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
Ce sujet est par conséquent archivé.
Cordialement.
Sujets similaires
» Option pour désactiver la compression des javascripts
» Forum relié à mon mail inconnu >5ans
» Connexion impossible du Twitter relié au forum
» Compression des Forums
» Compression de categories
» Forum relié à mon mail inconnu >5ans
» Connexion impossible du Twitter relié au forum
» Compression des Forums
» Compression de categories
Forum gratuit : Le forum des forums actifs :: Entraide & Support... :: Besoin d'un Dévactif... :: Archives: les corrections apportées
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum