+++

title = "Les pérégrinations de quelques butineurs en goguette…"
date = 2010-05-14
aliases = [ "post/2010/05/11/Les-pérégrinations-de-quelques-butineurs-en-goguette…"]
[taxonomies]
tags = [ "internet", "web", "nagivateur" ]
+++
Ou comment que c'est gaulé dedans le bouzin en fait…
<!-- more -->
Safari, navigateur historiquement Pomme sous Windows, Google grand maître du monde qui propose un navigateur rapide et performant, Firefox entré dans les mœurs et Internet Explorer vieillissant et fatigué. Voilà comment on pourrait résumer le paysage de l'interwebz des butineurs ces derniers temps. Mais au final, qu'est-ce qu'il y a sous le capot ? Qu'est-ce qui fait la vraie différence entre ces différents produits ? Qu'est-ce qui se cache sous l'étiquette ? ~~Bienvenue dans Capital !~~ Une proposition d'éclaircissement…

# Dessine-moi un navigateur

En dehors des options d'ergonomie et de la gestion des sécurités (certificats, proxy, porn mode, etc…) un butineur de l'interwebz peut se résumer à deux choses : ~~le porn et le pr0n~~ le moteur de rendu HTML et le moteur d'exécution JavaScript.

## Moteur de rendu
Le premier est là pour afficher les pages correctement, l'objectif étant que ça ne ressemble pas à un Picasso réalisé sous Paint. Le moteur de rendu HTML doit à la fois gérer les nombreuses propriétés CSS, le placement des différents éléments, la taille des caractères, le rendu global et les animations, si besoin est, de l'ensemble. Le moteur doit donc prendre en charge de multiples objets avec de multiples propriétés et paramètres, qui, en plus, sont souvent amenés à changer au cours de l'affichage de la page sur les sites interactifs. On peut dénombrer 4 moteurs de rendu HTML différents :
* Trident utilisé par Internet Explorer et consorts (AOL, etc…) ;
* Gecko utilisé par Mozilla dans tous ses produits (Firefox, Thunderbird, SeaMonkey) ;
* Webkit dérivé de KHTML et utilisé par Safari, Chrome, Konqueror, Midori ;
* Presto développé et utilisé par Opera.

Soyons clair tout de suite : le premier est complètement à la rue depuis bien longtemps (« Die IE6 ! Die ! ») et passe à peine l'[acid test 2](http://www.webstandards.org/files/acid2/test.html) en version 8.0. Quant à l'[acid test 3](http://acid3.acidtests.org/), il réalise un score minable de 20% quand tous ses petits camarades font entre 94% (Gecko) et 100% (Webkit, Presto). [En prime, Microsoft force la compatibilité IE7 sur IE8 pour une liste prédéterminée de sites !](http://geekarlier.com/?a=internet-explorer-8-microsoft-incompatible-css-html-w3c-standards) Voilà pourquoi, à titre personnel, je préfèrerais me frotter les couilles avec des orties plutôt que d'utiliser IE. Internet Explorer, c'est comme les lib dubs, la ferme des célébrités et la Tecktonik : IL VA FALLOIR ARRÊTER MAINTENANT !

Pour les autres, je dirais que c'est un peu kif-kif : Presto, Webkit et Gecko ont un très bon rendu et la différence entre chacun tient aujourd'hui plus au support de quelques paramètres CSS obscurs et à l'intégraton de technologie de coupage de coin type HTML5, CSS3, etc… La rapidité de d'interprétation peut également servir de critères même si les différences sont réellement minimes.

## Moteur JS

Cette partie concerne l'exécution de code sur le navigateur client et est particulièrement importante depuis l'arrivée des boîtes à outils type jQuery, MooTools, etc…  et des sites interactifs du Web 2.0. La norme JavaScript ne précisant pas de manière de compiler le code, plusieurs méthodes ont émergé : interprétation brute et conne, compilation d'un code intermédiaire (bytecode) et compilation directe en langage machine. La qualité et la performance d'un interpréteur JavaScript va dépendre fortement des optimisations en fonction des boîtes à outils sus-citées mais également de la manière de procéder pour compiler le code.

Comment mesure-t-on cette performance ? Et bien avec des benchmarks dont le plus célèbre est probablement [SunSpider](http://www2.webkit.org/perf/sunspider-0.9/sunspider.html) ou le [Google V8 Benchmark](http://v8.googlecode.com/svn/data/benchmarks/v5/run.html) (qui donne souvent V8 largement en tête pour une raison simple : le code a été optimisé pour lui…). Voici donc nos principaux candidats :

* Trident JS : inclus dans IE, il interprète (mal) le JS. C'est probablement le plus mauvais interpréteur qu'on ait jamais vu tout langage confondu. Ma grand-mère pourrait compiler du code JS plus vite et mieux, et elle est atteinte d'Alzheimer.
* SpiderMonkey : c'est le moteur historique de Mozilla. Ces performances sont moyennes mais il se défend quand même pas mal…
* TraceMonkey : c'est le nouveau moteur de Mozilla, intégré dans Firefox 3.6 et qui sera encore amélioré en 3.7. C'est pas mal non plus…
* JägerMonkey : c'est le prochain moteur de Mozilla, qui sera disponible avec Firefox 4. On en a pas d'aperçu pour le moment, mais étant basé sur le code de WebKit, il est fort possible qu'il soit bien plus performant que les deux autres singes de la Fondation.
* V8 : c'est le moteur de Chrome de Google et c'est un bête de course car le code est compilé en langage machine avant d'être exécuté.
* WebKit JS : c'est le moteur associé à WebKit. Il est très performant mais toutefois moins que V8.

Si Trident est à la rue comme d'habitude, en testant les différents moteurs sur différents systèmes et navigateurs, on constate que quoiqu'il arrive V8 est en tête, suivi de près par WebKit. Les singes sont un peu plus en retrait avec un net et logique avantage de Trace sur Spider. [Pour ceux qui veulent du factuel.](http://frederic.bezies.free.fr/blog/?p=3149)

La méthode employée par V8 explique facilement ces résultats : une fois que le code est compilé en langage machine, il est maintenu en mémoire et son exécution est extrêmement rapide. Par contre, cela devrait logiquement le rendre moins portable…

## Du coup, conclusion

Voilà, j'espère que ce petit article t'aura permis de te faire une idée sur le fonctionnement interne d'un navigateur et peut-être que cela orientera ton choix. Pour le moment, à titre personnel, je reste sur FireFox pour des questions d'ergonomie et de traçage d'activité (mais j'y reviendrai probablement bientôt). Le navigateur idéal n'existe pas, mais on pourrait déjà l'imaginer :
* aussi extensible et ergonomique que FireFox ;
* avec le moteur de rendu WebKit ;
* avec le moteur JS V8 ;
* Et libre bien entendu…
