Sortie de GNU LibreJS 4.7

Posté par  . Édité par Florent Zara. Modéré par patrick_g. Licence CC By‑SA.
23
5
juin
2012
GNU

GNU LibreJS est une extension des navigateurs Firefox et dérivés qui permet de n'exécuter que le code javascript libre intégré aux pages web que l'on visite. Une fois cette extension installée, seuls les javascripts explicitement marqués comme libres dans le code source des pages web sont chargés par le navigateur.

LibreJS apporte un minimum d'intelligence dans le blocage, il ne bloque pas notamment les scripts considérés comme triviaux, c'est-à-dire qui ne contiennent ni requêtes Ajax, ni appels dynamiques à scripts externes, ni constructions difficiles à analyser sans interpréter le programme (par exemple : utilisation de la fonction eval, appel à des méthodes via la notation crochets, etc.). La version 4.7 apporte une évolution majeure : LibreJS detecte maintenat 256 différentes versions de bibliothèques libres populaires comme jQuery, MooTools et Prototype : il compare les hash SHA1 des fichiers upstream avec ceux proposés par le site web, et ne bloque pas les copies verbatim de ceux-ci.

L'objectif de cette extension est de répondre au « piège javascript » dénoncé par Richard Stallman :

JavaScript (dont le nom officiel est ECMAscript, mais peu de gens utilisent ce nom) était autrefois utilisé pour faire des effets frivoles, certes jolis mais non essentiels à la navigation et aux fonctionnalités d'affichage. Il était acceptable de les considérer comme de pures extensions du langage de balises HTML, plutôt que comme de vrais logiciels ; ils ne représentaient pas un problème significatif.

Beaucoup de sites utilisent encore JavaScript de cette façon, mais certains l'utilisent pour des programmes conséquents réalisant des travaux importants. Par exemple, Google Docs télécharge sur votre machine un programme JavaScript qui pèse un demi megaoctet, dans une forme compactée que nous pourrions appeler Obscurscript car il n'y a aucun commentaire et très peu d'espaces, et les noms de méthodes ne font qu'une lettre. Le code source d'un programme est la forme préférée pour le modifier ; le code compacté n'est pas du code source, et le vrai code source n'est pas disponible pour l'utilisateur.

[…]

Un fort mouvement s'est développé qui appelle les sites web à ne communiquer qu'avec des formats et des protocoles libres (certains disent « ouverts ») ; c'est-à-dire, dont la documentation est publiée et que chacun est libre de mettre en œuvre. Avec la présence de programmes dans les pages web, ce critère est nécessaire mais pas suffisant. JavaScript lui-même, en tant que format, est libre : utiliser JavaScript dans un site web n'est pas nécessairement mauvais. Cependant, comme nous l'avons vu plus haut, ce n'est pas nécessairement bon. Quand le site transmet un programme à l'utilisateur, il n'est pas suffisant que le programme soit écrit dans un langage documenté et libre d'entraves ; ce programme doit être également libre. « Ne transmettre que des programmes libres aux utilisateurs », cette règle doit faire partie des critères définissant un comportement correct des sites web.

La convention proposée par le projet GNU pour identifier les javascripts libres est simple. La licence libre doit être déclarée en commentaire entre des lignes commençant par "@licstart" et "@licend", et les éventuelles références au code source doivent être précédées par un commentaire commençant par "@source". Des détails et exemples sont donnés dans le guide Setting Your JavaScript Free.

Aller plus loin

  • # à quand l'extension, pour détecter les sites hébergés sur des serveurs non libres ....

    Posté par  . Évalué à 7.

    La prochaine étape ? …

  • # Plus léger ?

    Posté par  (site web personnel) . Évalué à 5.

    J'ai voulu testé l'extension et rien que pour linuxfr.org, ça fait ramer un peu le système car il m'affiche un bandeau à droite qui est je trouve assez inutile et avec des effets kikoos dont on pourrait se passer.

    Je n'ai pas trouvé de moyen de le configurer dans le doc ni dans Firefox lui même, il y a-t-il moyen de changer ce comportement ?

    • [^] # Re: Plus léger ?

      Posté par  . Évalué à 0.

      C'est certain que si on veut un navigateur léger, c'est le genre d'addon à éviter.

      • [^] # Re: Plus léger ?

        Posté par  (Mastodon) . Évalué à 7.

        Si on veut un web utilisable, c'est à éviter aussi…

        Franchement, il y a des gens qui ont réellement envie d'utiliser ce truc ? Il me semble qu'on atteint des sommets dans le ridicule là…

        • [^] # Re: Plus léger ?

          Posté par  . Évalué à 7.

          Si tu trouve ridicule le fait de pas vouloir exécuter du code non libre sur sa machine, t'es sur un site de charlots.

          Please do not feed the trolls

          • [^] # Re: Plus léger ?

            Posté par  . Évalué à 4.

            Personnellement, j'interprète son commentaire différemment. Il critique le moyen (ce filtre ignoble) et pas nécessairement le but. Et pour pas mal de personnes, un script peut être non-libre, mais si il est interopérable (genre pas d'obligations d'utiliser un navigateur particulier), c'est déjà très bien. Mais bon, un sondage pourrait aider à établir le réalité

            • [^] # Re: Plus léger ?

              Posté par  (Mastodon) . Évalué à 3.

              Oui, c'est exactement ça.

              Même si le but est légitime, c'est la façon dont c'est fait qui est absolument stupide, parce que ça va bloquer indifféremment :

              • le code non libre
              • le code libre avec une licence qui n'est pas dans la liste des licences considérées comme libre (WTFPL, par exemple)
              • et le pire de tout : le code libre écrit par quelqu'un qui ne connait pas cette extension et qui n'a jamais mis les commentaires sous la forme exigée

              En clair, à part ralentir le browser et détruire le fonctionnement de pratiquement tout site qui utilise js, cette extension ne sert à rien.

              • [^] # Re: Plus léger ?

                Posté par  (site web personnel) . Évalué à 4.

                Et pour ceux qui ne veulent pas exécuter du JS non libre, tu proposes quoi à la place ?

                Au moins, ils proposent une solution.

                • [^] # Re: Plus léger ?

                  Posté par  (site web personnel, Mastodon) . Évalué à 0.

                  Et pour ceux qui ne veulent pas exécuter du JS non libre, tu proposes quoi à la place ?

                  C'est de l'idéologie d'extremiste. Ces personnes là sont donc des extremistes (ridicules pour ce cas là je trouve). Et si ils veulent utiliser cette extension, ils sont en contradiction avec leur idéologie, car il leur faut utiliser Firefox (ou dérivé).

                  En effet, dans Firefox (ou dérivé), il y a probablement du code dont la licence (libre), n'est pas compatible avec la GPL. Taper about:license pour voir la loooonnnngue liste de licences correspondant au code inclus dans Firefox/Iceweasel. Je n'ai pas vérifié toutes ces licences, mais il y en a probablement qui ne sont pas compatibles avec l'idéologie des ayatollahs du libre.

                  Attention d'ailleurs, ces personnes là vont probablement avoir une crise cardiaque, quand ils apprendront que le matériel sur lequel tourne leurs softs libre, n'est pas libre, que leur bios n'est pas libre etc…

                  Bref, faut parfois arrêter les conneries, et avoir un minimum de pragmatisme.

                  à la limite, que l'extension indique si il y a du code libre ou pas sur un site, pourquoi pas, mais que ça bloque le code non libre, c'est du très grand n'importe quoi.

                  • [^] # Re: Plus léger ?

                    Posté par  (site web personnel) . Évalué à 10.

                    Il faut arrêter de redécouvrir l'eau chaude. Le "libre", version Stallman, est extrémiste. Pour lui, tout code devrait être libre. Même debian n'avait pas ses faveurs à cause des firmewares non libre inclus dans des drivers. Sans son extrémisme, pas d'outils gnu, pas de libc, pas de gcc ! Linux ne s'est pas fait tout seul.

                    Mais il est apprécié pour cela : avoir une ligne claire qui ne varie pas depuis 20 ans. Il n'y a pas de compromission, de position politique pour faire des alliances de circonstances ou un quelconque profit.

                    Toutes les licences de firefox sont bien évidement compatible GPL. Il n'y strictement aucune violation, contrairement à ce que tu as l'air de croire. Les licences en question ressemblent beaucoup aux licences BSD.

                    "La première sécurité est la liberté"

                  • [^] # Re: Plus léger ?

                    Posté par  . Évalué à 10.

                    En effet, dans Firefox (ou dérivé), il y a probablement du code dont la licence (libre), n'est pas compatible avec la GPL.

                    Perso, c'est ce genre d'amalgame que je trouve très dommageable pour le libre. Si, le code de Firefox (et de Iceweasel, à fortiori, si tu veux que le nom soit libre aussi) respecte les 4 libertés. En faisant ce genre d'amalgame, tu participes à l'affaiblissement du libre en disant qu'il n'est pas très important de faire la différence avec du propriétaire/privateur.

                    Attention d'ailleurs, ces personnes là vont probablement avoir une crise cardiaque, quand ils apprendront que le matériel sur lequel tourne leurs softs libre, n'est pas libre, que leur bios n'est pas libre etc…

                    Amalgame, encore.

                    Bref, faut parfois arrêter les conneries, et avoir un minimum de pragmatisme.

                    Ça veut dire quoi exactement dans ce cas ? Il existe du code libre, et du code non-libre. Cette extension permet de faire la différence. Effectivement, je pense qu'en pratique, ça n'est pas super évident de naviguer avec, mais elle a au moins le mérite de nous faire réaliser à quel point on abandonne assez rapidement ses idéaux sur le web.

                  • [^] # Re: Plus léger ?

                    Posté par  (Mastodon) . Évalué à 1. Dernière modification le 06 juin 2012 à 11:53.

                    à la limite, que l'extension indique si il y a du code libre ou pas sur un site, pourquoi pas, mais que ça bloque le code non libre, c'est du très grand n'importe quoi.

                    Et ce qui est encore pire, c'est quand ça bloque du code parfaitement libre (exemple au hasard : linuxfr.org)

                    Cette extension, ça revient à exiger de la part de tous les développeurs web de mettre un sceau "FSF approved" sur tout ce qu'ils codent.

                  • [^] # Re: Plus léger ?

                    Posté par  (site web personnel) . Évalué à 2.

                    Taper about:license pour voir la loooonnnngue liste de licences correspondant au code inclus dans Firefox/Iceweasel. Je n'ai pas vérifié toutes ces licences, mais il y en a probablement qui ne sont pas compatibles avec l'idéologie des ayatollahs du libre.

                    C'est vrai pour Firefox, mais Iceweasel est justement un Firefox légèrement modifié pour être parfaitement compatible avec les DFSG. Quant aux ayatollahs du libre, ils n'utilisent pas Firefox sur leur FSF-approved distro mais GNU IceCat.

                    • [^] # Re: Plus léger ?

                      Posté par  (site web personnel) . Évalué à 3.

                      En l'occurence, ce n'est pas une histoire de licence de code, mais de l'utilisation d'une marque. Pour éviter que des gens recompilent n'importe quoi et mettent le nom Firefox dessus, la mofo demande de vérifier les patchs. Cela se comprends dans l’écosystème typique de Windows, ou il y a aurait un tas de clone avec des malware dedans. Mais cela ne marche plus avec le fonctionnement typique des distributions.

                      "La première sécurité est la liberté"

                  • [^] # Re: Plus léger ?

                    Posté par  . Évalué à 2.

                    Icecat ? tu connais pas ?
                    GNU propose enormement de contre-privateur. Je les admire énormément, et je m'efforce de jours en jours à suivre ce mouvement.
                    Il est très dur d'utiliser aujourd'hui un ordinateur 100% libre, et la faute à qui ?
                    Je suis le mouvement.

                • [^] # Re: Plus léger ?

                  Posté par  (Mastodon) . Évalué à -3.

                  Et pour ceux qui ne veulent pas exécuter du JS non libre, tu proposes quoi à la place ?

                  Je propose de désactiver complètement Javascript. Ou mieux, de ne pas du tout utiliser le web (c'est souvent servi par du logiciel pas libre).

                • [^] # Re: Plus léger ?

                  Posté par  . Évalué à -3.

                  Ils désactivent le JS? Franchement, là, on atteint le sommet du ridicule. 99,99% du code JS ne fournit ni licence ni CLUF (donc, en théorie, sous copyright). Et le code est souvent offusqué sur les sites commerciaux. A ce moment là, pourquoi ne pas bloquer simplement le site? Pourquoi ne pas bloquer également le HTML, qui ne doit pas souvent contenir la mention de la licence?

                  Pour rappel, la GPL c'est un fichier plat à coté du code, point.
                  Enfin, le code JS est souvent codé pour ajouter un poil de dynamisme ou pallier à une carence du html. Codé à l'arrache et de manière dégueulasse. Dont la problématique de la licence est la dernière des préoccupations, selon la philosophie "t'as pas de JS? débrouille toi seul". Consultez vos pages habituelles avec lynx, vous verrez ce que ca donne. C'est la plupart du temps absolument illisible.

                  • [^] # Re: Plus léger ?

                    Posté par  (site web personnel) . Évalué à 3.

                    Et le code est souvent offusqué sur les sites commerciaux.

                    s/le code/l'utilisateur

                    En passant, c'est justement ce code-là qu'il serait plus pertinent de vouloir bloquer. Offusquer du code, ça témoigne rarement d'une bonne intention.

                    Pourquoi ne pas bloquer également le HTML, qui ne doit pas souvent contenir la mention de la licence?

                    Alors là je t'arrête, la page web HTML contient très souvent une mention « © Copyright "machin" All rights reserved » , en tout cas sur les sites US. Dans la plupart des pays d'Europe en revanche, le contenu est automatiquement propriétaire s'il est publié sans licence, même sans la mention Copyright.

                    Consultez vos pages habituelles avec lynx, vous verrez ce que ca donne. C'est la plupart du temps absolument illisible.

                    Ça dépend des pages. Les sites bien conçus sont parfaitement lisibles. Pour le reste, il y a Weboob. (Tiens au fait : est-ce que weboob a besoin d'exécuter le javascript des sites pour fonctionner ou est-ce qu'il se débrouille autrement ?)

                    • [^] # Re: Plus léger ?

                      Posté par  (Mastodon) . Évalué à 2.

                      Offusquer du code, ça témoigne rarement d'une bonne intention.

                      Pour Javascript, dans pratiquement 100% des cas, c'est fait pour des questions de performances.

                      • [^] # Re: Plus léger ?

                        Posté par  (site web personnel) . Évalué à 4.

                        Pour Javascript, dans pratiquement 100% des cas, c'est fait pour des questions de performances.

                        Oui. Si on décidait un jour de remplacer le code HTML par du binaire (ou autre truc difficilement lisible) pour des questions de perfs, même les moins libristes crieraient au scandale.

                        Le web a été conçu comme lisible, voire "hackable" (pour reprendre les mots de Tristan Nitot). On peut vouloir avoir de meilleures performances, mais il faut respecter cette condition.

                        Si un développeur obfusque son code js, ça veut dire que la condition "mon code doit être lisible" est moins importante pour lui que la condition "mon site doit être rapide". On ne peut pas dire que ça part d'une bonne intention.
                        C'est pareil pour tout logiciel propriétaire : certains développeurs pensent que "avoir un minimum de contrôle sur son logiciel" (pour gagner des sous, par exemple) est une condition plus importante que "les utilisateurs doivent être libres et égaux devant mon code". Ça ne veut pas forcément dire que les devs de logiciels propriétaires font du code malveillant, mais on ne peut pas dire que leur intention est bonne de par la façon dont ils considèrent les droits des utilisateurs.

                        • [^] # Re: Plus léger ?

                          Posté par  (Mastodon) . Évalué à 3.

                          La performance est quelque chose d'important pour tous les visiteurs, avoir du code lisible n'est utile qu'à une minorité. Clairement, pour moi, les perfs sont prioritaires, donc je n'hésite pas à minifier mon Javascript (les CSS également). Et si je veux permettre aux gens de jouer avec mon code, je fournis un lien vers le code source lisible et commenté.

                          Au passage, c'est exactement ce qui est fait ici même, voici un bout du Javascript de linuxfr.org (j'ai ajouté les retours à la ligne) :

                          (function(a,b){function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}
                          function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);
                          if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}
                          catch(g){}f.data(a,c,d)}else d=b}return d}
                          
                          
                          • [^] # Re: Plusléger?

                            Posté par  (site web personnel) . Évalué à -3.

                            code lisible n'est utile qu'à une minorité.

                            Pourtant quand tu publie un site web, un des buts est qu'il soit lisible par une majorité (Sinon les devs web ne se casseraient pas les rouleaux à etre compatible avec differents navigateurs)

                            • [^] # Re: Plusléger?

                              Posté par  (Mastodon) . Évalué à 2.

                              Euh… je dois être stupide, mais je vois absolument pas le rapport entre ta réponse et mon commentaire…

                        • [^] # Re: Plus léger ?

                          Posté par  . Évalué à 10.

                          Si un développeur obfusque son code js, ça veut dire que la condition "mon code doit être lisible" est moins importante pour lui que la condition "mon site doit être rapide". On ne peut pas dire que ça part d'une bonne intention.

                          Ce que j'envoie à un client c'est fait pour être exécuté par une machine, tout comme un binaire. Mon code lui est lisible et maintenable. Bref on peut voir ca comme une compilation js vers js. Si l'utilisateur veut le code il va le chercher.

                          Ton argument est du même acabit que dire qu'un compilo ne devrait pas trop optimiser le code, par ce qu'autrement ca devient plus difficile à comprendre quand tu pars du binaire…

                          • [^] # Re: Plus léger ?

                            Posté par  (site web personnel) . Évalué à 1.

                            Ce que j'envoie à un client c'est fait pour être exécuté par une machine, tout comme un binaire. Mon code lui est lisible et maintenable. Bref on peut voir ca comme une compilation js vers js. Si l'utilisateur veut le code il va le chercher.

                            Ton argument est du même acabit que dire qu'un compilo ne devrait pas trop optimiser le code, par ce qu'autrement ca devient plus difficile à comprendre quand tu pars du binaire…

                            Bien vu. Mais ça correspond à deux visions différentes du web en fait : l'une qui voudrait que ce qui est fourni soit considéré comme du contenu, et que tout le code soit lisible et facile d'accès, et l'autre qui voudrait que ce qui est fourni soit considéré comme du logiciel, en faisant le maximum pour améliorer les perfs.

                            Bref, ça ressemble moins au débat libre vs propriétaire qu'au débat Lennart vs certains standards UNIX.

                          • [^] # Re: Plus léger ?

                            Posté par  (site web personnel) . Évalué à 4.

                            Il me semble qu'il existe un bon compromis entre lisibilité et rapidité : minimiser le code et ajouter un commentaire indiquant où trouver le code original ainsi que le logiciel utilisé pour le réduire.

                        • [^] # Re: Plus léger ?

                          Posté par  (site web personnel) . Évalué à 2.

                          ça veut dire que la condition "mon code doit être lisible" est moins importante pour lui que la condition "mon site doit être rapide". On ne peut pas dire que ça part d'une bonne intention.

                          Au contraire !

                          Quel est l'intention d'un dev web ? Nan mais pour de vrai, quel est le but de ce qu'il code ? Simplement écrire un programme / site / cketuveu qui réponde au besoin de l'internaute. C'est ça l'intention. Nono qui écrit le js de la toolbar de linuxfr sont but est d'offrir des fonctionnalités à l'utilisateur. L'intention elle est là.
                          Et que ce soit rapide fait partie des fonctionnalités, que ce soit rapide fait partie des souhaits des utilisateurs (il n'y a qu'à ce souvenir des premières versions avec le moteur templeet).
                          Donc faire un code fonctionnel mais également rapide part réellement d'une bonne intention et est plus important que d'avoir un code commenté visible dans un navigateur.

                          Sur le côté "mon code doit être lisible". Qui doit lire le code ? Attends, je recommence : qui doit lire le code ?
                          Le moteur js du navigateur. C'est lui le client du code. Un code minifié ou pas, on s'en fiche là tout de suite, celui qui doit avoir un code compréhensible c'est le moteur js et un code minifié y répond.

                          Ensuite, la question "mon code doit être lisible par l'internaute". Si on reprend l'exemple de la toolbar linuxfr, le code est lisible, il suffit d'aller chercher les sources sur github et tu l'as le code.
                          Et si on te fourni la sourcemap de correspondance entre le code minifié et le code source tu dois même pouvoir débuger et lire le code minifié.

                          D'ailleurs, je réagis en général complètement à l'inverse de vous. Lorsque je vois un code js sur un site qui est encore bien formatté, commenté (souvent de manière très ridicule et donnant énormément d'informations sur le fonctionnement interne du serveur) je me marre et me dit que le gars qui a pondu ça n'a vraiment rien compris au dev web.

                      • [^] # Re: Plus léger ?

                        Posté par  . Évalué à 2.

                        Pour Javascript, dans pratiquement 100% des cas, c'est fait pour des questions de performances.

                        Sources ?

                        Minifier le JS, ça sert juste à raccourcir un peu le temps de chargement. Mais en fait, ça ne change quasiment rien si on le gzip, ou si on gère bien son cache (vu que tout le monde utilise les même libs, il n'y a qu'à faire pointer au bon endroit pour n'avoir à le charger qu'une fois pour tous les sites webs qui l'utilisent !)

                        Je dirais que l'argument de la performance est fallacieux car même si ça joue un tout petit peu, le bénéfice de l'obfuscation dans le sens de rendre la compréhension du code difficile est très apprécié par beaucoup de ses partisans.

                        • [^] # Re: Plus léger ?

                          Posté par  (site web personnel) . Évalué à 10.

                          Sources ?

                          Et les tiennes justement elles sont où ?

                          Minifier le JS, ça sert juste à raccourcir un peu le temps de chargement. Mais en fait, ça ne change quasiment rien si on le gzip, ou si on gère bien son cache

                          Ha ben j'aimerais bien voir ça…

                          vu que tout le monde utilise les même libs

                          Sauf que c'est pas la réalité des choses ça. Et même si c'était le cas, certains ont inventés les CDN…

                          Je dirais que l'argument de la performance est fallacieux car même si ça joue un tout petit peu, le bénéfice de l'obfuscation dans le sens de rendre la compréhension du code difficile est très apprécié par beaucoup de ses partisans.

                          Sauf que d'ailleurs (en général) personne ne parle d'obfuscation en javascript. Mais on parle bien de minification, de compression. Mais bon, c'est tellement facile de voir le mal et de dire que c'est rien que des méchants.

                          Si je vais une application / site web libre, tu peux être assuré d'une chose c'est que la version destinée à être exécutée et publiée sera minifiée, compilée et gzippée. Sauf que ça ne changera rien du tout au caractère libre de la chose. Et en aucun cas le but sera de masquer le code à l'utilisateur.

                          Allez, prenons un exemple réel, le dernier site (grand public, je parle pas d'un petit site à la con - c'est la partie localisation d'agences d'un site, je ne parle pas du site en entier) que j'ai monté pour un client :

                          • 91 fichiers javascript (en prenant en compte les fichiers provenant de la bibliothèque utilisée)
                            • si je laisse comme ça c'est quand même 91 requêtes http avant d'avoir mon code chargé
                            • version commentée, propre, justement pas minifiée : 1531 ko
                            • onload : 2.86s (et encore je suis en local, j'ose même pas imaginer la catastrophe en prenant en compte la latence du réseau)
                          • une version simplement concaténée et gzipée tombe à 326 ko (c'est quand même beaucoup beaucoup mieux, mais c'est encore beaucoup beaucoup trop)
                          • version concaténée en enlevant tous les commentaires, lignes vides, mais en gardant une mise en forme (sauts de ligne, etc)
                            • 722 ko
                            • version gzip : 134 ko (tiens on est déjà à un facteur 10 !)
                          • la même sans la mise en forme :
                            • 641ko
                            • version gzip : 127 ko (ok là on ne gagne pas grand chose)
                          • version minifiée (renomage des variables par exemple) :
                            • 351 ko
                            • version gzip : 85 ko (facteur 1.6 par rapport à la version où on enlève les commentaires quand même…)
                          • version compilée (clairement illisible mais avec suppression du code mort, inlining des fonctions, réellement axé performances) :
                            • 92 ko (à peine plus que la précédente gzip)
                            • version gzip : 33 ko : facteur 46 par rapport à la première mesure, facteur 4 par rapport à la version lisible non commentée mais gzip et quasiment un facteur 10 avec la version initiale commentée et gzipée.
                            • onload : 1.17s

                          Et donc maintenant tu veux me faire croire que ça joue un tout petit peu ? Ca charge 2x plus vite. Ca utilise 4x moins de bande passante (loin d'être négligeable sur un serveur d'une appli grand publique donc avec beaucoup de trafic). Mais non, ça ne change rien et l'obfuscation et là pour emmerder ceux qui voudraient lire le contenu du js.

                          Mouai, ben maintenant ça serait pas mal que tu sortes tes sources pour dire que ça sert à rien car clairement j'y crois pas.

                          • [^] # Re: Plus léger ?

                            Posté par  . Évalué à 5.

                            Allez, prenons un exemple réel

                            Très bien, j'apprécie que tu prennes le temps de citer un exemple réel.

                            91 fichiers javascript […] onload : 2.86s

                            Effectivement, c'est lent.

                            Par contre :

                            version compilée […] onload : 1.17s

                            C'est mieux, mais comme tu dis, il y a un facteur 46 en taille avec le test précédent, et pourtant le temps de chargement n'est pas diminué du tout du même ordre de grandeur. De plus, comme tu précises, tu es en local, donc tu dois avoir de bons débits. J'en conclue donc que de toutes façons, la taille n'a rien changé, c'est juste de concaténer qui a aidé.

                            Effectivement, la concaténation peut être une optimisation très intéressante ; mais ça n'est pas ce dont je parlais : moi, j'aurais bien aimé voir le résultat du temps de chargement avec la version « simplement concaténée et gzipée ». Je suppose que tu ne gagnes presque rien entre ta version compilée et celle-ci. Si tu pouvais faire le test, ça pourrait être intéressant, même si c'est encore te demander un peu de temps.

                            • [^] # Re: Plus léger ?

                              Posté par  (site web personnel) . Évalué à 7.

                              Pour pas mal de raisons je ne peux pas refaire le test sur cette version exactement (en tout cas pas comme ça, et j'ai pas le temps de le faire).

                              C'est mieux, mais comme tu dis, il y a un facteur 46 en taille avec le test précédent, et pourtant le temps de chargement n'est pas diminué du tout du même ordre de grandeur. De plus, comme tu précises, tu es en local, donc tu dois avoir de bons débits. J'en conclue donc que de toutes façons, la taille n'a rien changé, c'est juste de concaténer qui a aidé.

                              Explication du temps : c'est l'intégration de mon script dans une page existante, il y a donc des composants que je ne maitrise pas. Par contre, on a quand même un gain de 1.7s. Et ça c'est très loin d'être négligeable.
                              J'ai lu par exemple que amazon gagne environ 1% de revenu en réduisant le temps de chargement de 100ms. Gagner plus d'une seconde peut donc nécessiter des efforts important.

                              Par contre, le gain de 10 en taille est d'autant plus significatif lorsqu'on est pas en locale, donc la concaténation peut ne pas suffire.

                              moi, j'aurais bien aimé voir le résultat du temps de chargement avec la version « simplement concaténée et gzipée »

                              Comme je l'ai dit, j'ai pas les chiffres pour l'application dont je parle au dessus.
                              Par contre, j'en ai d'autres, que j'avais justement utilisé comme bench :

                              • Version plain (concaténée mais pas minifiée) :
                                • 1200ko, 1,28s
                              • Version plain gzip :
                                • 440ko, 1,27s (en local le fait de gzipé ou non ne change pas beaucoup dans ce cas)
                              • Compilée :
                                • 600ko, 0.767s (presque /2 par rapport à plain)
                              • Compilée gzip :
                                • 225ko, 0.54s

                              Donc on voit bien les deux axes d'amélioration : gzip (même si en local ce n'est pas le primordial) et compilation

                              Bon, par contre j'ai pas, dans ce cas, la comparaison par rapport à une version non concaténée.

                              J'espère que ça répond un peu plus à tes questions.
                              Il est vraiment intéressant d'appréhender un peu les gains qu'on peut avoir, surtout que beaucoup beaucoup de sites pourraient être améliorés et donc les performances et le ressenti pourrait être bien augmenté.

                              • [^] # Re: Plus léger ?

                                Posté par  . Évalué à 2.

                                Donc on voit bien les deux axes d'amélioration : gzip (même si en local ce n'est pas le primordial) et compilation

                                OK, merci pour ce test. Même si, quand on regarde en détail, il n'est pas super cohérent avec ton autre bench : version compilée « seulement » deux fois moins lourde, contre 8 fois moins précédemment ; versions gzippée qui ne réduit pas beaucoup (c'est du code beaucoup plus « complexe » dans ce bench, peut-être ?) ; grosse différence inexpliquée de la version gzippée compilée. Mais c'est intéressant de voir que la version compilée fait effectivement gagner un certain temps.

                                J'espère que ça répond un peu plus à tes questions.

                                Oui, merci.

                                • [^] # Re: Plus léger ?

                                  Posté par  (site web personnel) . Évalué à 3.

                                  Les différences sont normales, ou plutôt peuvent s'expliquer : le premier exemple que j'ai indiqué utilise vraiment et de manière très propre la library closure alors que le deuxième bench est plus ancien et sur du code "de bench" moins propre et n'utilisant pas tout ce qui est à dispo (oui c'est dommage pour un bench).
                                  Il faut bien comprendre que les outils Google donnent leur plein potentiel lorsqu'ils sont tous utilisés ensemble.
                                  Et l'utilisation de la library closure permet, lorsque associée au compilateur, d'avoir des gains vraiment important. L'utilisation du compilateur seul est bonne mais on peut mieux faire.

                                  Par exemple, jamais avec la lib closure on ne fait utiliser document.getElementById. Tout simplement car c'est un appel natif donc on ne peut pas le renommer. On utilise donc goog.dom.getElement. Et à la compilation c'est transformé en quelque chose de beaucoup plus court, comme c. Si on répète ça souvent et pour un peu tous les cas, on obtient des différences significatives.
                                  Après ça va plus loin, certains comportement de la lib ou du compilateur sont là dans le but de créer des portions similaires afin de pouvoir mieux être compressées par gzip (qui utilise un dictionnaire).

                                  Je peux pas faire une étude vraiment précise mais les meilleurs gains sont vraiment lorsqu'on utilise la totalité des éléments. Et par contre, dernier point de variation, la suppression du code mort peut expliquer de nombreuses différences. Si dans les deux codes j'utilise une lib, mais dans un cas j'en exploite 20% et dans l'autre 80% le résultat sera totalement différent. Dans le premier cas la compilation supprime 80% du code, dans l'autre seulement 20.

                    • [^] # Re: Plusléger?

                      Posté par  . Évalué à 2.

                      On 06/Jun - 13:01, gnuzer wrote:
                      > Tiens au fait : est-ce que weboob a besoin d'exécuter le javascript des sites pour fonctionner ou est-ce qu'il se débrouille autrement ?

                      L'interaction avec un serveur web ne se résume qu'à des effectuer des requêtes HTTP et à parser les résultats pour en extraire les informations. Il est souvent utile de simuler des comportements effectués par du code javascript (définition de cookies, calcul de valeurs à envoyer dans une requête, etc.), mais il n'est pas nécessaire d'exécuter du javascript tel quel.

                      Cela dit, parfois, il y a des sites écrits par des singes (typiquement celui de la BNP Paribas) qui font des choses tellement obscures qu'avant de vouloir m'acharner sur leurs auteurs à coups de pic à glace je serais tenté de vouloir exécuter tout leur javascript.

                  • [^] # Re: Plus léger ?

                    Posté par  (site web personnel) . Évalué à 5.

                    A ce moment là, pourquoi ne pas bloquer simplement le site?

                    Tu veux dire, comme ce que fait un logiciel de controle parental ?

                    Tu sais, ce plugin est quelque chose que l'utilisateur installe sur sa machine. Rien ni personne ne l'oblige a l'installer et a l'utiliser. C'est un plugin qui fait une chose : bloquer ce que l'utilisateur ne veut pas executer. Il fait ce que l'utilisateur veut qu'il fasse.

                    Si l'utilisateur ne veut pas voir un site pour quelque raison que ce soit, copyright/licence ou autre, il n'y a rien qui peut l'obliger a le voir quand même.

                    D'ailleurs, que fait adblock ? Il bloque du contenu qui vient du site, filtre selon certains critères. Est-ce que la publicité est plus légitime a bloquer que du code/contenu non libre ? Je ne crois pas.

                    Pour rappel, la GPL c'est un fichier plat à coté du code, point.

                    Houla. Tu vas un peu vite en besogne.

                    La GPL c'est aussi (et surtout) la philosophie de fournir les instructions qui permettent d'obtenir le même binaire que celui qu'on t'a donne. Bien que ça soit non-ecrit, si tu ne le fais pas, tu vas te prendre des cailloux dans la tronche.

              • [^] # Re: Plus léger ?

                Posté par  (site web personnel) . Évalué à 1.

                Ou alors, c'est le début d'une normalisation pour écrire du code JS libre, tout comme le blabla de la GPL est une normalisation pour écrire du code libre sous GPL. Ça prend de la place sur le disque dur, ça prend de la place pour les transferts, ça fait suer les développeurs qui doivent mettre les bon fichiers au bon endroit… Mais c'est la norme. Et si tu ne la respectes pas, c'est toi qui est en tort, même si tu dis partout "Ce code est sous GPL".

                Le vrai problème, en effet, c'est que ça fait plus de trafic réseau. Mais on pourrait imaginer un répertoire /var/js, qui contient tous les bouts de code JS libres, et qui sont charges du disque directement du disque(vu que LibreJS fait une verif par hash, ça doit être faisable).

                Ou alors, peut-être qu'un jour, avec un peu de chance, on pourra dire bandwidth is cheap tout comme on peut dire aujourd'hui storage is cheap =]

              • [^] # Re: Plus léger ?

                Posté par  (site web personnel) . Évalué à 1.

                • le code libre avec une licence qui n'est pas dans la liste des licences considérées comme libre (WTFPL, par exemple)

                Où as-tu vu que la WTFPL n'est pas reconnue par cette extension ? Parce qu'à ma connaissance, la FSF reconnaît la WTFPL comme valide, libre et compatible GPL (l'OSI ne la reconnaît pas par contre).

          • [^] # Re: Plus léger ?

            Posté par  . Évalué à 1.

            T'as un PC/micro-onde/frigo/tele/voiture/clavier sans-fil/lecteur dvd/montre digitale/reveil/etc.

            Mon dieu, du code non libre s'execute sur des appareils en ta possession. Etre impur, au goulag centre de rehabilitation pour une vie harmonieuse!

      • [^] # Re: Plus léger ?

        Posté par  . Évalué à 0.

        Bah déjà, on évite Firefox et on prend du webkit-based.

        Article Quarante-Deux : Toute personne dépassant un kilomètre de haut doit quitter le Tribunal. -- Le Roi de Cœur

  • # Sorte d'anti-virus donc

    Posté par  . Évalué à 1.

    Ca peut servir donc d'anti-virus en fait puisque certains sites sont infectés par du code javascript qui n'est autre qu'un virus.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.