Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Les virgules bloquent Twitter sur Opera
Est-il logique d'optimiser le code JavaScript en remplaçant point virgule par virgule ?

Le , par Hinault Romaric

0PARTAGES

9  0 
Hallvord Steen un développeur de l’équipe en charge du navigateur Opera a récemment constaté que le site Twitter ne fonctionnait pas avec la version finale d’Opera 12.

Le problème serait dû à une erreur lors de la compilation du code JavaScript par le compilateur du navigateur.

Après investigation, Steen s’est rendu compte que le compilateur devait analyser un énorme fichier de près de 4 129 653 caractères. Mais, le problème ne serait pas au niveau de la taille du fichier ou du nombre de caractères, mais plutôt dû au fait que les virgules soient utilisées en lieu et place des points virgules, rendant pratiquement les 4 millions de caractères comme une seule instruction JavaScript.

Il s’avère pourtant que l’analyseur de code d’Opera dispose d’une limite pour une instruction JavaScript. Ce qui entraine l’échec de la compilation, et ne permet pas de ce fait à Twitter de s’afficher normalement.

L’utilisation de la virgule à la place du point virgule présente-t-elle un avantage, ou permet–elle d’optimiser le code JavaScript ? Steen, pour sa part, n’encourage pas le recours à cette syntaxe. « La virgule présente des inconvénients comme la génération d’un code beaucoup plus difficile à compiler par plusieurs compilateurs JavaScript actuels » note Steen.

Cependant, les sites s’orientent de plus en plus vers cette syntaxe. « J’ai vu quelques sites utiliser des virgules à la place des points virgules dans leur code JavaScript récemment. Pourquoi cette mode, ça me dépasse », regrette Steen.

Un correctif est néanmoins disponible pour Opera, permettant de résoudre ce problème avant que cela ne soit réglé dans le compilateur JavaScript du navigateur. Le correctif permet juste d’ajouter un point virgule dans le script avant que la limite ne soit atteinte.

Utiliser le correctif

Source : Blog Hallvord Steen

Et vous ?

Qu’en pensez-vous ? Est-ce une façon d’optimiser le code JavaScript ? Si oui, est-elle logique ?

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de poringkiller
Membre du Club https://www.developpez.com
Le 20/07/2012 à 21:02
la virgule est un opérateur javascript, toutes les sorties sauf la dernière sont ignorées, ainsi
var temp = 9,8;
console.log(temp);
écrira 8.
Ce n'est pas une mode, c'est bel et bien une manière d'optimiser le code. Certains compilateurs executent le code plus vite, comme certaines sorties sont ignorées, mais on peut voir que ça en fait planter d'autres.
3  0 
Avatar de Latios
Membre à l'essai https://www.developpez.com
Le 20/07/2012 à 19:34
Steen s’est rendu compte que le compilateur devait analyser un énorme fichier de près de 4 129 653 caractères.
4 Mo ? Y'a un fichier Javascript de 4 Mo sur Twitter ? :o
2  0 
Avatar de Paul TOTH
Expert éminent sénior https://www.developpez.com
Le 23/07/2012 à 13:10
je ne connaissais que cet usage

Code : Sélectionner tout
1
2
3
 for (i = j = 0; i < 10; i++, j+=2) {
 }
2  0 
Avatar de rt15
Membre confirmé https://www.developpez.com
Le 24/07/2012 à 11:22
Citation Envoyé par thelvin Voir le message
Et ça ne résout pas le problème. Les processeurs différents ont des caches différents. Si l'un d'eux indique dans son cache que la mémoire est libérée et que le pointeur est NULL, l'autre ne le verra pas dans le sien. Et ces deux informations peuvent porter sur plusieurs parties du cache : l'une peut être vue avant l'autre (et même pas dans le bon ordre.)
Sans aucune instruction de synchronisation de cache, il n'y a pas de solution.
Non pas de souci à ce niveau tout du moins sur PC. Si on écrit quelque chose à l'adresse X, alors toute lecture de la même adresse depuis un autre thread s'exécutant sur un autre coeur (Du même processeur ou d'un autre) renvoie bien la valeur qui vient d'être écrite.
Cela est dû au fait que la cohérence des caches est garantit sur les x86 au niveau hardware. Les constructeurs utilisent des protocoles de cohérence de cache. Papier sur le sujet ici.
2  0 
Avatar de Uther
Expert éminent sénior https://www.developpez.com
Le 20/07/2012 à 17:14
Qu'une seule chose à dire:
1  0 
Avatar de _NiTo_
Membre du Club https://www.developpez.com
Le 20/07/2012 à 17:52
débile...

Un semblant d'explication que j'ai pu voir sur le blog opera: http://blog.vjeux.com/2011/javascrip...mma-trick.html

Ceci-dit, ça n'excuse pas vraiment une "ligne" instruction de 1048 virgules...
1  0 
Avatar de Uther
Expert éminent sénior https://www.developpez.com
Le 21/07/2012 à 8:51
La virgule n'est pas un séparateur d'instruction mais un opérateur dans une expression comme l'explique poringkiller. Ça fait en effet partie de la spécification du langage. C'est un héritage de C, C++ et la plupart des langages qui ont une syntaxe qui en dérive.

Du coup des petits malins qui ne voient pas la différence ce sont dit que ça pouvait être une bonne idée de remplacer violemment ";" par ",". Mais bon avoir une seule instruction de 4Mo, faut pas s'étonner que l'interpréteur ait du mal à le digérer.
1  0 
Avatar de Uther
Expert éminent sénior https://www.developpez.com
Le 21/07/2012 à 11:12
L'opération "," consiste à retourner la valeur du dernier opérande.

Par exemple : i = 6 + (1, 4) / 2; assigera 8 à la variable "i". L'opération 1, 4 retourne 4.

Pour te convaincre que c'est bien un opérateur regarde le tableau de précédence des opérateurs. Il est vrai cependant que cet opérateur a une utilité douteuse qui fait que peu de gens connaissent son existante.
1  0 
Avatar de Paul TOTH
Expert éminent sénior https://www.developpez.com
Le 21/07/2012 à 12:39
au temps pour moi
http://en.wikipedia.org/wiki/Comma_operator

il n'en reste pas moins que c'est donc d'un usage valide...il me reste l'interrogation sur la taille du JS
1  0 
Avatar de camus3
Membre éprouvé https://www.developpez.com
Le 21/07/2012 à 13:28
Attention à ne pas confondre optimisation et minification .

La minification en soit ne rend pas l’exécution du code plus rapide ( à part le parsing du fichier peut être , et encore , ce n'est même pas sur ). En tout cas , elle ne rend pas un algo plus efficient c'est clair.

Maintenant , des compilateurs tels que le closure compiler modifient carrément la logique du code , et transforme certaines boucles par exemple en des boucles soit disant plus "optimisées".
1  0