Journal Javascript, os et navigateurs

Posté par  .
Étiquettes :
0
29
sept.
2006
Bonjour,
Suite à une affirmation plus ou moins gratuite de ma part accusant Firefox d'être plus lent sous Windows que sous Linux ( https://linuxfr.org/comments/759312.html#759312 ), et sur les conseils éclairés de Mathieu Pillard j'ai voulu lancer quelques bench JS sous différents navigateurs et plateformes.

Avant d'aller plus loin, précisons que ce test n'est certainement pas infaillible ou super objectif, qu'il est certainement contestable autant que mes choix lors de leur lancement (config des os, etc.)
Je désirais simplement mesurer des ordres de grandeur, et je crois que pour cela ce test est suffisant.

N'ayant pas beaucoup de temps, j'ai utilisé mon ami Google qui m'a indiqué un bench tout prêt: http://celtickane.com/projects/jsspeed.php

J'ai adapté les quelques valeurs dans le code (nombre d'itération des boucles) afin d'avoir des temps d'exécution relativement long, mais pas trop. J'ai également supprimé le test AJAX, qui appellait une page distante.

La configuration sur laquelle le test a été lancé est la suivante:

AMD Athlon XP 3500+ 64bits
1Gb Ram

Systèmes d'exploitation:
Ubuntu GNU/Linux 6.10 (beta) (à défaut d'une vraie debian)
Microsoft Windows XP SP2

Navigateurs:
Mozilla Firefox 2.0b2
Opera 9.02
Konqueror 3.5.4
Internet Explorer 6.0 SP2

Pour chaque opération, le test a été lancé 10 fois. Le résultat donné est la moyenne des temps finaux.

Linux:
Firefox : 8457.9 ms
Opera: 3819.5 ms
Konqueror: 3883 ms

Windows:
Firefox: après environ 12 secondes, on a l'avertissement que le script est trop long, et la possibilité de l'arrêter. Impossible de faire une moyenne avec ça.
IE: 3764 ms
Opera : 2817.2 ms

Quelques remarques en conclusion:
- Firefox est de loin le plus lent des navigateurs testé. En plus, mon accusation envers la version windows semble en effet infondée: c'est l'inverse que l'on constate ici.
- IE est très rapide. En dehors de son non respect des standards, ceci m'impressionne. Navigateur de qualité par ailleurs ?
- Opera est étonnant: sa version windows est de loin plus la plus rapide. Comment cela se fait-il ? (C'est pas du QT, majoritairement développé sous linux, ou je me trompe ? optimisé pour windows car plateforme majoritaire ?)
- Konqueror est très bon également, excellente nouvelle !

Je m'arrête ici, les détails sont dispo sur demande.
Je suis grandement intéressé à avoir vos avis sur la question, sans virer dans des trolls éternels, ce qui m'intéresse, c'est plus le "pourquoi" de certains de ces résultats (qui valent ce qu'ils valent, je le rappel !)

Bonne journée.
  • # Je sais pas comment tu fais ...

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

    J'obtiens 1710 ms au maximum avec firefox 1.5.0.7 sur ma debian sid.

    Peut être un problème de configuration ?
    Sinon c'est pas nouveau que firefox est pas forcement le navigateur le plus rapide au monde pour le javascript ...
    • [^] # Re: Je sais pas comment tu fais ...

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

      le nombre et la qualité des extensions est ( très ) souvent la cause du retard à l'allumage.
      • [^] # Re: Je sais pas comment tu fais ...

        Posté par  . Évalué à 4.

        Sans extension, j'obtiens sur une SunBlade 150 en station de travail
        Try/Catch with errors 835
        Layer movement 1462
        Random number engine 1556
        Math engine 3179
        DOM speed 1415
        Array functions 422
        String functions 146
        Ajax declaration 884

        Avec un unresponsive script systematique au milieu, soit un chiffre exhorbitant.

        Comme on est vendredi, c'est permis : dillo fait vachement mieux sur ce test !
    • [^] # Re: Je sais pas comment tu fais ...

      Posté par  . Évalué à 2.

      J'ai par expérience de tres grande différence de veloccité de firefox suivant le proceceur qui est en dessous :

      Sur mon "Intel(R) Celeron(R) CPU 2.40GHz" les articles/journaux de plus de 100 commentaire me balance un avertissement me demandant si je doit continuer le script, alors que la même page avec firefox sur un Intell Centrino (Pentium M 740) c'est quasi immediat.

      on avait déjà mis cela en évidence sur ce thread a propos de la dlfptoolbar https://linuxfr.org/~remat/20316.html

      Dam
    • [^] # Re: Je sais pas comment tu fais ...

      Posté par  . Évalué à 6.

      Comme précisé dans mon journal, j'ai modifié le script afin qu'il soit plus long à l'exécution. Je peux poster les modifs des boucles si nécessaire !
  • # Javascript, vraiment représentatif ?

    Posté par  . Évalué à -5.

    C'est très beau des benchs javascript,
    Mais personnelement, je ne connais pas de site où il faut attendre plusieurs secondes à cause du javascript.

    Le seul regret que j'ai pour Firefox, c'est le premier lancement qui est un peu long.
    • [^] # Re: Javascript, vraiment représentatif ?

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

      personnellement, je ne connais pas de site où il faut attendre plusieurs secondes à cause du javascript.


      Toi on voit bien que tu t'es jamais pris un warning javascript firefox sur linuxfr... Va visiter une page avec plus de 100 commentaires, tu vas comprendre (bon, ok, ça dépend de la bécane).
      • [^] # Re: Javascript, vraiment représentatif ?

        Posté par  . Évalué à 7.

        Je suis passé de Firefox à Konqueror comme butineur par défaut, surtout pour linuxfr.

        Pour linuxfr, j'ouvre les articles/journaux dans des onglets en arrière plan : j'en ouvre 10-20 de suite puis je les lis/parcours.

        Quand j'utilisais Firefox, en ayant supprimé la fameuse question « le Javascript, c'est trop dur pour moi, je peux arrêter, dis je peux ? », l'ouverture d'un article/journal à 50 commentaires bloquait le navigateur pendant 1 ou 2 secondes (pas de clic possible), avec plus de 100 commentaires, le navigateur était inutilisable pendant 15 s.

        Avec Konqueror, seuls les articles/journaux à plus de 100 commentaires bloquent l'interface pendant 2 à 3 s.

        Évidemment, on voit mieux la différence avec un PC « lent »…
    • [^] # Re: Javascript, vraiment représentatif ?

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

      tu viens souvent sur linuxfr ?
      • [^] # Re: Javascript, vraiment représentatif ?

        Posté par  . Évalué à 3.

        moi oui, et jamais eu de problème.
      • [^] # Re: Javascript, vraiment représentatif ?

        Posté par  . Évalué à 5.

        sans doute qu'il ne participe jamais aux trolleries avec plus de 150 commentaires ! ;)

        Opera est donc le navigateur le plus adapté pour troller mouler. Mais Konqueror ne s'en sort quand même pas trop mal (même si dans le test original, il y a plus de différence, j'ai 400 avec opera là où j'ai 1500 avec konqueror)

        Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it

        • [^] # Re: Javascript, vraiment représentatif ?

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

          Note : mais firefox s'en sortirait *beaucoup* mieux que les autres si le script avait été fait au mieux des fonctionnalités au lieu de chercher les compatibilités avec ie/opera/konqueror

          Bref, firefox est plus lent sur la toolbar, mais c'est pour que les autres puissent fonctionner tout court.
          • [^] # Re: Javascript, vraiment représentatif ?

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

            Notez que sur ma dernière version firefox explose tout le monde :-)

            La toolbar est quand meme remplie de plein de petits hacks pour supporter divers navigateurs vu qu'elle fait des choses un peu compliquées avec le DOM. M'enfin si vous voulez me moinsser et moinsser Eric pour ca, allez y hein, moi je suis juste l'auteur du truc, j'y connais rien.
      • [^] # Re: Javascript, vraiment représentatif ?

        Posté par  . Évalué à 2.

        Il a peut etre desactivé la toolbar comme je l'ai fait.
  • # Ton test ne veut rien dire. Chez moi Firefox s'en sort bien

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

    Pentium 4 2,8Ghz - 512Mo de RAM

    Linux Ubuntu Dapper 6.10
    1. Konqueror => 1080ms
    2. Epiphany => 1924ms
    3. Firefox 1.5 => 2428ms

    Fenêtre(r) 2003
    1. Firefox 2.0 Bêta => 1939ms
    2. Firefox 1.5 => 2078ms
    3. IE6 => 2953ms

    Fenêtre(r) XP SP2
    1. IE6 => 1938ms
    2. Firefox 1.5 => 2140ms

    Quelques remarques en conclusion:
    .1. J'ai parfois de gros écarts. Par exemple sur Firefox 1.5 sous XP j'ai eu la première fois 1800ms. Mais impossible ensuite de ravoir un chiffe équivalent, donc j'ai mais 2140ms, car ensuite les valeurs oscillaient entre 2100 et 2300ms.
    .2. Tu fais des tests sur un navigateur bêta, et on peut supposer sur un système 64 bits je ne sais pas si c'est pertinent ?
    .3. La vitesse des ces tests donnent une idée, mais à mon humble avis ne corresponde pas à la réalité.

    Enfin bref je pense que les utilisateurs de Linux reproche plus les latences du serveurs X ou de GTK qui donnent une impression de lenteur.
    • [^] # Re: Lisre les journaux en entier il faut ...

      Posté par  . Évalué à 7.

      Toute ligne d'un journal peut, au delà de son éventuelle banalité, receler des informations importante. Genre:

      J'ai adapté les quelques valeurs dans le code (nombre d'itération des boucles) afin d'avoir des temps d'exécution relativement long, mais pas trop. J'ai également supprimé le test AJAX, qui appellait une page distante.

      Bref, tu n'utilises pas le même script, donc tu ne compares pas la même chose.
      De même pour ton point (1), tu aurrais du lire que:

      Pour chaque opération, le test a été lancé 10 fois. Le résultat donné est la moyenne des temps finaux.
  • # Suite ...

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

    Petite page sur le sujet évoqué avec tests intégrés :)
  • # Suite ...

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

    Petite page sur le sujet évoqué avec tests intégrés :)
    http://celtickane.com/projects/jsspeed.php
    • [^] # Re: Suite ...

      Posté par  . Évalué à 6.

      tu veux parler du lien qui est déjà dans le journal ? ;-)
  • # Javascript

    Posté par  . Évalué à 0.

    C'est un test Javascript, pas un test de vitesse de rendu, de téléchargement...

    Tu ne peux donc pas dire que Firefox est plus lent, tu peux seulement dire que le moteur Javascript est plus lent.
    • [^] # Re: Javascript

      Posté par  . Évalué à 7.

      C'est juste, mais tel l'indique le titre du journal, je ne m'intéresse ici qu'à Javascript !
      Il est marrant de constater que lors du test, firefox n'affiche pas les résultats intermédiaires de chaque test une fois qu'il a été effectué, mais affiche tout en bloc tout à la fin.
      Contrairement à Opera, par exemple, qui affiche les étapes intermédiaires et même une ou deux indication d'avance dans les boucles (élément xxxx/total) au fur et à mesure qu'il finit chaque test.

      Ce n'est pas suffisant pour comparer deux moteurs de rendu non plus, mais c'est une première appréciation
      • [^] # Re: Javascript

        Posté par  . Évalué à 2.

        Ce principe d'afficher dès que tu peux quelque chose comme le fait Opera est la raison de la rapidité d'affichage des pages par ce navigateur.
        Car même si au bout du compte, une page s'affichera totalement dans un temps équivalent, le fait qu'il affiche dès qu'il peut, donne l'impression d'avoir un affichage plus rapide. Même si on peut voir des fois des "distortions" de la page quand elle continue a s'afficher.
        De plus, on peut supposer que l'on puisse appliquer une analyse de ce qui est déjà récupéré pour faire des hypothèses d'affichage (et donc de ce qui va être récupéré par la suite -je parle du code structurant ou mettant en page pas le contenu lui même bien sûr-), et ce baser sur la structure la plus probable pour commencer l'affichage et peut être ainsi réduire l'effet de distortion.

        Bon c'est mes 0.2centimes, maintenant je vais me coucher, c pas bon que je réflechisse un peu.
    • [^] # Re: Javascript

      Posté par  . Évalué à 7.

      Tu ne peux donc pas dire que Firefox est plus lent, tu peux seulement dire que le moteur Javascript est plus lent.

      Le moteur de javascript de firefox faisant partie de firefox, si: il peut le dire. D'ailleurs il l'a dit.
  • # Javascript

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

    Je vais tenter d'apporter ma pierre à l'édifice.

    À mon travail, j'ai du développer un javascript qui contrôle lui même une vidéo quicktime. J'ai donc recréer entièrement la barre (play, stop, défilement, etc.) en javascript.

    Le javascript fait environ 1500 lignes de codes et j'ai essayé de l'optimiser au maximum en évitant par exemple un maximum d'appels à getElementById en mettant les éléments dans des variables globales.

    La page html est quant à elle, très petite. Il y a juste le head, et dans le body, il y a un object, un embed et deux div environ.

    Le résultat est que firefox et IE sont aussi rapides l'un que l'autre. Seul opera est lent.

    J'avais lu quelque part que Opera est lent lorsqu'on change très souvent le style des éléments. Peut-être que ça vient de là car les styles (left, top, etc...) changent très souvent.
    • [^] # Re: Javascript

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

      Et ça n'aurait pas un rapport avec les lenteurs observées depuis que Mozilla est compilé par défaut avec Cairo (voir un journal qui est passé ici il y a une ou deux semaines) ?

      Depuis que j'ai configuré firefox pour démarrer sans Cairo (variable d'environnement CHAISPULSQUOI_CAIRO=0, je l'ai pas sous la main), il est gravement plus rapide. Pardon, il affiche à nouveau les pages à vitesse acceptable. Plus exactement, je parle du cas ou par exemple une page de DLFP contient des dizaine (centaines ?) de commentaires, faire défiler verticalement la page etait un "pain in the ass". De quoi se poignarder le cul avec une saucisse ! Maintenant, ça défile bien, et mes nerfs se portent mieux, merci.

      J'imagine que faire bouger des DIVs (comme par exemple avec Netvibes) est ralenti par cela... Même si Cairo n'a rien à voir avec Javascript, indirectement son utilisation ralentit les scripts qui touchent au graphique, non ?

      Mon post n'est pas très précis, je vais essayer de retrouver le nom de la variable ce soir...
      • [^] # Re: Javascript

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

        Je me suis trompé, c'est PANGO !!! Ceci explique cela : Je n'arrivais pas à retrouver ce @#$£* de journal ;-) !

        MOZ_DISABLE_PANGO=1

        La différence de vitesse est... Comment dire... Importante.
        • [^] # Re: Javascript

          Posté par  . Évalué à 1.

          Je ne vois pas vraiment de différence mais j'utilise un FF récuperé de chez Mozilla, est-ce qui est actif par défaut dans ce cas?
      • [^] # Re: Javascript

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

        pango plutot non ? La variable que tu cherches est MOZ_DISABLE_PANGO=1

        Tout le probleme étant que pango apporte enormément d'avantages pour les langues non occidentales...
    • [^] # Re: Javascript

      Posté par  . Évalué à 3.

      Comme le fait remarquer Elloco, les résultats de performance JS des navigateurs dépendent beaucoup du type d'opérations réalisées.

      J'ai fait un script JS manipulant du css et des images (chagement de la taille à l'approche de la souris), et sur ce script Firefox était nettement moins performant que le reste, et nettement moins performant sous Linux que sous Windows.
      En enlevant les images, donc avec juste un changement de taille en css d'un élémént HTML, la différence entre Firefox et les autres était moins flagrante.

      Et en regle général, je trouve que Firefox à bien du mal dés qu'il y a des images (une photo en grande taille et il commence à soufler.... oui mon pc s fait vieux... mais là n'est pas la question :p ), et cela joue donc beaucoup dés que tu as un Javascript utilisant des images.


      Autre point : il ne me semble pas étonnant que Firefox soit moins rapide que d'autre. A ma connaissance, une bonne partie du programme de Firefox est composé de scripts non compilé, ce qui n'est pas le cas pour d'autres navigateurs. Et donc je suppose que ça doit faire une grosse différence sur les perfs générales... non ?? je me plante ?
  • # Timeout firefox

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

    Firefox: après environ 12 secondes, on a l'avertissement que le script est trop long, et la possibilité de l'arrêter. Impossible de faire une moyenne avec ça.

    On peux eviter cela en changeant la clef dom.max_script_run_time dans about:config
    La valeur 0 rend cette durée illimitée

    http://kb.mozillazine.org/Dom.max_script_run_time
    • [^] # Re: Timeout firefox

      Posté par  . Évalué à 2.

      Merci, c'est exactement ce que je cherchais, j'ai oublié de le signaler...
      J'avais parcouru le about:config, mais après deux ou trois recherches j'ai abandonné.
      Cette boite de dialogue est bien pénible sur linuxfr quand y a plein de commentaires.
      • [^] # Re: Timeout firefox

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

        Je me repete, mais ca arrivera 3 fois moins si quelqu'un m'aide a sortir la nouvelle version de la toolbar :-)

        Le gros probleme de la version actuelle, c'est que tout a été développé par tranches, en rajoutant au fur et a mesure, et du coup ca parse le DOM plusieurs fois et pas de manière rapide...
  • # Heu .. pourquoi c'est si lent chez toi ? oO

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

    Perso, j'ai un amd64 3200+ et 2Gb de ram
    Le tout Gentoo (32bit) et j'obtient :

    Firefox (2.0b2, avec des extensions) 1418ms
    Konqueror (3.4.5) 2014 ms
    Opera (9.02) 372 ms

    Ce qui est quand même sacrément plus rapide que chez toi, avec un proc moins puissant.

    j'aurais bien fait les tests avec wine pour rigoler, mais faut que je recompile mon kernel pour qu'il marche, donc la flemme :p.
    • [^] # Re: Heu .. pourquoi c'est si lent chez toi ? oO

      Posté par  . Évalué à 5.

      Mais heu, faut lire son texte en entier avant de comparer !
    • [^] # Re: Heu .. pourquoi c'est si lent chez toi ? oO

      Posté par  . Évalué à -1.

      sur un athlon XP 3000+ avec 768 de ram sur un debian unstable , ma moyenne est de 1500 ms , donc en dessous de leur petit graphique en dessous du test

      puis j'ai tester avec les autres que j'ai :

      firefox 1.5.0.7 : 1500 ms
      epihpany 2.14.3 : 1350 ms
      mozilla 1.7.13 : 1700 ms

      ben moi ca me parait bien acceptable et c'est clair que je suis pas a 3ms pres pour attendre l'affichange d'un site . de toute facon j'utilise noscript qui desactive js par defaut sur les site :) ca evite les fioritures a 2 fr 6 sous et j'active si besoin est .
    • [^] # Re: Heu .. pourquoi c'est si lent chez toi ? oO

      Posté par  . Évalué à 3.

      Ce que soulignent tous les tests (à part le tien, ton konqueror est un peu vieux), c'est justement les très bonnes améliorations de vitesse de kjs, l'interpréteur d'Ecmascript de KDE.
      Sinon, chez moi, sur le test que n'a donc pas utilisé TNorth (Core 2 Duo E6300) :
      - Firefox : 1025 ms
      - Konqueror : 635 ms
      • [^] # Re: Heu .. pourquoi c'est si lent chez toi ? oO

        Posté par  . Évalué à 2.

        Tiens, je me suis aperçu que j'avais un noyau en i586 (Mandriva Legacy), j'ai changé pour le 2.6.18-rc7.1mdvsmp, et j'ai une petite différence :
        - Firefox 995 ms
        - Konqueror 564 ms
        Finalement, j'aime bien les benchmarks :)
  • # heuuu

    Posté par  . Évalué à -7.

    ca te parait pas chelou de bencher une appli en beta?
    firefox 2 en l'occurence..
  • # tests invalides

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

    Ton bench ne veut pas dire grand chose. En effet, il faut voir aussi quelle version de javascript les moteurs implémentent.

    Firefox 2.0 implémentant javascript 1.7, qui comportent beaucoup plus de caractéristiques syntaxique que javascript 1.5 (implémenté par les autres navigateurs), l'interpreteur est alors plus complexe, donc forcément, on y perd un peu en perf.


    voir
    http://developer.mozilla.org/en/docs/New_in_JavaScript_1.6
    http://developer.mozilla.org/en/docs/New_in_JavaScript_1.7


    Cependant, il est toutefois admis que pour tout ce qui est manipulation DOM à partir de javascript, c'est effectivement plus lent que les autres navigateurs (la faute en partie à xpconnect, la couche qui fait le mapping entre les objets js natifs et les objets xpcom c++ correspondant..).

    Aprés, les différences entre Windows et Linux, elle est due en grande partie au système et de la façon dont il gére les processus, la mémoire etc. En effet, la majorité du code de firefox entre les deux versions étant identique... Les seuls trucs qui changent entre windows et linux, c'est le contenu de la lib NSPR de mozilla, et les fonctions bas-niveau graphiques.
    NSPR est la lib d'abstraction du système et ne comporte que des fonctions de bas niveau comme l'accés au système de fichier, la gestion mémoire ou la gestion des threads.

    Et les seules différences dans le moteur/interpreteur javascript entre windows et linux, ce sont essentiellement des hacks en fonctions du compilateur qui réagit différement à certaines instructions, ou alors inclure des headers différents. Mais il ne s'agit en aucun cas de différences pour optimiser. Voir la liste de ces différences ici, conçernant le moteur js

    http://landfill.mozilla.org/mxr-test/seamonkey/search?string(...)

    Dans les sources de Mozilla, c'est la constante XP_WIN qui est utilisée pour compiler les trucs spécifiques à windows (#ifdef XP_WIN par ex).
    • [^] # Re: tests invalides

      Posté par  . Évalué à 1.

      Du coté d'Opera, on retrouve ceci: http://www.opera.com/docs/specs/js/

      Mais l'ajout de specs est-il si désastreux pour les performances ? Je me pose la question, parce l'ajout de nouvelles spécifications sont en général (il me semble) l'occasion d'optimiser le code. (Python 2.5, par exemple, a été bien optimisé malgré le support de moultes autre fonctionnalités)
      Je me demande honnêtement si cela justifie un tel écart de performances. Surtout que le test entre FF 1.5 et FF2b2 donne des résultats semblables chez moi (donc différence entre JS 1.5+ un peu de 1.6 vs. JS 1.7)

      Coté fonctions bas-niveau graphique, je n'y connais rien, je constate seulement une facteur 2 de vitesse entre linux et windows sous Opera, il me semblait légitime de me demander d'ou cela vennait !
      • [^] # Re: tests invalides

        Posté par  . Évalué à 2.

        Faudrait comparer les spécs.

        On peut en effet avoir des modifications positives en terme de performance, par exemple :
        — simplification, clarification : moins de cas, moins de tests, moins de bogues ;
        — intégration de mécanismes/fonctions :
          – pour utiliser des techniques plus complexes :
            - codées pour être réutilisées, pas une fonction codée à la vite ou simplement ;
            - qui ne sont pas disponibles (ou difficilement) dans le langage ;
          – pour éviter de passer par l'interprète.

Suivre le flux des commentaires

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