<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Performance web &#187; idées</title>
	<atom:link href="http://performance.survol.fr/avec/idees/feed/" rel="self" type="application/rss+xml" />
	<link>http://performance.survol.fr</link>
	<description>Quelques mots pour des sites web rapides</description>
	<lastBuildDate>Fri, 18 Jun 2010 12:47:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Performance ressentie avec Mozilla</title>
		<link>http://performance.survol.fr/2009/08/performance-ressentie-avec-mozilla/</link>
		<comments>http://performance.survol.fr/2009/08/performance-ressentie-avec-mozilla/#comments</comments>
		<pubDate>Wed, 12 Aug 2009 10:00:39 +0000</pubDate>
		<dc:creator>Éric</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[idées]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[navigateur]]></category>
		<category><![CDATA[perception]]></category>
		<category><![CDATA[ressenti]]></category>

		<guid isPermaLink="false">http://performance.survol.fr/?p=741</guid>
		<description><![CDATA[Ici je m&#8217;attache beaucoup aux chiffres : temps de chargement complet, latence, nombre de composants, etc. J&#8217;ai besoin de convaincre et seuls les chiffres ont l&#8217;objectivité nécessaire pour pouvoir travailler avec des gens non convaincus. Toutefois, une fois dépassé ce &#8230; <a href="http://performance.survol.fr/2009/08/performance-ressentie-avec-mozilla/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ici je m&#8217;attache beaucoup aux chiffres : temps de chargement complet, latence, nombre de composants, etc. J&#8217;ai besoin de convaincre et seuls les chiffres ont l&#8217;objectivité nécessaire pour pouvoir travailler avec des gens non convaincus.</p>
<p>Toutefois, une fois dépassé ce stade il faudrait se détacher un peu des chiffres pour parler de performance ressentie et pas toujours de performance mesurée. Parfois peu importe la durée de l&#8217;attente si on voit que nous progressons régulièrement et que l&#8217;attente n&#8217;est pas frustrante en elle même. C&#8217;est vrai aux caisses d&#8217;un supermarché comme sur une page web.</p>
<p>Les éditeurs de navigateurs l&#8217;ont bien compris. Ils jouent sur les indicateurs de chargement et sur l&#8217;interface pour donner une impression de vitesse à l&#8217;utilisateur. L&#8217;impression de vitesse est l&#8217;unique chose qui compte pour ce dernier, même si au final ça veut dire que les temps mesurés sont objectivement plus lents.</p>
<p>C&#8217;est avec cette idée en tête que je vous propose de lire le document de <a href="https://wiki.mozilla.org/Perceived_Performance">Mozilla à propos de la performance perçue</a>. On y retrouve certaines techniques à mettre en oeuvre sur les versions actuelles ou futures de Firefox. Le document mériterait une traduction tellement il fourmille d&#8217;idées, dont certaines sont lumineuses.  Je vous en retransmet certaines, avec mes commentaires.<span id="more-741"></span></p>
<h3>Dans les &laquo;&nbsp;on reste très classique&nbsp;&raquo;</h3>
<p>Préchargement de Firefox au démarage de windows : On va _encore_ ralentir l&#8217;ouverture de session pour pouvoir avoir une ouverture quasi instantanée de Firefox lors du clic sur l&#8217;icone. Le résultat sur le ressenti de performance est évident mais je suis assez mitigé. J&#8217;en ai ma claque des sessions qui prennent 5 minutes à s&#8217;ouvrir à cause de tout ce qui est chargé dans le systray. Là on déshabille Paul pour habiller Pierre et on donne l&#8217;impression à l&#8217;utilisateur que c&#8217;est la faute de Paul. Je comprend l&#8217;effet mais je n&#8217;aime pas le principe.</p>
<p>Garder le logiciel ouvert un bref moment après sa fermeture, au cas où l&#8217;utilisateur le réouvre juste après : Ca me fait penser à la fermeture de session de mon poste Linux. Il prend en compte mais n&#8217;éteint le poste que 60 secondes après la demande (sauf si je confirme ma demande), me laissant la possibilité de changer d&#8217;avis. J&#8217;aime bien le principe mais normalement l&#8217;OS fait une partie du travail en mettant en cache toutes les bibliothèques logicielles. Normalement un second démarage est déjà plus rapide. Si ce n&#8217;est pas le cas je préfèrerai qu&#8217;ils trouvent pourquoi plutôt que de chercher des astuces (oui, je sais, c&#8217;est facile à dire).</p>
<p>Installer un intersticiel (splash screen) : C&#8217;est assez dangereux. D&#8217;un côté on donne immédiatement un feedback à l&#8217;utilisateur, ce qui est très bien pour donner une impression de réactivité et éviter qu&#8217;il lance deux fois le navigateur en pensant que ça n&#8217;a pas fonctionner (je compatis, ça m&#8217;arrive régulièrement), de l&#8217;autre on va renforcer l&#8217;idée de l&#8217;utilisateur qu&#8217;il s&#8217;agit d&#8217;un logiciel long à charger alors que d&#8217;autres sont instantanés sans intersticiel.</p>
<h3>Dans les &laquo;&nbsp;c&#8217;est astucieux&nbsp;&raquo;</h3>
<p>Accélérer l&#8217;indicateur de chargement : Ils disent qu&#8217;ils le font à chaque version. Un indicateur qui tourne plus rapidement c&#8217;est pour l&#8217;utilisateur un logiciel qui fonctionne plus rapidement. C&#8217;est idiot mais on a tous le même ressenti inconscient. Par contre on va vite arriver à une limite pour ce genre d&#8217;astuces.</p>
<p>Avoir une progression non linéaire pour l&#8217;indicateur de progression : Faire qu&#8217;il avance plus lentement au début (quand l&#8217;utilisateur accepte l&#8217;attente) et plus rapidement vers la fin (quand il en a marre et a besoin de voir que &laquo;&nbsp;ça avance bien&nbsp;&raquo;). Dans le même ordre d&#8217;idée la suggestion précédente propose de faire accélérer l&#8217;indicateur de chargement (celui qui tourne) avec le temps.</p>
<h3>Dans la catégorie &laquo;&nbsp;ça c&#8217;est génial&nbsp;&raquo;</h3>
<p>Utiliser les composants en cache en attendant de vérifier qu&#8217;ils sont toujours frais : J&#8217;adore l&#8217;idée. Il s&#8217;agit d&#8217;utiliser les feuilles de styles, les images en cache en parallèle aux requêtes HTTP de revalidation. S&#8217;il s&#8217;avère que le contenu a changé, alors on mettra la page à jour. On tient là une réelle avancée. Il faudrait peut être toutefois montrer à l&#8217;utilisateur que l&#8217;image en question est potentiellement temporaire (par exemple la griser légèrement, ou monter le gamma : l&#8217;image reste visible mais on voit qu&#8217;elle est &laquo;&nbsp;en cours&nbsp;&raquo;).</p>
<p>Dans le même ordre d&#8217;idée on propose, à défaut de réutiliser les images elles-mêmes, de réserver la place dans le rendu en fonction de la taille de l&#8217;image qui est en cache. On évite de trop triturer la page, ce qui est une bonne chose, mais là je suis moins enthousiaste. Sur une page ou une connexion lente, ça peut inciter à réserver des places vides pendant longtemps, et déteriorer le ressenti utilisateur au lieu de l&#8217;améliorer. Je préfère nettement l&#8217;idée d&#8217;utiliser l&#8217;image elle-même, car l&#8217;utilisateur a au moins un contenu utile.</p>
<p>Mieux, on propose même de lancer immédiatement des requêtes vers les scripts et feuilles de styles référencées dans la page en cache en attendant de recevoir la nouvelle page. C&#8217;est quelque chose qui peut réduire le chargement de la page de plusieurs centaines de milli-secondes, plus sur les pages HTML vraiment lentes. Je ne sais cependant pas si le rapport bénéfice sur complexité est assez intéressant pour que ce soit implémenté. Il faudrait en effet que ces requêtes aient une basse priorité par rapport aux autres requêtes (histoire qu&#8217;on ne précharge pas en priorité des choses qui sont potentiellement inutiles) et que ces requêtes soient annulées dès qu&#8217;on sait que la page HTML a changée.</p>
<p>Plus intéressant encore : charger la page à partir du cache en attendant que la nouvelle page soit chargée. L&#8217;idée est intéressante mais la réalisation risque d&#8217;être difficile. La page en cache fait probablement référence à des composants qui eux ne sont pas en cache (les pubs) ou peut faire des requêtes Ajax. Est-ce pertinent d&#8217;occuper le réseau avec cette ancienne page ? Pire, on va aussi occuper le cpu puisque beaucoup de sites ont des pages qui mettent un temps significatif à effectuer le rendu même quand tout est en cache. On risque de ralentir inutilement la machine.</p>
<p>Pourquoi dis-je que c&#8217;est encore plus intéressant alors que je détruis l&#8217;idée ? parce que j&#8217;avais ça sur Safari (si je choisis une des pages proposées au démarage c&#8217;est d&#8217;abord une image de la page en cache qui se charge le temps que la page réelle arrive) et j&#8217;ai ça depuis peu sur gmail (le temps que gmail se charge j&#8217;ai une version HTML non clicable des titres des quelques derniers mails de ma boite). Ca a l&#8217;air inutile mais ça améliore vraiment l&#8217;expérience. On peut se concentrer immédiatement sur la tâche prévue au lieu d&#8217;attendre que la page se charge. La performance ressentie c&#8217;est finalement surtout ça.</p>
<h3>Alors ?</h3>
<p>Je laisse les histoire d&#8217;indicateurs plus ou moins rapides à d&#8217;autres mais je verrai bien les effets suivants (cumulatifs) :</p>
<ul>
<li> S&#8217;il s&#8217;agit d&#8217;une page fréquemment visitée (en bookmark ?) charger une image de la page telle qu&#8217;elle était la dernière fois en attendant que la page se charge effectivement. Point bonus si les liens restent clicables (mais je n&#8217;ai pas besoin des autres interactions avec la page comme le javascript).</li>
<li>Quand la page arrive, on utilise par défaut immédiatement les précédentes versions des images et feuilles de style en attendant les nouvelles. Les images sont toutefois grisées/blanchies pour bien symboliser l&#8217;état &laquo;&nbsp;en chargement&nbsp;&raquo;.</li>
</ul>
<p>Notez que cela demande d&#8217;augmenter l&#8217;espace dédié au cache, et pour les pages ciblées de mettre en cache même ce qu&#8217;habituellement on n&#8217;y met pas (quitte à identifier que c&#8217;est un cache déjà expiré).</p>
]]></content:encoded>
			<wfw:commentRss>http://performance.survol.fr/2009/08/performance-ressentie-avec-mozilla/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
	</channel>
</rss>
