<?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>La Case de l&#039;Oncle Tom &#187; yslow</title>
	<atom:link href="http://case.oncle-tom.net/tag/yslow/feed/" rel="self" type="application/rss+xml" />
	<link>http://case.oncle-tom.net</link>
	<description>Développement Web, bonnes pratiques et performances</description>
	<lastBuildDate>Sun, 25 Dec 2011 19:33:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<atom:link rel="search"
           href="http://case.oncle-tom.net/opensearch"
           type="application/opensearchdescription+xml"
           title="Content Search" />		<item>
		<title>Ménage de printemps</title>
		<link>http://case.oncle-tom.net/2009/menage-printemps/</link>
		<comments>http://case.oncle-tom.net/2009/menage-printemps/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 18:06:59 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[Personnel]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[blueprint]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[css2]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[feedburner]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[performances]]></category>
		<category><![CDATA[png]]></category>
		<category><![CDATA[webdesign]]></category>
		<category><![CDATA[yslow]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/?p=1345</guid>
		<description><![CDATA[J'avais besoin de changer de thème graphique ! Découvrez les besoins, les critères d'exigence et de qualité. Je présente également la vie d'un intégrateur sans compatibilité avec Internet Explorer 6, mes déconvenues avec WP Cron et les manipulations de WordPress pour parvenir à mes fins.]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-thumbnail wp-image-1347" title="WordPress Logo" src="http://case.oncle-tom.net/images/2009/04/wordpress-badge-138x138.png" alt="WordPress Logo" width="138" height="138" /></p>
<p>Je me décide à passer un coup de peinture sur ce blog quasiment 2 ans après le <a href="http://case.oncle-tom.net/2007/08/15/css-summer-refresh-2007/"><acronym title="Cascading Style Sheets">CSS</acronym> Summer Refresh</a> organisé par <a href="http://alsacreations.com/">Alsacréations</a>. À vrai dire, j&#8217;avais ce projet dans les cartons depuis septembre 2008 mais le plus difficile a été de trouver le talent graphique. C&#8217;était également l&#8217;occasion de dire au revoir aux navigateurs Web de seconde zone, à savoir Internet Explorer 7 et moins.</p>
<p><span id="more-1345"></span></p>
<h3>Le besoin</h3>
<p>Mon besoin était le suivant :</p>
<ul>
<li><strong>Thème graphique</strong>
<ul>
<li>durable et peu lassant</li>
<li>usage de transparence</li>
<li>toujours sur des tons marrons</li>
<li>inspire la modernité tout comme le côté rustique et soucieux de la nature</li>
<li>structure en grille pour intégrer avec <a href="http://blueprintcss.org/">Blueprint</a></li>
</ul>
</li>
<li><strong>Fonctionnalités</strong>
<ul>
<li>intégration d&#8217;un <em>lifestream</em> (intégré entre temps)</li>
<li>intégration de <a href="http://feedburner.com/">Feedburner</a> via son <a href="http://code.google.com/intl/fr/apis/feedburner/awareness_api.html"><acronym title="Application Programming Interface">API</acronym> Awareness</a></li>
<li>intégration d&#8217;un bandeau <a href="http://flickr.com/">Flickr</a> qui s&#8217;étend sur toute la largeur de l&#8217;écran, peu importe la résolution employée</li>
<li>utilisation du blog comme vitrine : suppression de ma dernière page <acronym title="HyperText Markup Language">HTML</acronym> manuelle (autrefois accessible sur <a href="http://oncle-tom.net/">oncle-tom.net</a>)</li>
</ul>
</li>
<li><strong>Compatibilité</strong>
<ul>
<li>navigateurs modernes &#8230; c&#8217;est à dire rien en dessous d&#8217;Internet Explorer 8</li>
<li>intégration avec <acronym title="HyperText Markup Language">HTML</acronym> 5</li>
<li>pas d&#8217;utilisation de <acronym title="Graphics Interchange Format">GIF</acronym> mais de <acronym title="Portable Network Graphics">PNG</acronym> 6 et <acronym title="Portable Network Graphics">PNG</acronym> 24</li>
</ul>
</li>
<li><strong>Autre</strong>
<ul>
<li>soucis de performance (peu d&#8217;éléments graphiques, utilisation des <em>sprites</em>)</li>
</ul>
</li>
</ul>
<p>Finalement c&#8217;est <a href="http://leslyg.com/">Lesly</a> qui s&#8217;est chargé de la création graphique. Vous pouvez d&#8217;ailleurs consulter la <a href="http://leslyg.com/work/blog-de-thomas-parisot-oncle-tom/">maquette graphique originale sur son portfolio</a>. Quant à moi, j&#8217;ai réalisé toute l&#8217;intégration <acronym title="Cascading Style Sheets">CSS</acronym>/<acronym title="HyperText Markup Language">HTML</acronym> dans WordPress.</p>
<h3>L&#8217;intégration</h3>
<p>Tout d&#8217;abord, qu&#8217;est ce qui a changé par rapport à la maquette ?</p>
<ul>
<li><strong>les polices de caractère</strong> : hormis le titre, seules des polices standards ont été employées. J&#8217;attendrai le support des polices personnalisées en <acronym title="Cascading Style Sheets">CSS</acronym> 3 à moins de partir sur une solution à base de <acronym title="Scalable Vector Graphics">SVG</acronym> (encore que j&#8217;ai des doutes sur l&#8217;accessibilité d&#8217;une telle méthode) ;</li>
<li><strong>moins d&#8217;éléments graphiques</strong> : les punaises, les effets papiers ont été supprimés. Rien que le papier et le scotch de la partie &laquo;&nbsp;À propos&nbsp;&raquo; pesaient plus de 60Ko ;</li>
<li><strong>abandon temporaire du <em>featured content</em></strong> : les solutions actuelles étaient trop lourdes et j&#8217;étais trop impatient pour passer quelques heures de plus &#8230; donc c&#8217;est temporaire <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
<li>l&#8217;<strong>ajout des pages en lieu et place du fil d&#8217;ariane</strong> : j&#8217;en avais besoin pour présenter différents contenus statiques ;</li>
<li><strong>le pied de page</strong> : peu de widgets WordPress offrent un degré de personnalisation suffisant pour arriver à ce résultat. C&#8217;est donc temporisé là aussi en attendant de trouver chaussure à mon pied <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
</ul>
<div id="attachment_1346" class="wp-caption aligncenter" style="width: 160px"><a href="/images/2009/04/caseoncle-tomnet-oncletom-wood.png"><img class="size-medium wp-image-1346" title="caseoncle-tomnet-oncletom-wood" src="http://case.oncle-tom.net/images/2009/04/caseoncle-tomnet-oncletom-wood-150x300.png" alt="Aperçu pleine page" width="150" height="300" /></a><p class="wp-caption-text">Aperçu pleine page</p></div>
<p>Pour le reste je me suis fait plaisir avec notamment l&#8217;utilisation de coins arrondis (<em>border-radius</em>) basés sur les implémentations de Gecko et Webkit. Désolé pour les utilisateurs d&#8217;autres navigateurs car j&#8217;en ai usé et abusé afin d&#8217;éviter l&#8217;utilisation d&#8217;images.</p>
<p>J&#8217;ai également joué avec l&#8217;<strong><acronym title="Application Programming Interface">API</acronym> de WordPress</strong> pour générer les vignettes des articles. Je sais bien qu&#8217;on peut définir des tailles d&#8217;images mais ça ne vaut que pour les médias nouvellement mis en ligne. J&#8217;en ai profité pour n&#8217;afficher dans le listing que l&#8217;extrait du billet. Pas l&#8217;intro, seulement l&#8217;extrait (<em>excerpt</em>). J&#8217;ai lu récemment un article qui parlait de la chose et ça m&#8217;a paru plus approprié. Je peux désormais écrire le texte qui me convient pour attirer la lecture vers un article sans pour autant que ça ait de répercution sur son contenu une fois affiché en pleine page.</p>
<p>Je suis en revanche toujours dubitatif sur l&#8217;<acronym title="Application Programming Interface">API</acronym> de <acronym title="WordPress">WP</acronym> Cron : ma tâche a beau être enregistrée et planifiée, j&#8217;ai l&#8217;impression qu&#8217;elle ne s&#8217;exécute jamais &#8230; contrairement aux recherches de mises à jour de plugins &amp; cie. <span style="text-decoration: line-through;">Quelqu&#8217;un a déjà joué avec et rencontré pareil problème ?</span><br />
<strong>Mise à jour</strong> : j&#8217;ai résolu le problème et détaillé la marche à suivre dans l&#8217;article <a href="http://case.oncle-tom.net/2009/05/14/affichage-personnalise-abonnes-feedburner/">affichage personnalisé de ses lecteurs Feedburner</a>. Je planifiais une fonction et non un <em>hook</em>. Cela fonctionnait mais ne produisait fatalement pas de résultat <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Au final je n&#8217;ai même pas eu à placer la moindre ligne de JavaScript : tout est fait à partir de sélecteurs <acronym title="Cascading Style Sheets">CSS</acronym>. Mon seul regret : l&#8217;absence de sélecteur adjacent &#8230; &laquo;&nbsp;précédent&nbsp;&raquo;. Pour le menu du haut, je voulais pouvoir styler les éléments de menus ayant comme élément suivant une liste d&#8217;élément (<code>&lt;ul&gt;</code>).</p>
<h3>Au final</h3>
<p>J&#8217;ai mis à peu près 2 jours pour tout intégrer et optimiser. Je n&#8217;ai pas encore tenté l&#8217;optimisation à coup de <acronym title="Portable Network Graphics">PNG</acronym> 8 grâce aux quelques Ko gagnés avec <a href="http://pmt.sourceforge.net/pngcrush/">pngcrush</a>. Il faudrait également que je réunisse quelques images dans un seul et même sprite pour gagner encore quelques dizièmes de seconde en temps de chargement.</p>
<div id="attachment_1349" class="wp-caption aligncenter" style="width: 414px"><img class="size-full wp-image-1349" title="Rapport YSlow" src="http://case.oncle-tom.net/images/2009/04/caseoncle-tomnet-yslow.png" alt="Rapport YSlow" width="404" height="398" /><p class="wp-caption-text">Rapport YSlow</p></div>
<p>J&#8217;en ai profité pour tester l&#8217;utilisation de <em>mod_expires</em> et <em>mod_gzip</em> chez OVH en mutualisé (avant de tout migrer sur serveur dédié) : ça marche plutôt très bien. Si ça vous intéresse, je peux en faire un billet dédié. D&#8217;ici là, n&#8217;hésitez pas à bouquiner <a href="http://case.oncle-tom.net/2008/07/15/high-performance-web-sites/">High Performances Web Sites</a> qui reste une référence en la matière. J&#8217;attends d&#8217;ailleurs sa suite avec impatience : <em>Even Faster Web Sites: Essential Knowledge for Frontend Engineers</em>.</p>
<p>Quoiqu&#8217;il en soit, le fait d&#8217;avoir eu la pleine utilisation des sélecteurs <acronym title="Cascading Style Sheets">CSS</acronym> a été géniale : la vie est grandement facilitée. <em>inline-block</em> évite de nombreuses bidouilles à base de flottants. J&#8217;ai hâte qu&#8217;une version de <em>Blueprint</em> sorte en se basant uniquement sur les sélecteurs avancés et non des flottants pour disposer de mises en forme plus complexes tout en étant facile d&#8217;accès.</p>
<p>Si vous rencontrez des problèmes, surtout n&#8217;hésitez pas à les signaler, par le <a href="#respond">biais des commentaires</a> ou par <a href="/contact/">email</a> <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>En attendant, je retourne sur mon <a href="http://case.oncle-tom.net/2009/02/24/faire-part-de-naissance/">projet éprouvant du moment</a> !</p>]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2009/menage-printemps/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>High Performance Web Sites</title>
		<link>http://case.oncle-tom.net/2008/high-performance-web-sites/</link>
		<comments>http://case.oncle-tom.net/2008/high-performance-web-sites/#comments</comments>
		<pubDate>Tue, 15 Jul 2008 05:00:15 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[bonnes pratiques]]></category>
		<category><![CDATA[critique]]></category>
		<category><![CDATA[firebug]]></category>
		<category><![CDATA[gzip]]></category>
		<category><![CDATA[livre]]></category>
		<category><![CDATA[logiciels libres]]></category>
		<category><![CDATA[mod_deflate]]></category>
		<category><![CDATA[mod_expires]]></category>
		<category><![CDATA[mod_gzip]]></category>
		<category><![CDATA[optimisation]]></category>
		<category><![CDATA[oreilly]]></category>
		<category><![CDATA[yahoo]]></category>
		<category><![CDATA[yslow]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/?p=943</guid>
		<description><![CDATA[High Performance Web Site, sous-titré Essential Knowledge for Frontend Engineers, est ce genre de livre à lire au moins une fois à défaut de le posséder. Il résume en à peu près 120 pages 14 points d&#8217;optimisation d&#8217;un site Web. C&#8217;est d&#8217;autant plus intéressant que l&#8217;approche se base sur les mécanismes et non sur de [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-full wp-image-944" title="High Performance Web Sites (couverture)" src="http://case.oncle-tom.net/images/2008/07/livre-high-performance-web-sites.jpg" alt="High Performance Web Sites (couverture)" width="240" height="240" /></p>
<p><a href="http://www.amazon.fr/dp/0596529309/">High Performance Web Site</a>, sous-titré <em>Essential Knowledge for Frontend Engineers</em>, est ce genre de <strong>livre à lire au moins une fois</strong> à défaut de le posséder. Il résume en à peu près 120 pages 14 points d&#8217;optimisation d&#8217;un site Web.</p>
<p>C&#8217;est d&#8217;autant plus intéressant que l&#8217;<strong>approche se base sur les mécanismes</strong> et non sur de l&#8217;optimisation de code. Ainsi dans la plupart des cas, vous n&#8217;aurez &laquo;&nbsp;que&nbsp;&raquo; du paramétrage serveur à faire.</p>
<p><span id="more-943"></span></p>
<p>Ce livre fait étrangement penser aux <a href="http://developer.yahoo.com/performance/">conseils de haute performance</a> prodigués par le <a href="http://developer.yahoo.com">Yahoo! Developer Network</a> et repris par l&#8217;extension <a href="http://getfirebug.com">Firefox pour Firebug</a>, j&#8217;ai nommé <a href="http://developer.yahoo.com/yslow/">YSlow</a>.<br />
C&#8217;est normal : ce livre est écrit par un ingénieur de Yahoo!, probablement un de ceux qui ont participé à la rédaction du guide de performances.</p>
<h3>Pourquoi acheter High Performance Web Sites ?</h3>
<p>On serait tenté de ne pas acheter le livre puisqu&#8217;une bonne partie de ses conseils sont repris sur le guide de haute performance cité plus haut.</p>
<p>Sachez toutefois que <strong>cet ouvrage va plus loin dans le détail</strong>, prend bien le temps de présenter ses tests de performance pour illustrer et de justifier l&#8217;application de leurs méthodes. La plupart des relevés de mesure sont effectués sur une dizaine de sites allant de Google à Amazon.</p>
<p>J&#8217;achèterais ce livre si j&#8217;étais :</p>
<ul>
<li>un <strong>administrateur système</strong> chargé d&#8217;héberger 1 ou plusieurs sites Web</li>
<li>un <strong>technicien/webmaster</strong> en charge d&#8217;un site à plus ou moins fort trafic</li>
<li>un <strong>développeur Web</strong> soucieux des performances de ses productions</li>
<li>toute personne avare en kilo-octets superflus</li>
<li>toute personne voulant <strong>accélérer les temps de réponse</strong> de son ou ses sites Web</li>
</ul>
<p style="text-align:center"><a href="http://case.oncle-tom.net/images/2008/07/yslow-emunova-components.png"><img class="size-medium wp-image-945 aligncenter" title="YSLow sur Emu Nova : les composants" src="http://case.oncle-tom.net/images/2008/07/yslow-emunova-components-300x81.png" alt="YSLow sur Emu Nova : les composants" width="300" height="81" /></a></p>
<h3>Les 14 points d&#8217;optimisation</h3>
<p>High Performance Web Sites axe son discours sur 14 points :</p>
<ol>
<li><a href="http://developer.yahoo.com/performance/rules.html#num_http">Limiter le nombre de requêtes <acronym title="HyperText Transfer Protocol">HTTP</acronym></a></li>
<li><a href="http://developer.yahoo.net/blog/archives/2007/04/high_performanc_1.html">Utiliser un Content Delivery Network (CDN)</a></li>
<li><a href="http://developer.yahoo.net/blog/archives/2007/05/high_performanc_2.html">Utiliser une entête Expires</a></li>
<li><a href="http://developer.yahoo.net/blog/archives/2007/07/high_performanc_3.html">Compresser les composants avec Gzip ou Deflate</a></li>
<li><a href="http://developer.yahoo.net/blog/archives/2007/07/high_performanc_4.html">Placer les feuilles de style en début de page</a></li>
<li><a href="http://developer.yahoo.net/blog/archives/2007/07/high_performanc_5.html">Placer les scripts JavaScript en bas de page</a></li>
<li><a href="http://developer.yahoo.net/blog/archives/2007/07/high_performanc_6.html">Éviter les expressions <acronym title="Cascading Style Sheets">CSS</acronym></a> (Internet Explorer)</li>
<li><a href="http://developer.yahoo.net/blog/archives/2007/07/rule_8_make_jav.html">Placer les scripts JavaScript et les feuilles de style dans des fichiers externes</a></li>
<li><a href="http://developer.yahoo.com/performance/rules.html#dns_lookups">Réduire le nombre d&#8217;appels à des <acronym title="Domain Name Server">DNS</acronym> différents</a></li>
<li><a href="http://developer.yahoo.net/blog/archives/2007/07/rule_8_make_jav.html">Minifier le JavaScript et les <acronym title="Cascading Style Sheets">CSS</acronym></a></li>
<li><a href="http://developer.yahoo.com/performance/rules.html#redirects">Éviter les redirections</a></li>
<li><a href="http://developer.yahoo.net/blog/archives/2007/07/high_performanc_10.html">Supprimer les doublons de scripts</a></li>
<li><a href="http://developer.yahoo.net/blog/archives/2007/07/high_performanc_11.html">Configurer ETags</a></li>
<li><a href="http://developer.yahoo.com/performance/rules.html#cacheajax">Permettre la mise en cache des appels Ajax</a></li>
</ol>
<p>Il prend cependant le soin de bien expliquer les <strong>mécanismes d&#8217;<acronym title="HyperText Transfer Protocol">HTTP</acronym></strong> et les intérêts à améliorer les performances <em>frontend</em>.</p>
<p>Le livre termine sur un comparatif des 14 points sur 10 sites, notation YSLow comprise, dont Amazon, Google, CNN, eBay, Wikipédia et Yahoo!.</p>
<h3>La mise en pratique</h3>
<p>J&#8217;étais déjà sensibilité à presque tous les points pour avoir lu ces fameuses 14 règles en utilisant l&#8217;<a href="http://case.oncle-tom.net/2007/12/25/bonnes-pratiques-firebug-developpement-web/">extension YSlow et Firebug</a>. Cependant après la lecture du livre j&#8217;ai eu davantage de clés et des exemples probants pour me convaincre de les mettre en œuvre.</p>
<p>On peut <strong>appliquer la majorité des points et les points pertinents en 1 heure</strong>. En effet, tout site ne peut se permettre d&#8217;utiliser un CDN pour accélérer les temps de réponse autour du globe.</p>
<p>Personnellement j&#8217;ai mis en place une <strong>compression Gzip directement au niveau d&#8217;Apache</strong> au lieu d&#8217;utiliser une compression effectuée en <acronym title="Pre-Hypertext Processing">PHP</acronym> (avec Gzip aussi). J&#8217;ai couplé cet effort avec la <strong>minification JavaScript</strong> et la <strong>désactivation des ETags</strong>.</p>
<p>J&#8217;avais déjà au préalable externalisés mes <acronym title="Cascading Style Sheets">CSS</acronym> et JavaScript, placé au bon endroit (mais seulement les appels externes au <acronym title="Domain Name Server">DNS</acronym> principal en bas de page) et sans doublon.</p>
<p>C&#8217;est bête à dire mais <strong>le résultat s&#8217;est vraiment senti avec des chargements de page incroyablement plus rapides</strong>. <em>YSlow</em> est effectivement un compagnon idéal pour la mise en application de ces éléments avec son analyse des performances et des composants.</p>
<p style="text-align: center;"><img class="size-full wp-image-946" title="YSLow sur Emu Nova : les statistiques" src="http://case.oncle-tom.net/images/2008/07/yslow-emunova-stats.png" alt="YSLow sur Emu Nova : les statistiques" width="402" height="379" /></p>
<h3>Conclusion</h3>
<p>J&#8217;ai dévoré <strong>High Performance Web Sites</strong> grâce à sa simplicité de rédaction, les nombreux exemples et surtout, les explications enrichissantes. Elles sont mises en application sur Yahoo! et certes, même si on peut se dire qu&#8217;on n&#8217;a pas de site de leur envergure, leurs conseils sont toujours bons à prendre.</p>
<p><strong>High Performance Web Sites</strong> est un concentré de bonnes pratiques, simples à mettre en œuvre. Pourquoi s&#8217;en priver ?</p>
<p>Ces optimisations ne sont évidemment pas les seules à mettre en place pour que tout fonctionne bien : il faut aussi produire du code <acronym title="HyperText Markup Language">HTML</acronym> propre, du JavaScript optimisé, du code application qui ne soit pas redondant.</p>
<p><strong>C&#8217;est un bon début et des pratiques à généraliser</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2008/high-performance-web-sites/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Firebug : bonnes pratiques pour le développement Web</title>
		<link>http://case.oncle-tom.net/2007/bonnes-pratiques-firebug-developpement-web/</link>
		<comments>http://case.oncle-tom.net/2007/bonnes-pratiques-firebug-developpement-web/#comments</comments>
		<pubDate>Tue, 25 Dec 2007 07:00:44 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[Standards du Web]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[firebug]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[logiciels libres]]></category>
		<category><![CDATA[optimisation]]></category>
		<category><![CDATA[performances]]></category>
		<category><![CDATA[yslow]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/2007/12/25/bonnes-pratiques-firebug-developpement-web/</guid>
		<description><![CDATA[Firebug fait partie de mes extensions préférées depuis un bon moment. Je l&#8217;estime aujourd&#8217;hui même plus importante que l&#8217;extension Web Developer, c&#8217;est dire. J&#8217;ai pourtant constaté que la plupart de ses utilisateurs la sous-exploitait en se limitant à la console pour consulter les erreurs et éventuellement à l&#8217;inspecteur HTML pour remonter rapidement dans l&#8217;arborescence des [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align:center"><img src="http://case.oncle-tom.net/images/2007/12/firebug-logo.gif" alt="Logo Firebug" /></p>
<p><a href="http://case.oncle-tom.net/2007/08/07/facebook-rock-your-firefox/">Firebug fait partie de mes extensions préférées</a> depuis un bon moment. Je l&#8217;estime aujourd&#8217;hui même plus importante que l&#8217;extension <a href="https://addons.mozilla.org/fr/firefox/addon/60">Web Developer</a>, c&#8217;est dire.</p>
<p>J&#8217;ai pourtant constaté que la plupart de ses utilisateurs la sous-exploitait en se limitant à la console pour consulter les erreurs et éventuellement à l&#8217;inspecteur <acronym title="HyperText Markup Language">HTML</acronym> pour remonter rapidement dans l&#8217;arborescence des balises en 1 clic. C&#8217;est bien mais pas assez.<br />
Firebug est tout simplement énorme ! Suffisamment énorme pour <strong>gagner un temps incroyable</strong> dans le développement d&#8217;applications JavaScript et pour <strong>mieux comprendre les incohérences</strong> des <acronym title="Cascading Style Sheets">CSS</acronym> dans une page, entre autre.</p>
<p>Je vous offre aujourd&#8217;hui mon cadeau de Noël pour gagner en productivité et maîtriser cet outil ô combien indispensable.<br />
<span id="more-819"></span><br />
Le plus amusant dans l&#8217;histoire c&#8217;est que le site officiel de Firebug dévoile (succinctement certes) tous les petits <em>plus</em> qui simplifient la vie. Je vais m&#8217;atteler à les éplucher en fonction des domaines d&#8217;utilisation :</p>
<ol>
<li><a href="#firebug-html">pour le <acronym title="HyperText Markup Language">HTML</acronym> et les <acronym title="Cascading Style Sheets">CSS</acronym></a></li>
<li><a href="#firebug-javascript">pour le JavaScript</a></li>
<li><a href="#firebug-performances">pour gagner en performances</a></li>
</ol>
<h3 id="firebug-html">Firebug pour le <acronym title="HyperText Markup Language">HTML</acronym></h3>
<h4>L&#8217;inspection <acronym title="HyperText Markup Language">HTML</acronym></h4>
<p style="text-align:center"><img src="http://case.oncle-tom.net/images/2007/12/firebug-html-inspector.png" alt="Inspecteur HTML Firebug" /></p>
<p>J&#8217;apprécie l&#8217;inspection <acronym title="HyperText Markup Language">HTML</acronym> car elle me permet de retrouver simplement le code lié au visuel. Après avoir activé l&#8217;inspecteur, je survole l&#8217;élément sur lequel je veux travailler, je clique dessus et le volet Firebug se fige dessus en m&#8217;indiquant <strong>toutes ses propriétés <acronym title="Cascading Style Sheets">CSS</acronym>, le modèle de boîte et ses propriétés <acronym title="Document Object Model">DOM</acronym></strong>. On en reparle tout de suite après.<br />
L&#8217;inverse est également possible. C&#8217;est à dire qu&#8217;en survolant le code, la correspondance visuelle dans la page est établie. C&#8217;est rudement pratique pour repérer des éléments qui sortent du flux. Ça l&#8217;est d&#8217;autant plus que les différentes marges (internes, externes, bordures) sont elles aussi mises en surbrillance.</p>
<p>Le gros atout de cet inspecteur c&#8217;est également l&#8217;<strong>édition à la volée de toutes les balises</strong> ! Idéal pour tester diverses classes d&#8217;un objet ayant un impact visuel fort sur son affichage. Cet outil présente un gain de temps énorme par rapport à la modification du code dans son éditeur et un petit coup de touche <kbd>F5</kbd> dans la foulée.</p>
<p>Il faut également retenir que <strong>toute balise est sélectionnable en cliquant sur son nom</strong> (<code>div</code>, <code>h3</code> etc.). Cela a a pour effet de mettre à jour le panneau latéral de Firebug. Panneau latéral qui est également fort utile.</p>
<h4>L&#8217;inspection <acronym title="Cascading Style Sheets">CSS</acronym>, Layout et <acronym title="Document Object Model">DOM</acronym></h4>
<p>Le panneau latéral de l&#8217;inspecteur <acronym title="HyperText Markup Language">HTML</acronym> se compose de 3 onglets, tous très utiles.</p>
<h5>Inspecteur <acronym title="Cascading Style Sheets">CSS</acronym></h5>
<p style="text-align:center"><img src="http://case.oncle-tom.net/images/2007/12/firebug-css-inspector.png" alt="Inspecteur CSS Firebug" /></p>
<p>Les propriétés <acronym title="Cascading Style Sheets">CSS</acronym> affichées concernent uniquement l&#8217;objet actif et c&#8217;est ce qui en fait sa force. Ce panneau indique en effet la <strong>cascade <acronym title="Cascading Style Sheets">CSS</acronym> en cours</strong> ce qui permet de comprendre rapidement pourquoi sa feuille de style n&#8217;est pas appliquée comme il faudrait. Elle a la bonne idée de mentionner quelle feuille de style est utilisée et quelle ligne. De quoi corriger ça dans son éditeur favori rapidement.</p>
<p>Ou pas. En effet l&#8217;inspecteur <acronym title="Cascading Style Sheets">CSS</acronym> permet, tout comme l&#8217;inspecteur <acronym title="HyperText Markup Language">HTML</acronym>, de <strong>modifier les propriétés à la volée et sans fioriture</strong>. Si je précise sans fioriture c&#8217;est parce que l&#8217;éditeur à la volée de <em>Web Developer</em> rend parfois l&#8217;affichage de la page bancale en décalant des éléments. Là vous pouvez totalement compter sur l&#8217;éditeur intégré et ce n&#8217;est pas un luxe !<br />
Désactiver, supprimer, modifier ou ajouter des propriétés sont quelques-unes des actions que vous pourrez effectuer à même la page.</p>
<p>Là encore c&#8217;est une des parties où les gains de temps sont énormes. On peut en effet <strong>modifier ses <acronym title="Cascading Style Sheets">CSS</acronym> et les tester tout en observant l&#8217;impact immédiat de ses modifications</strong>.</p>
<h5>Inspecteur du modèle de boîte (<em>Layout</em>)</h5>
<p style="text-align:center"><img src="http://case.oncle-tom.net/images/2007/12/firebug-layout-inspector.png" alt="Modèle de boîte avec Firebug" /></p>
<p>Le <a href="http://www.yoyodesign.org/doc/w3c/css2/box.html">modèle de boîte <acronym title="Cascading Style Sheets">CSS</acronym></a> peut vite devenir pénible à gérer et plus particulièrement quand on visualise mal le <strong>cumul des différentes marges</strong>.<br />
Dans tous les cas c&#8217;est appréciable de pouvoir constater les marges en présence et encore, de pouvoir <strong>modifier leurs dimensions à la volée</strong>. Firebug a la bonne idée de colorer les marges intérieures (<code>padding</code>), extérieures (<code>margin</code>) et les bordures (<code>border</code>) d&#8217;une couleur différente.</p>
<p>Il a également la bonne idée d&#8217;afficher une <strong>double règle millimétrée</strong> au survol du panneau <em>layout</em>. Très pratique dans le cas de design en grilles ou nécessitant un certain rythme de visualisation.</p>
<h5>Inspecteur <acronym title="Document Object Model">DOM</acronym></h5>
<p>Ah l&#8217;inspecteur <acronym title="Document Object Model">DOM</acronym> ! S&#8217;il n&#8217;existait pas il faudrait l&#8217;inventer. Firefox proposait déjà un tel outil à la différence près qu&#8217;il était moins pratique d&#8217;utilisation.<br />
L&#8217;inspecteur <acronym title="Document Object Model">DOM</acronym> m&#8217;est moyennement utile dans le cas d&#8217;une simple inspection du code <acronym title="HyperText Markup Language">HTML</acronym> bien que ce soit toujours pratique de visualiser la présence ou pas d&#8217;objets JavaScript dans tel ou tel élément. C&#8217;est fortement appréciable pour la <a href="http://www.prototypejs.org">librairie Prototype</a> étant donné les dégâts causés par son extension du <acronym title="Document Object Model">DOM</acronym> à gogo.</p>
<h3 id="firebug-javascript">Firebug pour le JavaScript</h3>
<h4>L&#8217;inspecteur JavaScript</h4>
<p style="text-align:center"><img src="http://case.oncle-tom.net/images/2007/12/firebug-javascript-watcher.png" alt="Inspecteur JavaScript Firebug" /></p>
<p>C&#8217;est l&#8217;autre <strong>outil indispensable de Firebug</strong>. Avec lui, c&#8217;en est fini des <code>alert(mavariable);</code>. L&#8217;inspecteur <acronym title="Document Object Model">DOM</acronym> prend avec lui toute son utilité.</p>
<p>J&#8217;illustre sur l&#8217;image ci-dessus l&#8217;utilisation des points d&#8217;arrêt (<em>breakpoints</em>). Il suffit d&#8217;un clic à gauche d&#8217;un numéro de ligne pour en placer/retirer un. Concrètement quand l&#8217;exécution du JavaScript arrivera au premier point d&#8217;arrêt, elle va se stopper.<br />
Quel intérêt ? Observer. En agissant ainsi, vous avez la main sur toutes les variables connues au sein de votre code/fonction. Très utile pour <strong>connaître les paramètres passées à la fonction et détecter les erreurs</strong>. C&#8217;est pour cette raison que les <code>alert()</code> deviennent inutiles : tout est à portée de main. Vous ne pesterez plus contre un <code>undefined</code> mal placé <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>En parallèle de ça, l&#8217;inspecteur <acronym title="Document Object Model">DOM</acronym> est à utiliser pour <strong>visualiser d&#8217;un coup d&#8217;œil les différentes variables actives ainsi que leur arborescence</strong>. Comme tout est cliquable, l&#8217;inspecteur vous transporte sur n&#8217;importe quel objet pour en étudier le contenu.</p>
<h4>La console Firebug <em>alias</em> <code>console.*</code></h4>
<p style="text-align:center"><img src="http://case.oncle-tom.net/images/2007/12/firebug-console.png" alt="Console Firebug" /></p>
<p><strong>La console Firebug est l&#8217;autre tueuse d&#8217;<code>alert()</code></strong> et s&#8217;utilise de deux manières.</p>
<p>La plus accessible est d&#8217;<strong>interagir avec</strong>. Vous saisissez votre code, la console l&#8217;exécute et retourne le ou les résultats. Encore une fois les objets sont cliquables et navigable au travers de l&#8217;inspecteur <acronym title="Document Object Model">DOM</acronym>.<br />
La console est utile pour utiliser des fonctions sorties du contexte de l&#8217;initialisation : il devient tout à fait possible de piloter des éléments après le chargement de la page. Ça évite encore une fois des <kbd>F5</kbd> inutiles et consommateurs de temps.</p>
<p>L&#8217;autre manière d&#8217;utiliser la console c&#8217;est de ne pas l&#8217;utiliser. Ou pas de manière active tout du moins puisqu&#8217;<strong>elle est également un objet JavaScript</strong> (<code>console</code>) utilisable dans votre code auquel sont rattachées plusieurs fonctions au nom explicite :</p>
<ul>
<li><code>console.log()</code> : affiche une information standard</li>
<li><code>console.info()</code> : affiche une information de type &laquo;&nbsp;information&nbsp;&raquo;</li>
<li><code>console.warn()</code> : affiche une information de type &laquo;&nbsp;avertissement&nbsp;&raquo;</li>
<li><code>console.error()</code> : affiche une information de type &laquo;&nbsp;erreur&nbsp;&raquo;</li>
<li><code>console.debug()</code> : débogue le contenu d&#8217;un objet directement dans la console</li>
</ul>
<p>Autrement dit, si l&#8217;inspecteur ne suffisait pas, au lieu de lancer un <code>alert(mavariable)</code> (potentiellement dangereux dans une grande boucle <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  qui n&#8217;a jamais cliqué 50 fois sur &laquo;&nbsp;OK&nbsp;&raquo; à cause de ça ?), il vaudra mieux utiliser <code>console.log(mavariable)</code>. Il y a de quoi faire, surtout avec la possibilité de créer des groupes de messages et l&#8217;utilisation de la syntaxe <code>printf</code>.</p>
<p>Et top du top, en cas d&#8217;erreur JavaScript, la console affiche un petit cercle rouge qui rappelle fortement le point d&#8217;arrêt. Normal puisque c&#8217;en est un. Un clic et on évite de rechercher la ligne problématique dans le code. Encore une fois, du temps de gagné.</p>
<h3 id="firebug-performances">Firebug pour les performances</h3>
<p>Après avoir bien développé, Firebug propose de mieux développer. L&#8217;extension magique propose quelques outils sympathiques pour rapidement déceler les problèmes, notamment de scripts trop gourmands ou à optimiser.</p>
<h4>Le traceur réseau</h4>
<p style="text-align:center"><img src="http://case.oncle-tom.net/images/2007/12/firebug-net-tracer.png" alt="Traceur réseau Firebug" /></p>
<p>Avec le traceur réseau c&#8217;est simple, tout ce qui est chargé sur la page est chronométré. Si un élément est systématiquement long à charger en tête de liste, pourquoi ne pas essayer de le déplacer dans le bas de la pile ? Je pense notamment aux appels vers des fichiers JavaScripts externes. Les appeler en bas de page permet d&#8217;éviter des gels de page. C&#8217;est ce que YSlow nous recommandera <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Outre une petite prévisualisation des contenus, le traceur affiche aussi les <strong>statuts des contenus</strong> s&#8217;ils sont différent du statut 200 (<em>found</em>). Et de surligner ça en rouge en cas de fichier introuvable.</p>
<p>J&#8217;aime beaucoup le traceur pour le <strong>suivi des requêtes XHR (appels <acronym title="Asynchronous JavaScript and XML">AJAX</acronym>)</strong>. Un clic sur un appel affiche à la fois les entêtes, les données transmises au serveur et sa réponse. Fini les requêtes <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> qui ne produisent rien sans qu&#8217;on puisse savoir pourquoi. Le clic droit sera également un fidèle allié, notamment pour ouvrir l&#8217;appel <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> dans un nouvel onglet. C&#8217;est plus lisible pour déboguer quand même <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h4>Le profileur JavaScript</h4>
<p style="text-align:center"><img src="http://case.oncle-tom.net/images/2007/12/firebug-profiler.png" alt="Profileur JavaScript Firebug" /></p>
<p>Le profileur (<em>profiler</em>) JavaScript s&#8217;utilise un peu à la manière de la console : de manière active ou au travers de l&#8217;objet <code>console</code>.</p>
<p><strong>Le profileur enregistre tout ce qui se passe entre le moment où il est enclenché et le moment où il est stoppé</strong>. Il va ainsi dénombrer toutes les appels (<em>calls</em>), leur durée d&#8217;exécution et leur fichier d&#8217;origine, entre autre. L&#8217;idée est bien entendu de voir ce qui consomme le plus d&#8217;appels et de temps pour savoir si ce comportement est normal ou pas. À ce stade là, difficile de pousser la granularité du profileur plus loins.</p>
<p>Sauf en utilisant le profileur directement dans le code comme on a déjà pu le faire pour les <em>logs</em>. <code>console.profile()</code> et <code>console.profileEnd()</code> seront vos amis. C&#8217;est vraiment l&#8217;idéal pour <strong>profiler l&#8217;exécution d&#8217;une fonction</strong>, voire même les portions de code exécutée en son sein.</p>
<h4>L&#8217;extension YSlow</h4>
<p style="text-align:center"><img src="http://case.oncle-tom.net/images/2007/12/firebug-yslow.png" alt="Firebug YSlow" /></p>
<p>L&#8217;<a href="https://addons.mozilla.org/en-US/firefox/addon/5369">extension YSlow</a> est une extension pour Firefox mais elle nécessite toutefois la présence de Firebug. Elle s&#8217;articule autour de trois critères.</p>
<p>Il y&#8217; a d&#8217;une part la surveillance des performances. YSlow se base sur la <a href="http://developer.yahoo.com/performance/rules.html">liste des bonnes pratiques établies par Yahoo!</a> (14 à l&#8217;heure actuelle). YSlow passe ces critères en revue et accorde une note en conséquence. Si certaines sont difficiles à tenir, c&#8217;est un bon moyen de s&#8217;intéresser à de <strong>nouvelles pratiques d&#8217;optimisation et de performances</strong>.</p>
<p>Le second critère est affiché dans le panneau <em>stats</em>. Il s&#8217;agit de la capture d&#8217;écran ci-dessus. Certes il s&#8217;agit d&#8217;un simple tableau mais dont les chiffres sont intéressants à étudier. YSlow analyse la page pour un premier et un second chargement. La différence entre les deux ? C&#8217;est que le cache est passé par là et normalement, je dis bien normalement, <strong>le second chargement se doit d&#8217;être beaucoup plus rapide</strong>.<br />
Si ce n&#8217;est pas le cas, il y a de l&#8217;optimisation à faire et cela peut aussi signifier du côté serveur Web. Pas forcément du développement donc.</p>
<p>Enfin on termine sur une partie complémentaire aux stats : les composants (<em>components</em>). Elle distille des informations plus verbeuses que le traceur réseau de Firebug en se focalisant sur les E-Tag, la présence ou pas de compression, la date de validité du cache ainsi que la taille des objets.</p>
<h3>Conclusion</h3>
<p>J&#8217;espère avoir éclairé quelques lanternes sur l&#8217;utilisation de Firebug. Cette extension est suffisamment puissante pour gagner en confort de développement ; il serait dommage de s&#8217;en priver. <strong>On gagne du temps, du confort et surtout, de la qualité de développement</strong>.<br />
À noter qu&#8217;il existe aussi Firebug Lite. Il s&#8217;agit d&#8217;un script JavaScript compatible avec les principaux navigateurs du marché mais comme le <em>Lite</em> l&#8217;indique, les fonctionnalités sont plutôt limitées. Seule la console JavaScript persiste.</p>
]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2007/bonnes-pratiques-firebug-developpement-web/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
	</channel>
</rss>

