<?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; Stoyan Stefanov</title>
	<atom:link href="http://performance.survol.fr/avec/stoyan-stefanov/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>Aperçu de Yslow 2.0</title>
		<link>http://performance.survol.fr/2009/01/apercu-de-yslow-20/</link>
		<comments>http://performance.survol.fr/2009/01/apercu-de-yslow-20/#comments</comments>
		<pubDate>Mon, 12 Jan 2009 11:00:15 +0000</pubDate>
		<dc:creator>Éric</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[etag]]></category>
		<category><![CDATA[eval]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[outils]]></category>
		<category><![CDATA[Stoyan Stefanov]]></category>
		<category><![CDATA[yahoo!]]></category>
		<category><![CDATA[Yahoo! Exceptional Performance]]></category>
		<category><![CDATA[yslow]]></category>

		<guid isPermaLink="false">http://performance.survol.fr/?p=368</guid>
		<description><![CDATA[J&#8217;avais déjà présenté Yslow, et de toutes façons tous ceux qui lisent ce blog doivent maintenant connaître cet outil indispensable. Stoyan Stefanov, de l&#8217;équipe performande de Yahoo!, a fait en chine la première présentation sur ce qui arrive avec la &#8230; <a href="http://performance.survol.fr/2009/01/apercu-de-yslow-20/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>J&#8217;avais déjà <a href="http://performance.survol.fr/2008/07/les-outils-yslow/">présenté Yslow</a>, et de toutes façons tous ceux qui lisent ce blog doivent maintenant connaître cet outil indispensable. <a href="http://performance.survol.fr/avec/stoyan-stefanov/">Stoyan Stefanov</a>, de l&#8217;équipe performande de Yahoo!, a fait en chine la <a href="http://www.slideshare.net/stoyan/yslow-20-presentation/">première présentation sur ce qui arrive avec la version 2.0 de Yslow</a>. Pour tout vous dire j&#8217;avais le secret espoir que l&#8217;annonce de Yslow 2.0 soit faite à <a href="http://performance.survol.fr/2008/09/paris-web-2008/">Paris Web 2008</a> lors de l&#8217;intervention que j&#8217;ai partagée avec <a href="http://performance.survol.fr/avec/nicole-sullivan/">Nicole Sullivan</a>, mais la finalisation a visiblement demandé du temps.<span id="more-368"></span></p>
<h3>Une mise à jour attendue &#8230;</h3>
<p>J&#8217;avais, comme tout le monde, deux principaux reproches à faire sur l&#8217;outil. Tout d&#8217;abord il ne vérifie qu&#8217;une liste très spécifiques de critères. Ce sont une partie des 14 premiers <a href="http://developer.yahoo.com/performance/rules.html">critères retenus par l&#8217;équipe performance de Yahoo!</a> mais depuis d&#8217;autres recommandations ont pu être dégagée. Il était nécessaire que l&#8217;outil s&#8217;étoffe.</p>
<p>C&#8217;est donc 10 règles supplémentaires qui sont intégrées dans l&#8217;outil, pour un total de 23. Mais là où Yslow aurait pu avoir une simple mise à jour, l&#8217;équipe Yahoo! a permis l&#8217;arrivée d&#8217;un modèle communautaire, où chacun peut ajouter facilement ses propres critères. C&#8217;est l&#8217;histoire de quelques lignes de javascript dans une extension Firefox.</p>
<p>Le second point contestable était le système de notation. Toutes les règles ne sont pas adaptables à tout le monde, avec la même importance. Le premier exemple c&#8217;est <a href="http://performance.survol.fr/2008/06/desactiver-les-etags/">la question des ETags</a> qui pénalise des notations pour rien, soit parce que l&#8217;ETag n&#8217;est pas généré avec le système par défaut d&#8217;Apache, soit parce qu&#8217;il n&#8217;y a qu&#8217;un seul serveur web derrière le site. Chacun a ses spécificités et je retiens encore l&#8217;exemple qu&#8217;on m&#8217;a donné des sites chinois qui ont tendance à avoir des pages web longues de plusieurs dizaines d&#8217;écran parce les usages locaux font qu&#8217;on télécharge la page pour une lecture hors ligne, et qu&#8217;on espère donc en avoir le plus possible dedans quitte à attendre longtemps.</p>
<p>Bref, là aussi Yslow est personnalisable et il sera possible de définir vos propres algorithmes de notation, voire de choisir le type de notation souhaité parmi une liste. À vous de définir vos limites, vos paliers, vos pénalités et les règles qui sont pertinentes à votre site &#8230; ou plutôt à choisir un algorithme créé par quelqu&#8217;un d&#8217;autre et adapté à votre cas. L&#8217;idée est de non seulement pouvoir modifier ces préférences via une interface mais aussi de pouvoir les exporter automatiquement pour les diffuser à d&#8217;autres.</p>
<h3>&#8230; et efficace &#8230;</h3>
<p>Bref, c&#8217;est une très bonne nouvelle, qui va permettre de voir fleurir des personnalisations de Yslow propre à certains types de sites, aux recommandations internes de votre société, ou simplement adaptées à votre échelle. Je m&#8217;abstiens de recopier les images ou le code, vous trouverez tout ça dans <a href="http://www.slideshare.net/stoyan/yslow-20-presentation/">la présentation de Stoyan</a>.</p>
<p>Mais on trouve encore d&#8217;autres petits outils. Parmi eux des menus pour réindenter le code javascript et faire un passage par <a href="http://www.jslint.com/">JSLint</a>. Là encore, quelques lignes de javascript sont prévues pour rajouter vos propres outils.</p>
<p>Mieux, et ça c&#8217;est excellent, il est prévu de sauvegarder votre session de résultat pour une étude plus tard et d&#8217;importer de sessions crées par <a href="http://www.fiddlertool.com/fiddler/">Fiddler</a> ou <a href="http://www.httpwatch.com/">HttpWatch</a>.</p>
<h3>&#8230; mais imparfaite</h3>
<p>Mais tout n&#8217;est pas parfait. Dans les recommandations on trouve la <a href="http://developer.yahoo.com/performance/rules.html#cacheajax">#14 (Make Ajax cacheable)</a>. Difficile à dire pour un outil automatisé s&#8217;il est normal que tel ou tel appel Ajax soit en cache ou dynamique. Je suis dubitatif sur l&#8217;idée d&#8217;avoir automatisé cette règle là. Même chose pour la <a href="http://developer.yahoo.com/performance/rules.html#under25">#33 (Components under 25k)</a>. <a href="http://performance.survol.fr/2008/05/limitations-du-cache-webkit/">La limite de 25k</a> est celle de l&#8217;Iphone, mais on a vu que <a href="http://performance.survol.fr/2008/12/encore-sur-le-cache-de-liphone/">les nouveaux firmware Iphone et Ipod Touch permettent de dépasser allègrement cette limite</a>. Bref, on l&#8217;ajoute dans Yslow quand il serait presque venu le temps de la retirer de la liste globale des recommandations.</p>
<p>Il y en a d&#8217;autres que j&#8217;aurai aimé voir, mais qui doivent être bien plus complexes à automatiser. Par exemple :</p>
<ul>
<li>trop de présentation en HTML au lieu de CSS</li>
<li>code javascript lent</li>
<li>présence de eval() en javascript</li>
<li><a href="http://performance.survol.fr/avec/selecteur/">sélecteurs CSS vraiment mal fait</a></li>
<li><a href="http://performance.survol.fr/2008/10/eviter-les-evenements-trop-frequents/">événements DOM mutualisables avec de la délégation</a></li>
<li>processeur excessivement utilisé lors du rendu</li>
<li><a href="http://performance.survol.fr/2008/09/mode-de-rendu-des-tableaux/">tableaux html dynamique trop gros ou imbriqués</a></li>
</ul>
<p>Ah et &#8230; pas de date de sortie ni de version béta publique, pour l&#8217;instant. Reste que ces nouvelles sont bonnes.</p>
]]></content:encoded>
			<wfw:commentRss>http://performance.survol.fr/2009/01/apercu-de-yslow-20/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Vérifiez vos images</title>
		<link>http://performance.survol.fr/2008/10/verifiez-vos-images/</link>
		<comments>http://performance.survol.fr/2008/10/verifiez-vos-images/#comments</comments>
		<pubDate>Mon, 06 Oct 2008 10:00:29 +0000</pubDate>
		<dc:creator>Éric</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[compression]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[Nicole Sullivan]]></category>
		<category><![CDATA[outils]]></category>
		<category><![CDATA[smushit]]></category>
		<category><![CDATA[sprite]]></category>
		<category><![CDATA[Stoyan Stefanov]]></category>

		<guid isPermaLink="false">http://performance.survol.fr/?p=233</guid>
		<description><![CDATA[Il y a encore peu de temps pour vérifier les images d&#8217;un site je prenais Firebug, je téléchargeais toutes les images une à une, puis je tentais de retirer les méta données avec PNGcrush ou un équivalent (en fait plusieurs &#8230; <a href="http://performance.survol.fr/2008/10/verifiez-vos-images/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Il y a encore peu de temps pour vérifier les images d&#8217;un site je prenais Firebug, je téléchargeais toutes les images une à une, puis je tentais de <a href="http://performance.survol.fr/2008/06/images-png-et-gif/">retirer les méta données avec PNGcrush</a> ou un équivalent (en fait plusieurs parce que les images donnent parfois de meilleurs résultats sur un outil parfois sur un autre). Sur celles qui apparaissent avec un mauvais format ou qui semblent toujours trop grosses, je sors mon photoshop pour changer ça, par exemple pour <a href="http://performance.survol.fr/2008/07/degradez-les-png-faites-des-compromis/">diminuer le nombre de couleurs</a>.</p>
<p>Heureusement tout ça est fini. C&#8217;est toujours quand on rêve de faire un outil que quelqu&#8217;un sort ça le lendemain, donc voilà, ce coup ci ce sont <a href="http://phpied.com/">Stoyan Stefanov</a> et <a href="http://stubbornella.org/content/">Nicole Sullivan</a> qui ont commis <a href="http://smushit.com/">smushit</a>.<span id="more-233"></span></p>
<h3>Un outil en ligne</h3>
<p>Smushit c&#8217;est un site sur lequel vous envoyez votre image. Il vous retourne immédiatement une image optimisée en vous indiquant le gain en poids sur le fichier. Parce qu&#8217;un outil automatique ne pourra jamais faire des choix de qualité, la recompression est sans perte, les images seront les mêmes au pixel près.</p>
<p>Mais le côté vraiment nouveau c&#8217;est une extension Firefox qui sur votre demande va lister toutes les images utilisées par la page courante et les envoyer à smushit. Là vous avez une grille de résultat avec chaque image, le poids final de l&#8217;image, combien vous avez gagné, et un gros zip contenant les images optimisées.</p>
<p>Magique. En trois minutes, installation de l&#8217;extension comprise, vous avez un audit complet de vos images, et le travail est déjà fait pour améliorer la situation. En cinq minutes de plus vous remplacez les anciennes images par les nouvelles et vous avez fait un travail exceptionnel.</p>
<h3>Des résultats ahurissants</h3>
<p>Pour rappel le poids de la page HTML et des feuilles de style ou javascript est souvent négligeable ou équivalent au poids total des images. Améliorer la situation même d&#8217;un peu sur les images, c&#8217;est améliorer la situation globale pour l&#8217;utilisateur.</p>
<p>Alors j&#8217;ai mené deux tests pour vous, Pages jaunes et Orange. Sur les deux on peut gagner environ 25% sur le poids total des images. C&#8217;est respectivement 30ko et 57ko qu&#8217;on gagne. En jouant avec la qualité et le nombre de couleurs on peut certainement aller bien plus loin. Dans le second on reste avec des images de plus de 20ko donc on doit pouvoir monter facilement à 75ko ou même 100ko au total si on joue sur des baisses de qualité non perceptibles à l&#8217;oeil nu ou qu&#8217;on fait quelques <a href="http://performance.survol.fr/2008/06/des-sprites-jusqua-plus-soif/">sprites</a>.</p>
<p>Je ne sais pas si vous vous représentez bien ce que ça fait mais dans les deux cas le gain représente plus de 10% du poids total de la page, css html et javascript compris. Dites à votre responsable que vos pages sont 10% moins lourdes sans différence de qualité pour 2 heures de travail (pause café comprise), il va vous sauter dans les bras. C&#8217;est justement ce que smushit vous propose de faire.</p>
]]></content:encoded>
			<wfw:commentRss>http://performance.survol.fr/2008/10/verifiez-vos-images/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Javascript non bloquant</title>
		<link>http://performance.survol.fr/2008/08/javascript-non-bloquant/</link>
		<comments>http://performance.survol.fr/2008/08/javascript-non-bloquant/#comments</comments>
		<pubDate>Mon, 04 Aug 2008 10:00:45 +0000</pubDate>
		<dc:creator>Éric</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[IE8 What's Coming]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[parallélisation]]></category>
		<category><![CDATA[Steve Souders]]></category>
		<category><![CDATA[Stoyan Stefanov]]></category>
		<category><![CDATA[téléchargement]]></category>
		<category><![CDATA[velocity]]></category>

		<guid isPermaLink="false">http://performance.survol.fr/?p=63</guid>
		<description><![CDATA[Je vous l&#8217;avais dit, une balise &#60;script&#62; bloque le rendu et les nouveaux téléchargements dans le navigateur le temps que le javascript soit complètement téléchargé et exécuté. Une des solutions c&#8217;est de reléguer cette balise à la fin du document. &#8230; <a href="http://performance.survol.fr/2008/08/javascript-non-bloquant/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Je vous l&#8217;avais dit, <a href="http://performance.survol.fr/2008/04/javascript-a-sa-place/">une balise <code>&lt;script&gt;</code> bloque le rendu et les nouveaux téléchargements</a> dans le navigateur le temps que le javascript soit complètement téléchargé et exécuté. Une des solutions c&#8217;est de reléguer cette balise à la fin du document.</p>
<p>Il y a des fois où ce n&#8217;est pas idéal et c&#8217;est Steve Souders qui étudie les solutions dans <a href="http://en.oreilly.com/velocity2008/public/schedule/detail/3621">sa présentation aux conférences Velocity 2008</a>. <span id="more-63"></span>Quelques cas en vrac :</p>
<ul>
<li>Le Javascript est prioritaire, il doit être téléchargé et exécuté le plus tôt possible, mais pas au prix d&#8217;un blocage de tout le reste ;</li>
<li>Il n&#8217;est pas possible déplacer l&#8217;insertion de la balise à la fin du document, le système ne le permettant pas ;</li>
<li>Vous ne voulez pas montrer à l&#8217;utilisateur que la page est toujours en train de se charger (logo et barre de statut) ;</li>
<li>Vous ne voulez pas que l&#8217;événement onload de la page attende le téléchargement et l&#8217;exécution du javascript.</li>
</ul>
<h3>Ne pas bloquer le rendu</h3>
<p>Pour résumer les solutions intéressantes abordées par Steve Souders :</p>
<h5>Passer par l&#8217;<acronym title="interface de programmation">API</acronym> <acronym title="document object model">DOM</acronym></h5>
<p>La première solution est d&#8217;insérer le javascript via la création d&#8217;un noeud DOM. Le script ne bloque alors plus les nouveaux téléchargements. Le problème principal est que certains navigateur délaient l&#8217;événement onload tandis que d&#8217;autres l&#8217;exécuteront avant la fin du script. Cette différence peut rendre la gestion de la page un peu difficile</p>
<pre>var se = document.createElement('script');
se.src = 'http://example.org/test.js';
se.type = 'text/javascript' ;
document.getElementsByTagName('head')[0].appendChild(se);</pre>
<h5>Passer par une iframe</h5>
<p>La seconde solution est d&#8217;insérer le javascript via une iframe. Le rendu et les nouveaux téléchargements ne sont pas bloqués, l&#8217;événement onload réagit de la même façon sur tous les navigateur. Le défaut est que l&#8217;iframe fait elle-même perdre un peu de temps au rendu et que pour réutiliser le contenu on est limité à avoir la page et le script sur le même domaine. Impossible donc d&#8217;utiliser un CDN sur un domaine tiers.</p>
<p>Cela demande de plus de réorganiser le script lui même. La page principale devra passer par <code>window.frames[x]</code> pour accéder aux fonctions du script, et le script devra lui passer par <code>parent.document</code> pour accéder au DOM de la page principale.</p>
<h5>Passer par XMLHttpRequest</h5>
<p>La solution qui peut paraitre magique c&#8217;est d&#8217;insérer le javascript via une requête XMLHttpRequest. Le script ne bloque ni les nouveaux téléchargements ni l&#8217;événement onload. Mieux le navigateur ne montre pas à l&#8217;utilisateur que la page continue à se charger. Cela peut amener l&#8217;utilisateur à avoir une meilleure impression de vitesse. Par contre on est ici aussi limité à un seul domaine pour la page HTML et le javascript, donc pas de CDN sur domaine tiers.</p>
<p>Je ne vous met pas de code, chacun a sa bibliothèque pour ça. Vous pouvez utiliser DOM ou <code>eval</code>, comme vous voulez.</p>
<h5>Passer par un script <code>DEFER</code></h5>
<p>Enfin, vous avez l&#8217;attribut <code>DEFER</code> que vous pouvez ajouter à une balise de script des plus classiqes. Là non plus le script ne bloque pas les nouveaux téléchargements &#8230; mais uniquement sous Internet Explorer.</p>
<h3>Préserver l&#8217;ordre d&#8217;exécution</h3>
<p>Tout ça donne déjà un bon aperçu mais tout n&#8217;est pas résolu. Dès que vous avez plusieurs javascript vous avez certainement des dépendances et l&#8217;ordre de chargement est important. Là ça se gâte. Vous oubliez la technique de l&#8217;iframe qui ne vous garantit rien.  </p>
<p>Si vous pouvez vous permettre d&#8217;avoir le javascript sur le même domaine que la page HTML, alors il va vous falloir gérer vous même un code dans XMLHttpRequest pour assurer l&#8217;ordre d&#8217;exécution.</p>
<div>Dans le cas contraire, Firefox préservera l&#8217;ordre d&#8217;exécution quand vous insérez vos scripts via DOM. Pas Internet Explorer. Il ne vous reste plus qu&#8217;à faire du cas par cas : charger via DOM pour Firefox, et utiliser une balise de script classique avec un attribut <code>DEFER</code> pour Internet Explorer.</div>
<p>L&#8217;écran 26 de la présentation donne une excellente grille de lecture de tout ça. Et les autres navigateurs ? motus et bouche cousue. Dans l&#8217;ensemble les comportements ont des chances d&#8217;être similaires à ceux de Firefox, mais c&#8217;est à tester. Il y a quelques liens vers <a href="http://performance.survol.fr/2008/04/tester-avec-le-cuzillon/">le Cuzillon</a> donc si certains veulent tester et donner les résultats Safari et Opera&#8230;</p>
<h3>Utiliser YUI</h3>
<p>L&#8217;équipe Yahoo! est toujours sur la brèche côté performance. Vous avez doc <a href="http://developer.yahoo.com/yui/examples/get/get-script-basic.html">un outil YUI pour charger dynamiquement scripts</a> et des feuilles de style en tenant compte des dépendances, sans bloquer le navigateur. Visiblement <a href="http://dannythorpe.com/2008/07/23/cross-browser-dynamic-javascript-loading/">tout n&#8217;est pas clair sur la situation de Safari</a>, il faudrait que je fouille un peu pour tirer ça au clair. D&#8217;ordinaire la politique est d&#8217;avoir un comportement stable sur tous <a href="http://developer.yahoo.com/yui/articles/gbs/">les navigateurs grade A</a>, dont Safari fait partie, donc j&#8217;ai bon espoir que si ce n&#8217;est pas déjà le cas, une solution finisse par être trouvée.</p>
<p>Pour le même prix l&#8217;outil YUI permet aussi de charger aussi les feuilles de style et éviter leur aspect bloquant sur Firefox.</p>
<p>Stoyan Stefanov <a href="http://yuiblog.com/blog/2008/07/22/non-blocking-scripts/">en parle</a> lui aussi, en détail.</p>
<h3>Et l&#8217;avenir ?</h3>
<p>Le bon côté c&#8217;est que les équipes <a href="http://webkit.org/blog/166/optimizing-page-loading-in-web-browser/">Webkit</a> et <a href="http://en.oreilly.com/velocity2008/public/schedule/detail/3290">IE8</a> ont dans leurs cartons la possibilité de charger les scripts sans bloquer le navigateur et en les exécutant dans l&#8217;ordre d&#8217;apparition dans la page.</p>
<p>Tout ceci est pour demain, et les navigateurs d&#8217;aujourd&#8217;hui ne sont pas amenés à disparaitre rapidement, mais au moins, à moyen terme, on pourra n&#8217;avoir de ralentissement que sur les anciens navigateurs. Reste juste à espérer que Firefox et Opera bougent aussi sur ce point, mais malheureusement je n&#8217;ai pas vu d&#8217;information dans ce sens.</p>
]]></content:encoded>
			<wfw:commentRss>http://performance.survol.fr/2008/08/javascript-non-bloquant/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Dégradez les PNG, faites des compromis</title>
		<link>http://performance.survol.fr/2008/07/degradez-les-png-faites-des-compromis/</link>
		<comments>http://performance.survol.fr/2008/07/degradez-les-png-faites-des-compromis/#comments</comments>
		<pubDate>Mon, 28 Jul 2008 10:09:48 +0000</pubDate>
		<dc:creator>Éric</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[Image optimization - 7 mistakes]]></category>
		<category><![CDATA[png]]></category>
		<category><![CDATA[Stoyan Stefanov]]></category>

		<guid isPermaLink="false">http://performance.survol.fr/?p=55</guid>
		<description><![CDATA[  Je continue avec l&#8217;excellente présentation de Stoyan Stefanov et je prend la suite de la discussion en commentaire d&#8217;il y a quinze jours. Passez en 256 couleurs Un PNG24 c&#8217;est 16 millions de couleurs. En pratique les PNG on &#8230; <a href="http://performance.survol.fr/2008/07/degradez-les-png-faites-des-compromis/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p> </p>
<p>Je continue avec <a href="http://performance.survol.fr/2008/07/optimisation-dimages-7-erreurs/">l&#8217;excellente présentation de Stoyan Stefanov</a> et je prend la suite de <a href="http://performance.survol.fr/2008/07/ne-pas-filtrer-les-pngs/#comment-141">la discussion en commentaire d&#8217;il y a quinze jours</a>.</p>
<h3>Passez en 256 couleurs</h3>
<p>Un PNG24 c&#8217;est 16 millions de couleurs. En pratique les PNG on souvent moins de 1000 couleurs. Si vous avez besoin des 16 millions ce que vous avez est probablement une photo, qui devrait être compressée en JPEG. En fait l&#8217;oeil humain n&#8217;est pas si sensible. Passez de 1000 couleurs à 256 couleurs indexées. Si l&#8217;index est bien fait vous ne verrez pas la différence et pour le même prix vous résolvez les problèmes de transparence.<span id="more-55"></span></p>
<h3>Imposez le compromis</h3>
<p>Si j&#8217;en crois les dernières discussions je vais avoir plein de commentaires pour me dire que le graphiste ou le marketing n&#8217;acceptera jamais. Probablement pas, effectivement, du moins pas la première fois. À vous de ne pas accepter non plus. À vous de forcer un compromis avec le graphiste.</p>
<p>C&#8217;est votre expertise, ne la niez pas. Le travail de l&#8217;intégrateur web et sa connaissance du média sont tout aussi importants que ceux du graphiste. La performance n&#8217;est pas plus importante que le reste, mais ce ne doit pas être la dernière roue du carosse de type « faites ce que vous pouvez avec ce qu&#8217;on a fait mais ne nous demandez pas de changer quelque chose ».   </p>
<p>La première fois c&#8217;est difficile, mais le conflit est nécessaire. Une fois que l&#8217;équipe aura compris que vous avez un rôle, une expertise, une valeur ajoutée, les compromis suivants seront plus simple. Parce que finalement, le compromis PNG8 il est assez simple à accepter une fois qu&#8217;on a passé le refus de principe du graphiste et qu&#8217;on s&#8217;y penche sans à priori.</p>
<h3>L&#8217;exception</h3>
<p>Le cas où l&#8217;image doit rester en PNG24 existe, mais je ne suis pas sûr de l&#8217;avoir rencontré jusqu&#8217;à présent. La conversion en JPEG ou PNG8 a toujours été possible. Tout le monde a trop facilement tendance à se croire dans l&#8217;exception qui justifie le PNG24 sur le web, mais commencez par vous dire que ce n&#8217;est pas le cas. D&#8217;ailleurs ça n&#8217;est probablement pas le cas.</p>
<h3>Le web c&#8217;est pour les stagiaires</h3>
<p>Je ne peux m&#8217;empêcher de rappeler un billet rédigé il y a quelques années :<a href="http://www.cybercodeur.net/weblog/articles/art_20040606.php"> Le web c&#8217;est pour les stagiaires</a>. À vous de voir si vous pensez que c&#8217;est vrai, ou pas.</p>
]]></content:encoded>
			<wfw:commentRss>http://performance.survol.fr/2008/07/degradez-les-png-faites-des-compromis/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Pensez aux favicon</title>
		<link>http://performance.survol.fr/2008/07/pensez-aux-favicon/</link>
		<comments>http://performance.survol.fr/2008/07/pensez-aux-favicon/#comments</comments>
		<pubDate>Mon, 21 Jul 2008 10:00:48 +0000</pubDate>
		<dc:creator>Éric</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[404]]></category>
		<category><![CDATA[cdn]]></category>
		<category><![CDATA[favicon]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[png]]></category>
		<category><![CDATA[Stoyan Stefanov]]></category>

		<guid isPermaLink="false">http://performance.survol.fr/?p=54</guid>
		<description><![CDATA[Le favicon je pense que vous voyez ce que c&#8217;est : cette petite icône bête et méchante qu&#8217;on voit à côté de l&#8217;URL dans la barre d&#8217;adresse du navigateur. Là où c&#8217;est moins intuitif c&#8217;est que ce favicon peut avoir &#8230; <a href="http://performance.survol.fr/2008/07/pensez-aux-favicon/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Le favicon je pense que vous voyez ce que c&#8217;est : cette petite icône bête et méchante qu&#8217;on voit à côté de l&#8217;URL dans la barre d&#8217;adresse du navigateur. Là où c&#8217;est moins intuitif c&#8217;est que ce favicon peut avoir un impact important dans les performances de votre site.</p>
<p><span id="more-51"></span>Qu&#8217;est ce qu&#8217;il se passe ? à chaque visite le navigateur va chercher cette icône. Le traffic lié à cette icône peut dépasser 10% du traffic total, principalement sur des sites &laquo;&nbsp;de passage&nbsp;&raquo; (9% sur Yahoo! Search <a href="http://performance.survol.fr/2008/07/optimisation-dimages-7-erreurs/">nous dit Stoyan Stefanov</a>). Une petite optimisation aura alors une grande influence. Alors cherchons les problèmes un à un :</p>
<h3>Premier échec</h3>
<p>Vous n&#8217;avez pas fait de favicon.ico, ou cette icône n&#8217;est pas à l&#8217;emplacement cherché par le navigateur. Ce dernier va donc télécharger&#8230; votre page d&#8217;erreur 404, donc probablement quelques kilo-octets de HTML inutiles. On en revient à <a href="http://performance.survol.fr/2008/04/pages-d-erreur/">ce dont nous avions parlé</a> précédemment : <strong>faites des pages d&#8217;erreurs courtes et légères</strong>. Mais surtout, <strong>prévoyez toujours un fichier /favicon.ico</strong> pour éviter de tomber sur la page d&#8217;erreur 404.</p>
<h3>Second échec</h3>
<p>Vous n&#8217;avez pas mis un bête fichier dans /favicon.ico sans vous embêter plus. Le navigateur télécharge ce fichier à chaque nouvelle visite. L&#8217;utilisateur perd du temps, occupe sa file de téléchargements avec une requête inutile, et surcharge votre serveur. <strong>Mettez une entête d&#8217;expiration explicite</strong> sur le favicon. Il change de toutes façons rarement et une expiration à deux mois ne gênera vraiment personne.</p>
<h3>Troisième échec</h3>
<p>Votre favicon contient une version 16x16px, une 32x32px, une 48x48px, toutes en millions de couleurs. Le format permet en effet d&#8217;avoir plusieurs images de différentes tailles, et des couleurs sur 24 bits. Le format 16px est utilisé pour la barre d&#8217;adresse, les suivants peuvent être utilisés quand vous faites glisser un raccourci sur votre bureau. Évidemment le marketing est formel, l&#8217;icône en 24 bits est bien plus jolie. Le résultat c&#8217;est que votre simple icône va finir par faire 5 à 10ko, c&#8217;est à dire beaucoup trop. Sérieux, au delà de 900 octets, vous êtes en faute. <strong>Gardez une icône de 16x16px en 256 couleurs</strong>. Pour ce qui en est fait par les visiteurs, c&#8217;est largement suffisant.</p>
<p>Si votre marketing insiste <strong>faites une détection de navigateur et proposez </strong><strong><a href="http://performance.survol.fr/2008/06/images-png-et-gif/">une image PNG</a></strong> pour les navigateur récents, une icône Microsoft en 16x16px sur 256 couleurs pour les autres (Internet Explorer 6 par exemple). Grâce à la compression vous atteindrez des tailles et des qualités bien meilleures tout en restant en dessous du kilo-octet.</p>
<h3>Quatrième échec</h3>
<p>Vous avez gardé le chemin par défaut de /favicon.ico. Le résultat c&#8217;est que vous n&#8217;utilisez pas votre <acronym title="content delivery network" lang="en">CDN</acronym> et tous les avantages qu&#8217;il procure. <strong>Insérez un lien dans les entêtes de vos pages HTML</strong> pour donner un chemin explicite à votre favicon. Le téléchargement du favicon sera plus rapide (parce que sur le CDN), profitera des entêtes de cache du CDN, et sera sur un domaine tiers qui n&#8217;handicapera pas <a href="http://performance.survol.fr/2008/04/limitation-du-nombre-de-requetes/">les files de téléchargement</a> du domaine principal. Par contre gardez toujours une icône de base sur le chemin par défaut, au cas où et pour les documents qui ne sont pas en HTML (sinon vous retombez dans le premier échec).</p>
<pre><code class="xhtml">&lt;link rel="shortcut icon" 
      type="image/png"
      href="//CDN.example.org/favicon" /&gt;</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://performance.survol.fr/2008/07/pensez-aux-favicon/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ne pas filtrer les PNGs</title>
		<link>http://performance.survol.fr/2008/07/ne-pas-filtrer-les-pngs/</link>
		<comments>http://performance.survol.fr/2008/07/ne-pas-filtrer-les-pngs/#comments</comments>
		<pubDate>Fri, 18 Jul 2008 10:26:46 +0000</pubDate>
		<dc:creator>Éric</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[AlphaImageLoader]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[Microsoft Internet Explorer]]></category>
		<category><![CDATA[png]]></category>
		<category><![CDATA[Stoyan Stefanov]]></category>
		<category><![CDATA[transparence]]></category>

		<guid isPermaLink="false">http://performance.survol.fr/?p=52</guid>
		<description><![CDATA[Utiliser les filtres CSS d&#8217;Internet Explorer n&#8217;est pas une bonne idée. Déjà ils sont inutiles la plupart du temps, quand vous pouvez vous contenter d&#8217;un PNG8 avec une transparence binaire (c&#8217;est à dire la plupart du temps si vous avez &#8230; <a href="http://performance.survol.fr/2008/07/ne-pas-filtrer-les-pngs/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Utiliser les filtres CSS d&#8217;Internet Explorer n&#8217;est pas une bonne idée. Déjà ils sont inutiles la plupart du temps, quand vous pouvez vous contenter d&#8217;un <a href="http://performance.survol.fr/2008/06/images-png-et-gif/">PNG8</a> avec une transparence binaire (c&#8217;est à dire la plupart du temps si vous avez suivi le début de la phrase), mais en plus ils sont lents.</p>
<p>Quand vous faites un <code>filter:AlphaImageLoader</code> dans vos CSS, Internet Explorer l&#8217;exécute à chaque apparition de l&#8217;image dans votre page. Oubliez l&#8217;idée qu&#8217;il met en cache le résultat ou même qu&#8217;il n&#8217;exécute le filtre qu&#8217;une seule fois par image. Si vous l&#8217;utilisez pour une petite icône de présentation qui apparaît vingt fois dans votre page, c&#8217;est vingt exécutions du filtres qui sont faites.</p>
<p>À chaque exécution du filtre le rendu est bloqué, en attente. Sur Yahoo! Search en retirant AlphaImageLoader de la feuille CSS c&#8217;est jusqu&#8217;à 100ms qu&#8217;ils ont gagné (information donnée par Stoyan Stefanov sur <a href="http://performance.survol.fr/2008/07/optimisation-dimages-7-erreurs/">sa dernière présentation</a>).</p>
<p>Faites un compromis avec vous-même et laissez une simple transparence binaire sur un PNG8. Mais si vous n&#8217;y êtes pas prêts, faites au moins en sorte que Internet Explorer 7 et plus n&#8217;utilisent pas le filtre, car eux savent nativement lire les couches alpha des images PNG. Transformer <code>filter:</code> en <code>_filter:</code> devrait suffire.</p>
]]></content:encoded>
			<wfw:commentRss>http://performance.survol.fr/2008/07/ne-pas-filtrer-les-pngs/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Optimisation JPEG</title>
		<link>http://performance.survol.fr/2008/07/optimisation-jpeg/</link>
		<comments>http://performance.survol.fr/2008/07/optimisation-jpeg/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 10:00:37 +0000</pubDate>
		<dc:creator>Éric</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[Image optimization - 7 mistakes]]></category>
		<category><![CDATA[jpeg]]></category>
		<category><![CDATA[jpegtrans]]></category>
		<category><![CDATA[Stoyan Stefanov]]></category>
		<category><![CDATA[velocity]]></category>

		<guid isPermaLink="false">http://performance.survol.fr/?p=51</guid>
		<description><![CDATA[Je vous avais rapidement parlé de pngcrush pour optimiser les images PNG, sans aucune perte de qualité. Stoyan Stefanov nous propose jpegtran dans sa dernière présentation sur l&#8217;optimisation des images. Le principe est le même : un petit outil en &#8230; <a href="http://performance.survol.fr/2008/07/optimisation-jpeg/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Je vous avais <a href="http://performance.survol.fr/2008/06/images-png-et-gif/#pngcrush">rapidement parlé</a> de <a href="http://pmt.sourceforge.net/pngcrush/">pngcrush</a> pour optimiser les images PNG, sans aucune perte de qualité. <a href="http://www.phpied.com/image-optimization-7-mistakes/">Stoyan Stefanov</a> nous propose <a href="http://jpegclub.org/">jpegtran</a> dans sa dernière présentation sur l&#8217;optimisation des images.</p>
<h3><span id="more-49"></span></h3>
<p>Le principe est le même : un petit outil en ligne de commande qui optimise l&#8217;image sans aucune perte de qualité. Celui ci ne touche donc pas à la compression de l&#8217;image elle-même, mais retire toutes les méta-données embarquées dans le fichier.</p>
<pre>jpegtran -copy none -optimize -perfect src.jpg dest.jpg</pre>
<p>Par défaut il y a des informations sur l&#8217;appareil photo, une miniature de l&#8217;image, des informations spécifiques au logiciel d&#8217;édition type Photoshop, et même pourquoi pas des coordonnées GPS. Tout ça peut être jeté pour une image à destination du web.</p>
<p>D&#8217;après Stoyan c&#8217;est près de 12% de gain en moyenne quand il a testé dix sites américains à très fort traffic. Ça représente jusqu&#8217;à 38% pour les images de <a href="http://www.blogger.com/">blogger</a> par exemple. Quand on sait que sur ces mêmes sites les images représentent près de la moitié du poids total d&#8217;une page, c&#8217;est plus qu&#8217;intéressant.</p>
]]></content:encoded>
			<wfw:commentRss>http://performance.survol.fr/2008/07/optimisation-jpeg/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Optimisation d&#8217;images &#8211; 7 erreurs</title>
		<link>http://performance.survol.fr/2008/07/optimisation-dimages-7-erreurs/</link>
		<comments>http://performance.survol.fr/2008/07/optimisation-dimages-7-erreurs/#comments</comments>
		<pubDate>Mon, 14 Jul 2008 10:00:41 +0000</pubDate>
		<dc:creator>Éric</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[optimisation]]></category>
		<category><![CDATA[Stoyan Stefanov]]></category>
		<category><![CDATA[velocity]]></category>
		<category><![CDATA[Yahoo! Exceptional Performance]]></category>

		<guid isPermaLink="false">http://performance.survol.fr/?p=50</guid>
		<description><![CDATA[Stoyan Stefanov, de l&#8217;équipe Performance de Yahoo! a donné une présentation fin juin sur l&#8217;optimisation des images. J&#8217;ai déjà parlé de plusieurs choses, il en rajoute d&#8217;autres, avec des chiffres percutants et des explications concices. Et l&#8217;analyse ? Ce billet &#8230; <a href="http://performance.survol.fr/2008/07/optimisation-dimages-7-erreurs/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Stoyan Stefanov, de l&#8217;équipe Performance de Yahoo! a donné <a href="http://www.phpied.com/image-optimization-7-mistakes/">une présentation</a> fin juin sur l&#8217;optimisation des images. J&#8217;ai déjà parlé de plusieurs choses, il en rajoute d&#8217;autres, avec des chiffres percutants et des explications concices.</p>
<p><span id="more-48"></span></p>
<h3>Et l&#8217;analyse ?</h3>
<p>Ce billet est le premier d&#8217;un changement d&#8217;orientation de ce blog. Vous n&#8217;aurez pas le droit à un grand billet encyclopédique. Je parlais à chaque fois de trop de choses, en noyant le principal au milieu de détails tout en oubliant des points que j&#8217;aurai aimé abordé. Désormais je ferai un billet par argument ou par information. Cela fera plein de petits billets, regroupés grâce à la navigation par tags. </p>
<p>Vous aurez donc à attendre quelques jours pour me voir retransmettre ce qui me parait intéressant dans la présentation de Stoyan.</p>
]]></content:encoded>
			<wfw:commentRss>http://performance.survol.fr/2008/07/optimisation-dimages-7-erreurs/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
