<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Artisan Numérique</title>
  <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1596"/>
  <link rel="self" type="application/atom+xml" href="http://artisan.karma-lab.net/node/1596/atom/feed"/>
  <id>http://artisan.karma-lab.net/node/1596/atom/feed</id>
  <updated>2008-07-21T15:45:28+02:00</updated>
  <entry>
    <title>Tenter d&#039;améliorer les performances de FireFox</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1596" />
    <id>http://artisan.karma-lab.net/node/1596</id>
    <published>2008-07-21T14:34:50+02:00</published>
    <updated>2008-07-21T15:45:28+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="FireFox" />
    <category term="OK" />
    <category term="Planet Libre" />
    <category term="Article" />
    <summary type="html"><![CDATA[<p>
  Les performances c'est compliqué. La preuve, tout le monde s'égosille depuis quelques temps sur FireFox3PlusRapideDeLaTerre, alors que chez moi, il rame au défilement comme une vieille brouettes dés qu'il y a plus de 10 contrôles (édition d'un Post Drupal) ou une image de fond statique sur une page.  
</p>
<p>
  Pareillement, j'ai longtemps cherché à améliorer la vitesse de FireFox v2 pour retrouver un peu de la vélocité de Konqueror, avec plus où moins de succès. Ce billet n'est donc pas un appeau à Trolls, juste le fruit de mes petites recherches pour botter un peu les fesses du gros panda <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/>
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
  Les performances c'est compliqué. La preuve, tout le monde s'égosille depuis quelques temps sur FireFox3PlusRapideDeLaTerre, alors que chez moi, il rame au défilement comme une vieille brouettes dés qu'il y a plus de 10 contrôles (édition d'un Post Drupal) ou une image de fond statique sur une page.  
</p>
<p>
  Pareillement, j'ai longtemps cherché à améliorer la vitesse de FireFox v2 pour retrouver un peu de la vélocité de Konqueror, avec plus où moins de succès. Ce billet n'est donc pas un appeau à Trolls, juste le fruit de mes petites recherches pour botter un peu les fesses du gros panda <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/>
</p>
<!--break-->
<H2>Modifier les paramètres cachés de FireFox</H2>
<p>
	Cela va nous servir par la suite donc autant en parler tout de suite. Les options que nous allons activer sont disponible dans les paramètres internes de firefox, pas dans ses préférences. Pour y accéder il suffit de taper l'URL <kbd>about:config</kbd>. S'affiche alors une liste de noms/valeurs. En double cliquant sur une ligne, nous pouvons modifier cette valeur. En clickant droit, il est possible de la supprimer ou d'en créer une nouvelle. 
</p>
<p>
	Pour les nouvelle valeur crées, il faut choisir son type : chaîne (string), valeur booléenne (boolean) et valeur entière (integer). Ensuite il faut donne son nom, puis sa valeur. 
</p>
<P>
	Voilà, avec cela nous allons pouvoir jouer un peu <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/>
</p>

<H2>Performances réseau</H2>
<p>
  Avouons que la vitesse de transfert est peu la base des performances d'un navigateur, avec celle du moteur de rendu. FireFox n'est pas pire qu'un autre navigateur de ce point de vue. Cependant, comme souvent, ses concepteurs ont des "stratégies" qui ne sont pas forcement heureuses.
</p>

<h3>Activation du pipelining</h3>
<p>
  C'est une chose étrange que le pipelining (téléchargement en parallèle des éléments) soit désactivé par défaut sur FireFox. Pour l'activer, il suffit simplement de modifier trois valeurs. Les deux premières active le pipeline en mode normal et avec les proxies. La dernière indique le nombre maximum de requête à traiter en parallèle. 
	
  <div class='code-block code-block-fragment'>
  <div class='container'>
  network.http.pipelining<span class="sy0">=</span><span class="re2">true</span><br />
network.http.proxy.pipelining<span class="sy0">=</span><span class="re2">true</span><br />
network.http.pipelining.maxrequests<span class="sy0">=</span><span class="re2"><span class="nu0">30</span></span>
  </div>
  
  </div>
</p>

<p>
  La dernière valeur peut être modulée selon vos goûts mais un nombre trop important ne servirait à rien. A noter que selon mes tests, ce totoche de FireFox v2 refuse de charger les feuilles CSS et JS en parallèle, ce qui est proche de l'aberrant...
</p>

<h3>Supprimer la résolution IPV6</h3>
<p>
  Une autre modification qui peut améliorer les performances est donc de désactiver la résolution DNS pour l'IPV6 (sauf si vous avez un tel réseau <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/>. Le but est d'éviter que FireFox ne s'amuse à résoudre un nom en IPV6 lorsque cela n'a aucune raison d'être :
	
  <div class='code-block code-block-fragment'>
  <div class='container'>
  network.dns.disableIPv6 <span class="sy0">=</span><span class="re2"> true</span>
  </div>
  
  </div>
</p>

<h3>Pour aller plus loin...</h3>
<p>
	Enfin, comme l'indiquait FreeFlyer, un très bon plugin permet de paramétrer une partie de ces valeurs. Il s'agit de <a class='external' target='_blank' href='http://fasterfox.mozdev.org/' >FasterFox</a>. Ce plugin est très dense, il permet de régler le pipelining comme indiqué plus haut, mais permet aussi d'ajouter le téléchargement silencieux des liens d'une page, et pas mal d'autres goodies. A tester donc. 
</p>


<H2>Performances visuelles</H2>

<h3>XUL</h3>
<p>
  Là il s'agit de la lenteur de l'interface même de FireFox, pas du rendu des pages. C'est la latence que l'on constate par exemple pour afficher la page de préférences. 
</p>
<p>
Techniquement, l'interface graphique de FireFox est décrite par des fichiers 
  <a target='_blank' href='http://fr.wikipedia.org/wiki/XML'>
  XML
  </a> (barres d'outils, menus, etc...) formant une sorte de langage de description d'interfaces, le XUL. Ces fichiers XML sont "animés" par des... scripts en javascript. En somme, FireFox est une fenêtre vide et tout ce qu'il y a à l'intérieur de cette fenêtre est du XUL. Pour s'en convaincre, collez <kbd>chrome://browser/content/browser.xul</kbd> dans la zone d'adresse de FireFox et validez.
</p>
<p>
  L'interface graphique de FireFox est donc totalement interprétée et sa vitesse est par conséquence limitée par l'utilisation de javascript qui est clairement plus lent qu'un équivalent compilé en C. Une bonne manière de s'en convaincre est de lancer 
  <a target='_blank' href='http://fr.wikipedia.org/wiki/epiphany'>
  epiphany
  </a> qui pour un temps encore utilise le même moteur de rendu que Firefox : 
  <a target='_blank' href='http://fr.wikipedia.org/wiki/Gecko'>
  Gecko
  </a>. Mais dans le cas d'Epiphany, toute l'interface est codée en C, c'est beaucoup plus réactif, beaucoup moins gourmand en mémoire, mais aussi clairement moins puissant. 
</p>
<p>
   La aussi, pour ce prouver que ce n'est pas un délire subjectif, il suffit d'utiliser <kbd>oprofiler</kbd> pour auditer l'utilisation du processeur lorsque l'on affiche des boites de dialogues, des menus, le résultat est le suivante :
	
  <div class='code-block code-block-fragment'>
  <div class='container'>
  12475 18.4517% libmozjs.so
  </div>
  
  </div> 
<p>
<p>
  Le problème est qu'il n'y a pas grand moyen d'améliorer les choses sur cet aspect. Passons donc à la suite. 
</p>

<h3>X11</h3>
<p>
  Alors je sens que je vais faire débouller des armées de trolls colériques en disant cela, mais X11, c'est pas un scoop, c'est lent. Et c'est logique, car au même titre que le couple XUL/JS apporte une richesse payée par une certain lenteur, X11 et la transparence réseau permettent des montages impossibles ailleurs (genre des écrans déportés sur des machines distribuées), mais induisant des temps d'affichages supérieurs à d'autres environnement. Allez disons le, c'est plus lent que Windows. 
</p>
<p>
  Et pour s'en convaincre une fois de plus, ce n'est pas sorcier. Installez une VM avec Windows et les pilotes optimisés VMWare, installez y la même version de FireFox que sous Linux, et comparez les deux vitesses d'affichage d'une page. C'est le jour et la nuit et pourtant Windows est dans une VM...
</p>
<p>
 Alors peut-être n'est-ce pas lié qu'à X11, mais aussi à ce que la version Windows de FireFox a été un peu plus bossée, mais le résultat est là. Et là aussi, mis à part éviter de ralentir X11 en préférant les pilotes propriétaires (nVidia notamment), il n'y a pas de recettes miracles pour booster tout cela. 
</p>
<p>
  A noter que l'utilisation de <a class='external' target='_blank' href='/node/1209' >xrestop</a> nous montre que FireFox est un mangeur de ressources de tout premier ordre. Ce qui ne doit pas être sans conséquences sur les performances sous X11. 
</p>


<h3>Diminuer le temps d'attente avant rendu visuel d'une page</h3>
<p>
  Finalement, le seul point sur lequel nous pouvons jouer est l'aspect "psychologique" de la vitesse. Si une page met 10 secondes à se charger, le navigateur semblera plus "lent" s'il attends d'avoir toutes les informations pour l'afficher. Nous allons donc indiquer à firefox de lancer le rendu de la page le plus tôt possible. Cela est possible en créant une nouvelle "valeur entière" dans la paramétrage interne de FireFox (voir plus haut) et en fixant à 0ms le temps d'attente avant rendu visuel de la page. 
	
  <div class='code-block code-block-fragment'>
  <div class='container'>
  nglayout.initialpaint.delay<span class="sy0">=</span><span class="re2"><span class="nu0">0</span></span>
  </div>
  
  </div>
</p>


	<a name='chapter_4'></a>
  <h2>Conclusion</h2>
	
<p>
  On ne peut pas dire qu'avec tout cela j'atteigne la vitesse de konqueror mais c'est mieux... On va se consoler avec cela <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/>  
</p>    ]]></content>
  </entry>
</feed>
