<?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; performances</title>
	<atom:link href="http://case.oncle-tom.net/tag/performances/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>Paris-Web 2010 : industrialiser l&#8217;artisanat de l&#8217;intégration HTML</title>
		<link>http://case.oncle-tom.net/2010/paris-web-industrialiser-integration-html/</link>
		<comments>http://case.oncle-tom.net/2010/paris-web-industrialiser-integration-html/#comments</comments>
		<pubDate>Mon, 20 Sep 2010 09:00:04 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[Standards du Web]]></category>
		<category><![CDATA[atelier]]></category>
		<category><![CDATA[blueprint]]></category>
		<category><![CDATA[bonnes pratiques]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[discussion]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[industrialisation]]></category>
		<category><![CDATA[oocss]]></category>
		<category><![CDATA[optimisation]]></category>
		<category><![CDATA[parisweb]]></category>
		<category><![CDATA[performances]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/?p=17526</guid>
		<description><![CDATA[Je présente un nouvel atelier Paris-Web : "industrialiser l'artisanat de l'intégration HTML" le samedi 16 octobre 2010 à Télécom Paris. Présentation de l'atelier, pourquoi j'ai décidé de l'animer et comment il va s'organiser.
Une chose est sure : on va tous réfléchir ensemble !]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai le plaisir d&#8217;animer un atelier technique à <a href="http://www.paris-web.fr">Paris-Web</a> pour la troisième année consécutive. Mon premier atelier, en 2008, traitait des <strong>frameworks <acronym title="Cascading Style Sheets">CSS</acronym></strong> ; et en 2009, des capacités de Gears et d&#8217;HTML5 pour <strong>construire un site Web consultable hors-ligne</strong>.</p>
<p>Je reviens aux sources et à mon grand dada avec l&#8217;<strong>intégration <acronym title="HyperText Markup Language">HTML</acronym></strong> au sens large du terme. J&#8217;ai choisi d&#8217;intituler cet atelier : <a href="http://www.paris-web.fr/2010/programme/industrialiser-lartisanat-de-lintegration-html.php">industrialiser l&#8217;artisanat de l&#8217;intégration <acronym title="HyperText Markup Language">HTML</acronym></a>. Rendez-vous le samedi 16 octobre 2010 à 10h50 dans les locaux de <a href="http://www.telecom-paristech.fr/">Télécom Paris</a> pour en discuter &#8230; et maintenant, pour le préparer et en dessiner les contours.</p>
<p><img class="aligncenter size-medium wp-image-17530" title="Paris-Web" src="http://case.oncle-tom.net/images/2010/09/logotype-paris-web-300x203.png" alt="" width="300" height="203" /></p>
<p><span id="more-17526"></span></p>
<h3>Origine de l&#8217;atelier</h3>
<p>Juste après l&#8217;édition 2009 de Paris-Web, je me demandais sur quoi je pourrais parler en conférence ou en atelier. Cette manifestation a le mérite d&#8217;attirer des orateurs de qualité &#8230; et ce n&#8217;est pas évident de monter sur scène en se disant : que pourrais-je apporter au public, qui ne soit pas de la redite et suscite autant d&#8217;intérêt qu&#8217;une <a href="http://stephanietroeth.com/">Stéphanie Troeth</a>, <a href="http://www.la-grange.net/">Karl Dubost</a> ou <a href="http://icant.co.uk/">Christian Heilmann</a>.</p>
<p>Et là j&#8217;ai lu <a href="http://blog.temesis.com/post/2009/12/15/Ma-lettre-a-papa-ParisWeb">la lettre au papa Paris-Web d&#8217;Elie Sloïm</a>. J&#8217;ai de suite pensé à un sujet lié à l&#8217;<strong>intégration <acronym title="HyperText Markup Language">HTML</acronym></strong>. Cette spécialité connaît une effervescence d&#8217;outils depuis 2008 (<em>frameworks</em> <acronym title="Cascading Style Sheets">CSS</acronym>, pré-processeurs <acronym title="Cascading Style Sheets">CSS</acronym> et performances Web) &#8230; pourtant les méthodes de travail restent toujours très liées au développeur, à son tempérament et à ses connaissances d&#8217;outils capables d&#8217;améliorer la productivité. Quelque chose de tout sauf normalisé, industrialisé.</p>
<p>Comme il s&#8217;agit également d&#8217;une pratique ayant du mal à accepter les changements &#8211; je me souviens encore des réticences liées aux <em>frameworks</em>, alors que dans tout langage de programmation ces outils sont perçus comme du pain béni &#8211; je me suis dis qu&#8217;il y avait quelque chose à faire.</p>
<h3>Les axes initiaux de l&#8217;atelier</h3>
<p>En préparant l&#8217;appel à propositions de Paris-Web, j&#8217;avais convenu que cet atelier devrait tenter de répondre aux objectifs suivants :</p>
<ul>
<li>dresser un état de l&#8217;art de l&#8217;intégration <acronym title="HyperText Markup Language">HTML</acronym></li>
<li>offrir une large tribune à l&#8217;audience, notamment en partageant ses  propres retours d&#8217;expérience</li>
<li>déterminer ce dont on dispose et ce dont on manque en terme  d&#8217;outillage</li>
</ul>
<p>Par extension, je souhaitais répondre (au moins) à ces questions :</p>
<ul>
<li>comment bâtir des <acronym title="Cascading Style Sheets">CSS</acronym> indépendantes et réutilisables ?</li>
<li>quand et comment utiliser un préprocesseur <acronym title="Cascading Style Sheets">CSS</acronym> ?</li>
<li>comment dialoguer avec le graphiste ?</li>
<li>comment dialoguer avec le développeur ?</li>
<li>comment détecter les régressions et assurer une qualité de code en  <acronym title="Cascading Style Sheets">CSS</acronym> ?</li>
</ul>
<p>J&#8217;ai également repris l&#8217;historique des précédents Paris-Web pour voir que de précédents ateliers s&#8217;étaient déjà penchés sur la question de la chaine d&#8217;intégration. D&#8217;où mon souhait de ne pas forcément réinventer la roue.</p>
<p>Pour autant, les objectifs tout comme les questions ne sont pas figées dans le marbre. Cet article est également là pour <strong>capter vos avis et vos remarques</strong>, pour ajuster cela avant le jour de l&#8217;atelier.</p>
<h3>Discuter, échanger, et créer</h3>
<p>Enfin, mon évolution personnelle au long de cette année 2010 et certaines paroles de <a href="http://larlet.fr/">David Larlet</a> résonnaient dans ma tête.<br />
Un sujet de cette importance ne peut pas être magistral. Pourquoi ? Parce que tous les intégrateurs rencontrent une <strong>variété de conditions de travail différentes</strong>, et qu&#8217;il serait d&#8217;autant plus difficile d&#8217;obtenir un consensus en prodiguant cet atelier de manière magistrale.</p>
<p>D&#8217;où l&#8217;idée d&#8217;introduire l&#8217;atelier par un <strong>bref résumé de mes retours d&#8217;expérience</strong> sur les <em>frameworks</em> (existants, ou créés pour le besoin), les pré-processeurs <acronym title="Cascading Style Sheets">CSS</acronym>, leur combinaison ainsi que l&#8217;application de la philosophie <a href="http://oocss.org/">Object Oriented <acronym title="Cascading Style Sheets">CSS</acronym></a>. Quelque chose comme 10/15 minutes maximum.</p>
<p>Le reste du temps serait réparti de manière équitable sur chacune des questions, et <strong>animé sous forme de discussion</strong>. Chaque participant répondrait (<em>via</em> des post-it, je les fournirai <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> ) par 1 ou plusieurs réponses, positives et négatives. En gros, ce qu&#8217;il faut faire, et ce qu&#8217;il ne faut pas faire.</p>
<p>Cette collecte en <em>live</em> des post-it, affichés au tableau, permettrait de dresser une <strong>cartographie des bonnes et mauvaises pratiques</strong>, des actions à mener et dont il faut se méfier.</p>
<p>A défaut de parler d&#8217;une industrialisation vidant l&#8217;intégration <acronym title="HyperText Markup Language">HTML</acronym> de son côté artisanal, on aurait une excellente occasion pour tous se poser ensemble les bonnes questions, et <strong>repartir avec des réponses et des idées pleins la tête</strong>.</p>
<h3>Conclusion</h3>
<p>Bref, si le sujet de l&#8217;intégration <acronym title="HyperText Markup Language">HTML</acronym> vous préoccupe, est au centre de vos intérêts et que vous souhaitez en améliorer sa pratique professionnelle (pour une meilleure reconnaissance de celle-ci ?), je vous invite à la fois à venir à l&#8217;atelier technique du samedi (<a href="http://inscriptions.paris-web.fr/">il reste quelques places ; ça ne coûte que 22€</a>) et à réagir en commentaires. Je ferai mon possible pour adapter l&#8217;animation de l&#8217;atelier à vos problématiques et questionnements.</p>
<p>Cet atelier serait ainsi à l&#8217;image de Paris-Web : une <strong>grande discussion conviviale, constructive et enrichissante</strong>.<br />
L&#8217;idée sera ensuite de concrétiser ces échanges soit par un ensemble de billets de blogs soit, si la matière le permet, en <strong>livre blanc</strong>.</p>
<p>Ne me demandez pas ce que je prévois pour 2011, je n&#8217;en ai aucune idée &#8230; <em>pour l&#8217;instant</em> <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2010/paris-web-industrialiser-integration-html/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<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>Paris-Web 2008 : au nom du webdesign, de la qualité et des standards</title>
		<link>http://case.oncle-tom.net/2008/paris-web-2008-webdesign-qualite-standards/</link>
		<comments>http://case.oncle-tom.net/2008/paris-web-2008-webdesign-qualite-standards/#comments</comments>
		<pubDate>Thu, 20 Nov 2008 06:00:13 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Accessibilité]]></category>
		<category><![CDATA[Standards du Web]]></category>
		<category><![CDATA[bonnes pratiques]]></category>
		<category><![CDATA[ergonomie]]></category>
		<category><![CDATA[logiciels libres]]></category>
		<category><![CDATA[paris]]></category>
		<category><![CDATA[parisweb]]></category>
		<category><![CDATA[performances]]></category>
		<category><![CDATA[pw2008]]></category>
		<category><![CDATA[qualité]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/?p=1203</guid>
		<description><![CDATA[J&#8217;ai enfin pu assister à mon premier Paris-Web à Paris du 13 au 15 novembres 2008 inclus. C&#8217;était bien, très bien mais que dis-je : excellent ! J&#8217;ai rarement eu aussi peu envie de rentrer chez moi après cette multitude de rencontres dans un état d&#8217;esprit des plus respectueux. Y&#8217;a même pas de troll pendant [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-1204" title="Badge Paris-Web 2008" src="http://case.oncle-tom.net/images/2008/11/badge-paris-web-2008.jpg" alt="" width="327" height="500" /></p>
<p>J&#8217;ai <em>enfin</em> pu assister à mon premier <a href="http://www.paris-web.fr/">Paris-Web</a> à Paris du 13 au 15 novembres 2008 inclus. C&#8217;était bien, très bien mais que dis-je : excellent ! J&#8217;ai rarement eu aussi peu envie de rentrer chez moi après cette multitude de rencontres dans un état d&#8217;esprit des plus respectueux.</p>
<p>Y&#8217;a même pas de troll pendant la conférence <em>Internet Explorer 8</em>, c&#8217;est dire.</p>
<p><span id="more-1203"></span></p>
<h3>Les conférences en quelques mots</h3>
<p>Les <a href="http://www.paris-web.fr/2008/-programme-">conférences de Paris-Web 2008</a> étaient réparties du jeudi au vendredi. Je souhaitais intituler cette partie &laquo;&nbsp;mes conférences préférées&nbsp;&raquo; mais en faisant le décompte, j&#8217;en citerais au moins 75% :</p>
<ul>
<li><a href="http://www.slideshare.net/elirene/sp-parisweb2008-20081113-presentation/">Qualité et accessibilité Web : vers l’amélioration continue</a></li>
<li><a href="http://www.slideshare.net/cheilmann/working-in-the-now-presentation">Travailler dans le présent</a></li>
<li><strong>Accessibilité, des volontaires ?</strong></li>
<li>Internationalisation</li>
<li><strong>La mode se démode, le &lt;style&gt; jamais</strong></li>
<li>Identité 2.0 et Web sémantique</li>
<li>IE8 et les standards du Web</li>
<li><strong>Performances côté client</strong></li>
</ul>
<div class="wp-caption aligncenter" style="width: 344px"><a class="tt-flickr tt-flickr-Medium" title="Stéphane Deschamps" href="http://www.flickr.com/photos/the-jedi/3034676683/"><img src="http://farm4.static.flickr.com/3237/3034676683_5eedcfdbb4.jpg" alt="Stéphane Deschamps" width="334" height="500" /></a><p class="wp-caption-text">Stéphane Deschamps</p></div>
<p>Ce qu&#8217;il faut retenir c&#8217;est que désormais, nous sommes dans une époque où nombre d&#8217;outils sont à notre disposition. Il faut <strong>maximiser l&#8217;utilisation d&#8217;outils déjà existants</strong> et s&#8217;en servir pour bâtir nos applications, interfaces et présentations.</p>
<p>Il faut également qu&#8217;on en finisse avec notre approche trop technique et intégriste de travailleurs du Web : <strong>le client se fiche éperdument de la techno employée</strong> ou de la fonctionnalité en elle-même. Ce qui compte c&#8217;est ce qu&#8217;elle apporte ainsi que le résultat final.<br />
Bien entendu, si la solution employée tient compte des performances et est facile à mettre en œuvre, c&#8217;en n&#8217;est que mieux.</p>
<p>Élie me faisait la remarque : <strong>il faut vendre de la qualité et pas de l&#8217;accessibilité</strong>. Il faut vendre un site qui rassure et guide le client. Si le site n&#8217;est déjà pas adapté aux individus sans déficiences, à quoi bon s&#8217;acharner à le rendre accessible ?<br />
Mieux vaut beaucoup de sites accessibles à 60% qu&#8217;une infime proportion de sites accessibles à 99%.</p>
<p>Bon nombre de conseils sur l&#8217;optimisation des sites Web étaient déjà cités dans l&#8217;excellentissime <a href="http://case.oncle-tom.net/2008/07/15/high-performance-web-sites/">livre High Performances Websites</a>. L&#8217;équipe <em>Exceptional Performance</em> de Yahoo! s&#8217;est toutefois penchée à fond sur l&#8217;optimisation des images.<br />
J&#8217;y reviendrai d&#8217;ailleurs car j&#8217;ai découvert <em>pngnq</em> et <em>pngcrush</em>. Ces 2 programmes sont d&#8217;une utilité redoutable pour compresser et optimiser vos <acronym title="Portable Network Graphics">PNG</acronym>, notamment pour faciliter la transparence <acronym title="Internet Explorer 6">IE6</acronym> sans douleur.</p>
<div class="wp-caption aligncenter" style="width: 348px"><a class="tt-flickr tt-flickr-Medium" title="Chris Wilson" href="http://www.flickr.com/photos/the-jedi/3043455147/"><img src="http://farm4.static.flickr.com/3135/3043455147_016c2baa1d.jpg" alt="Chris Wilson" width="338" height="500" /></a><p class="wp-caption-text">Chris Wilson</p></div>
<p>On terminera également avec une perspective du futur.<br />
Daniel Glazman a fait un show exceptionnel sur les <strong>nouveautés de CSS3</strong> avec tout plein de bonnes choses. J&#8217;ai vraiment hâte qu&#8217;on puisse jouer avec &#8230; peut-être dans pas si longtemps que ça vu que les navigateurs intègrent ces nouveautés par anticipation.</p>
<p>De son côté, Chris Wilson (qui faisait déjà partie de l&#8217;équipe de développement de Mozaïc) a abordé les standards et Internet Explorer 8. En toute honnêteté, j&#8217;admire la bravoure de cet homme &laquo;&nbsp;seul&nbsp;&raquo; face à une assemblée pro-standards qui passe sa journée à jeter des cailloux sur Internet Explorer.<br />
Pour avoir un peu discuté avec lui après coup, il représente une chance exceptionnelle d&#8217;enfin avoir Internet Explorer au niveau des autres navigateurs.</p>
<p>Si fonctionnellement je me fiche éperdument du navigateur puisque je ne l&#8217;utiliserai plus, le monde a tout à gagner à avoir <strong>un navigateur de plus à respecter les standards</strong>.<br />
Bon courage à Chris car ça ne doit pas être évident tous les jours pour lui. Je n&#8217;ose pas imaginer les montages qu&#8217;il a dû déplacer pour imposer ce choix du respect.</p>
<h3>Du côté des ateliers</h3>
<p>Le samedi c&#8217;était ateliers : 2 sessions le matin et 2 l&#8217;après-midi. Je me suis d&#8217;ailleurs vite retrouvé avec des choix cornéliens puisque pour chaque horaire, il y avait 5 sujets qui se faisaient concurrence.</p>
<p>J&#8217;ai pour ma part assisté à :</p>
<ul>
<li><a href="http://www.paris-web.fr/2008/-samedi-15-novembre-technique-#hcalendar-Paris-Web_2008-15_novembre_2008-atelier-redaction_et_referencement_naturel">Rédaction Web et référencement naturel</a></li>
<li><a href="http://www.paris-web.fr/2008/-samedi-15-novembre-technique-#hcalendar-Paris-Web_2008-15_novembre_2008-atelier-validation_formulaires">Validation avancée des formulaires</a></li>
<li><a href="http://www.paris-web.fr/2008/-samedi-15-novembre-technique-#hcalendar-Paris-Web_2008-15_novembre_2008-atelier-frameworks_CSS">Développement efficace avec les <span lang="en">frameworks <acronym title="Cascading Style Sheet"><acronym title="Cascading Style Sheets">CSS</acronym></acronym></span></a></li>
<li><a href="http://www.paris-web.fr/2008/-samedi-15-novembre-technique-#hcalendar-Paris-Web_2008-15_novembre_2008-atelier-rdf_vs_microformats"><acronym title="Resource Description Framework" lang="en"><acronym title="Resource Description Framework">RDF</acronym></acronym>a <abbr class="discret" title="versus" lang="en">vs</abbr> Microformats</a></li>
</ul>
<p>La <strong>rédaction Web était intéressante</strong> même si je n&#8217;ai pas appris grand chose et j&#8217;en profitais pour terminer mes <em>slides</em>. Vous retrouverez tout le contenu de cette présentation dans le livre <a href="http://case.oncle-tom.net/2008/01/08/ecrit-web-traitement-information-sur-internet/">l&#8217;écrit Web</a>.</p>
<p>La <strong>validation avancée des formulaires partait d&#8217;un bon principe</strong> mais s&#8217;enfonçait inutilement dans certaines parties. À mon avis, expliquer chaque fonction (y compris celles du <acronym title="Document Object Model">DOM</acronym>) était une perte de temps.<br />
Conseil : charger ses slides ne rend pas pour autant l&#8217;information digeste. C&#8217;est pas un document Word.<br />
C&#8217;était néanmoins intéressant pour le raisonnement et la satisfaction de mettre en place son propre validateur. Toutefois en production autant utiliser de l&#8217;existant. Il y a des <em>plugins</em> pour tous les bons frameworks JavaScript qui se respectent.</p>
<p>Je passe sur l&#8217;atelier des <strong>frameworks <acronym title="Cascading Style Sheets">CSS</acronym></strong> puisque je l&#8217;animais. J&#8217;y reviendrai dans un prochain article pour appuyer ma présentation et fournir des explications à ceux qui n&#8217;ont pas pu y assister.<br />
J&#8217;étais en revanche étonné qu&#8217;ils soient si peu connus. J&#8217;ai par contre été enchanté de les voir cités à plusieurs reprises dans mes conférences préférées <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Rien à redire sur <strong>RDFa vs. Microformats</strong> même si on aurait pu éjecter les microformats rapidements et plonger encore plus loin dans la pratique de RDFa. Ça sera prétexte à une suite plus technique l&#8217;an prochain <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<div class="wp-caption aligncenter" style="width: 510px"><a class="tt-flickr tt-flickr-Medium" title="Amélie Boucher" href="http://www.flickr.com/photos/the-jedi/3035518848/"><img src="http://farm4.static.flickr.com/3175/3035518848_5670eddbfa.jpg" alt="Amélie Boucher" width="500" height="334" /></a><p class="wp-caption-text">La sublime Amélie Boucher</p></div>
<h3>Sans oublier les gens !</h3>
<p>Paris-Web c&#8217;est aussi l&#8217;occasion de <a href="http://www.biologeek.com/2008/11/paris-web-2008-retours-chaud/">rencontrer la moitié de son aggrégateur</a> et de ses <em>followers</em> Twitter <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Et Dieu sait s&#8217;il y avait tout un tas de pointures du Web à notre disposition dans une ambiance exceptionnellement cordiale :</p>
<ul>
<li>Sophie Major, big boss du Yahoo! Developer Network</li>
<li><a href="http://www.stubbornella.org/">Nicole Sullivan</a>, de l&#8217;équipe Yahoo! <em>Exceptional Performance</em></li>
<li><a href="http://www.wait-till-i.com/">Christian Heilmann</a> et son incroyable bonne humeur pragmatique ; je suis fan !</li>
<li><a href="http://glazman.org">Daniel Glazman</a>, du <acronym title="Cascading Style Sheets">CSS</acronym> Working Group ; franc, direct et j&#8217;aime ça</li>
<li>Sans oublier pêle-mêle <a href="http://www.sutekidane.net/">Than</a>, <a href="http://www.tentatives-accessibles.eu">Sébastien Delorme</a>, <a href="http://blog.webatou.info/">Monique</a>, <a href="http://www.jeuxdemaux.com/">La Lène</a>, <a href="http://www.ergolab.net">Amélie Boucher</a>, <a href="http://redisdead.net">Hellgy</a>, <a href="http://goetter.fr">Raphaël Goetter</a>, <a href="http://openweb.eu.org/">Fabrice Bonny</a>, <a href="http://www.netvibes.com/znarf">François Hodierne</a>, <a href="http://xavier.borderie.net/blog/">Xavier Borderie</a> &#8230; et en oubliant très certainement plein d&#8217;autres :&#8217;(</li>
<li>Et d&#8217;excellentes découvertes : <a href="http://hanblog.info/blog/">Anthony Ricaud</a>, <a href="http://blog.virgule.info/">Mathieu Pillard</a> et toute l&#8217;<strong>équipe Paris-Web</strong> !</li>
</ul>
<div class="wp-caption aligncenter" style="width: 510px"><a class="tt-flickr tt-flickr-Medium" title="Table ronde du jeudi" href="http://www.flickr.com/photos/the-jedi/3034679191/"><img src="http://farm4.static.flickr.com/3270/3034679191_d551c06a85.jpg" alt="Table ronde du jeudi" width="500" height="334" /></a><p class="wp-caption-text">La brochette des meilleurs !</p></div>
<h3>Conclusion</h3>
<p>Bref, <strong>Paris-Web c&#8217;est bien</strong>. Tellement bien que l&#8217;attente de l&#8217;édition 2009 me paraît déjà insoutenable !</p>
<p>Je ne regrette au final qu&#8217;une chose : 3 jours ça paraît long mais ça passe teeeeeeeeeeeeellement vite en compagnie de personnes de qualité avec un programme chargé.<br />
J&#8217;ai essayé de discuter avec un maximum de personnes, que je connaissais ou pas, mais des fois c&#8217;est très insuffisant.</p>
<p>Les tables rondes étaient également exceptionnelles &#8230; désolé ça frise le billet sponsorisé mais il est difficile de ne pas déborder d&#8217;enthousiasme après un tel évènement.</p>
<p>C&#8217;est l&#8217;<strong>effet Paris-Web</strong>. Rendez-vous est pris.</p>
<p><a class="tt-flickr tt-flickr-Medium" title="François Yergeau nous parle d'internationalisation" href="http://www.flickr.com/photos/the-jedi/3039040472/"><img class="aligncenter" src="http://farm4.static.flickr.com/3020/3039040472_65bfdecfbd.jpg" alt="François Yergeau nous parle d'internationalisation" width="500" height="334" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2008/paris-web-2008-webdesign-qualite-standards/feed/</wfw:commentRss>
		<slash:comments>21</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>
		<item>
		<title>jQuery : optimiser l&#8217;utilisation des sélecteurs CSS</title>
		<link>http://case.oncle-tom.net/2007/jquery-optimisation-selecteurs-css/</link>
		<comments>http://case.oncle-tom.net/2007/jquery-optimisation-selecteurs-css/#comments</comments>
		<pubDate>Tue, 18 Dec 2007 07:00:02 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[bonnes pratiques]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[css 3]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[optimisation]]></category>
		<category><![CDATA[performances]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/2007/12/18/jquery-optimisation-selecteurs-css/</guid>
		<description><![CDATA[JQuery est une formidable librairie JavaScript car elle offre une grande souplesse et une utilisation simple. Il est cependant important de bien comprendre son fonctionnement pour éviter les débordements liés à une joie mal maîtrisée. S&#8217;il est très facile d&#8217;utiliser les sélecteurs CSS de jQuery, je constate de ci de là que leur utilisation n&#8217;est [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align:center"><img src="http://case.oncle-tom.net/images/2007/12/jquery-logo.png" alt="Logo jQuery" /></p>
<p><a href="http://jquery.com">JQuery</a> est une formidable librairie JavaScript car elle offre une grande souplesse et une utilisation simple. <strong>Il est cependant important de bien comprendre son fonctionnement</strong> pour éviter les débordements liés à une joie mal maîtrisée.<br />
S&#8217;il est très facile d&#8217;utiliser les sélecteurs <acronym title="Cascading Style Sheets">CSS</acronym> de jQuery, je constate de ci de là que leur utilisation n&#8217;est pas toujours optimale &#8230; quand elle l&#8217;est déjà un tant soit peu.</p>
<p>Alors on se retrousse les manches et c&#8217;est parti pour un petit <strong>cas pratique sur les sélecteurs <acronym title="Cascading Style Sheets">CSS</acronym></strong> jQuery, plus une petite récap&#8217; pour grapiller du temps et des lignes de code <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
<span id="more-832"></span></p>
<h3>Le cas pratique</h3>
<p>J&#8217;ai pensé à une chose : plutôt que vous papillonniez en lisant cet article, j&#8217;ai fait en sorte que vous puissiez y prendre part. JQuery est très divertissant &#8211; certainement plus que votre voisine d&#8217;en face &#8211; alors tant qu&#8217;à me lire, autant optimiser la compréhension <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
Pour cela il vous faut 2 choses :</p>
<ol>
<li>un <a title="Sandbox HTML / jQuery" href="http://case.oncle-tom.net/images/2007/12/sandbox-oncletom-20071217.htm">bac à sable <acronym title="HyperText Markup Language">HTML</acronym> / jQuery</a> concocté par mes soins</li>
<li>l&#8217;inévitable <a href="https://addons.mozilla.org/fr/firefox/addon/1843">extension Firebug</a> pour bénéficier d&#8217;une console digne de ce nom (entre autre)</li>
</ol>
<h3>Principe de la sélection <acronym title="Cascading Style Sheets">CSS</acronym> de jQuery</h3>
<p>Que celui qui s&#8217;est lancé corps et âme dans jQuery sans lire la <a title="documentation jQuery" href="http://docs.jquery.com/Selectors">documentation</a> lâche un com&#8217; ! Elle est suffisamment complète pour éviter la plupart des questions du genre <q>comment je fais pour &#8230;</q>.</p>
<p>Maintenant que vous avez le document en main, nous allons jouer avec jQuery pour récupérer ce que nous voulons. Les personnes n&#8217;ayant pas Firebug comprendront la logique du code sans même avoir à le regarder :</p>
<pre><code class="javascript">// Récupération du premier paragraphe
$('body p:first-child');
// Récupération du nœud des continents
$('ul.continents');
// Récupération de la liste des capitales
$('.capitale');
// Récupération du dernier élément du body
$('body :last');
// Compter le nombre de pays
$('.pays &gt; li').length;
</code></pre>
<p>Magique non ?</p>
<h3>Comprendre la sélection <acronym title="Cascading Style Sheets">CSS</acronym> de jQuery</h3>
<p>Les résultats sont propres mais n&#8217;est pas parce que ça marche que c&#8217;est bien. La preuve, tous les exemples ci-dessus ne sont pas du tout optimisés.<br />
Alors <strong>comment savoir si un sélecteur est optimisé</strong> ou pas ? La réponse n&#8217;est pas systématique car elle dépend exclusivement de votre rigueur et du <acronym title="Document Object Model"><acronym title="Document Object Model">DOM</acronym></acronym> à interroger. Plus il sera touffu et plus votre sens aigü de la performance sera sollicité.</p>
<p>Reprenons les exemples ci-dessus pour le transposer en JavaScript <em>old-school</em>. C&#8217;est le meilleur moyen de sentir le piège &#8230; ou pas.</p>
<pre><code class="javascript">// Récupération du premier paragraphe
$('body p:first-child');
// équivaut à
document.getElementsByTagName('body')[0].getElementsByTagName('p')[0];</code></pre>
<p>Il y a 2 erreurs dans cette sélection :</p>
<ol>
<li>sélectionner <code>body</code>. <code>getElementsByTagName()</code> oblige à parcourir tous les nœuds du document (1000 s&#8217;il y en a 1000) alors qu&#8217;on n&#8217;en veut qu&#8217;un &#8230; et qu&#8217;il ne peut y en avoir d&#8217;un ;</li>
<li>on sélectionne ensuite tous les <code>p</code> du body. Autant le faire dès la première fois car là encore c&#8217;est tous les nœuds contenus dans <code>body</code> qui sont parcourus &#8230; y compris l&#8217;énorme liste à puces !</li>
</ol>
<pre><code class="javascript">// Récupération du nœud des continents
$('ul.continents');
// équivaut à
var continents = [];
var el = document.getElementsByTagName('ul');
for (i in el)
{
  if (el[i].className.match(/(^| )continents( |$)/);
  {
     continents.push(el[i]);
  }
}</code></pre>
<p>La sélection est ici trop générique. On voit bien que l&#8217;on est obligé de charger tous les éléments <code>ul</code> du <acronym title="Document Object Model">DOM</acronym> pour les filtrer.</p>
<pre><code class="javascript">// Récupération de la liste des capitales
$('.capitale');
// équivaut à
var capitales = [];
var el = document.getElementsByTagName('*');
for (i in el)
{
  if (el[i].className.match(/(^| )capitale( |$)/);
  {
     capitales.push(el[i]);
  }
}</code></pre>
<p>C&#8217;est probablement la dernière chose à faire. Cassez les genoux de toute personne écrivant un tel sélecteur : il mérite d&#8217;animer le BigDill rien de plus !<br />
Dans ce cas de figure, c&#8217;est TOUT le <acronym title="Document Object Model">DOM</acronym> qui est chargé (75 éléments) pour ensuite boucler sur un filtre. Cette boucle n&#8217;est pas optimisée mais ce n&#8217;est pas ce que l&#8217;on souhaite travailler aujourd&#8217;hui <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<pre><code class="javascript">// Récupération du dernier élément du body
$('body :last');
// équivaut à
var el = document.getElementsByTagName('body')[0].lastChild;</code></pre>
<p>Comme dans le premier cas, le <code>document.getElementsByTagName()</code> charge tout le <acronym title="Document Object Model">DOM</acronym> pour le filtrer, ne récupérer que le premier élément et, seule opération non coûteuse, utiliser son dernier enfant.<br />
Ce n&#8217;est pas la pire des exemples mais là encore on peut optimiser les choses.</p>
<pre><code class="javascript">// Compter le nombre de pays
$('.pays &gt; li').length;
// équivaut à
var pays = 0;
var el = document.getElementsByTagName('*');
for (i in el)
{
  if (el[i].className.match(/(^| )pays( |$)/);
    {
      var continent = el[i];
      for (j in continent.childNodes)
      {
        pays += continent.childNodes[j].nodeName == 'li' ? 1 : 0;
      }
    }
  }
}</code></pre>
<p>Un sélecteur par classe ne devrait être qu&#8217;un cas extrême, quand on ne peut se fier à une balise donnée. Car de manière générale, le <code>getElementsByTagName('*')</code> est à bannir. Charger tout le <acronym title="Document Object Model">DOM</acronym> est une folie furieuse.<br />
La bonne idée ici est l&#8217;utilisation du symbole <code>&gt;</code>. Cela se traduit par <code>.childNodes</code> et nous verrons plus bas pourquoi c&#8217;est mieux.</p>
<h3>Et maintenant, optimisons</h3>
<p>S&#8217;il fallait <strong>résumer l&#8217;optimisation en 3 points</strong>, voici ce que je donnerai :</p>
<ol>
<li>jamais de sélecteur vague</li>
<li>toujours un ID (#&lt;ID&gt;) en tête de sélecteur</li>
<li>utiliser au maximum les objets natifs (<code>firstChild</code>, <code>childNodes</code> etc.) : ils évitent d&#8217;interroger tout le <acronym title="Document Object Model">DOM</acronym></li>
</ol>
<p><strong>L&#8217;ennemi des sélecteurs <acronym title="Cascading Style Sheets">CSS</acronym> ce sont les boucles</strong>. Plus elles ont à brasser d&#8217;éléments, plus elles sont longues. <code>getElementsByTagName()</code> cache une boucle : JavaScript scanne tout le <acronym title="Document Object Model">DOM</acronym> pour trouver un nœud ayant un <code>tagName</code> correspondant.<br />
<strong>S&#8217;il faut l&#8217;utiliser, c&#8217;est en aval d&#8217;un sélecteur ayant déjà trié une bonne partie du document.</strong></p>
<p><strong>Votre meilleur ami est <code>getElementById()</code></strong>. Comme son nom l&#8217;indique il ne retourne qu&#8217;un seul élément et surtout, il est incroyablement rapide. Utilisez-le dans un maximum de cas mais attention tout de même : trop d&#8217;ID nuit à la structure du document le rendant ainsi trop rigide.<br />
Il en est de même du parcours des objets natifs des nœuds du <acronym title="Document Object Model">DOM</acronym>. Cela signifie que dès que vous changer la tête de votre <acronym title="HyperText Markup Language">HTML</acronym>, le JavaScript peut en pâtir.</p>
<p>Des fois <strong>il faudra faire quelques concessions de performances pour éviter de réécrire votre code</strong> au moindre changement &#8230; ou parce que la génération est dynamique et difficilement maîtrisable.</p>
<p>Grâce à ces informations, nous pouvons reprendre nos exemples mais de manière optimisée :</p>
<pre><code class="javascript">// Récupération du premier paragraphe
$('body p:first-child');
// version optimisée
$('#sandbox &gt; p:first');
// Récupération du nœud des continents
$('ul.continents');
// version optimisée
$('#geoliste');
// Récupération de la liste des capitales
$('.capitale');
// version optimisée (mais fortement liée à la structure du document)
$('#geoliste &gt; li &gt; ul ul &gt; li.capitale');
// Récupération du dernier élément du body
$('body :last');
// version optimisée
$('#sandbox :last');
// Compter le nombre de pays
$('.pays &gt; li').length;
// version optimisée (mais liée à la structure du document)
$('#geoliste &gt; li &gt; ul &gt; li').length;
</code></pre>
<h3>Évitons les doublons : chaînons !</h3>
<p>Les <acronym title="Cascading Style Sheets">CSS</acronym> c&#8217;est un peu fatiguant alors terminons sur une autre utilisation de jQuery parfois sous-employée à cause d&#8217;un manque de compréhension : les chaînes. jQuery renvoie des objets et permet de réutiliser/filtrer les résultats avec un seul sélecteur.</p>
<p>Voici un extrait de code largement optimisable :</p>
<pre><code class="javascript">$('#intro').addClass('jevaisdisparaitre');
$('#intro').append(' &lt;strong&gt;Je vais disparaître&lt;/strong&gt;.');
$('#intro code').html('Goodbye World');
$('#intro').css('cursor', 'pointer');
$('#intro').one('click', function(){ alert("Bye bye"); $(this).remove(); });
</code></pre>
<p>Tout est correct sauf qu&#8217;on répète plusieurs fois le même sélecteur au lieu d&#8217;utiliser la chaîne disponible. jQuery optimise la sélection d&#8217;un élément déjà sélectionné au préalable mais n&#8217;empêche, au lieu d&#8217;interroger 5 fois <code>#intro</code>, nous n&#8217;allons plus le faire qu&#8217;une seule fois :</p>
<pre><code class="javascript">$('#intro')
  .addClass('jevaisdisparaitre')
  .append(' &lt;strong&gt;Je vais disparaître&lt;/strong&gt;.')
  .one('click', function(){
    alert("Bye bye");
    $(this).remove();
  })
  .children('code')
  .html('Goodbye World');
</code></pre>
<p>Tout se suit jusqu&#8217;à la fonction <code>children()</code> qui modifie le sélecteur de départ et applique la suite de la chaîne à cette nouvelle sélection.<br />
Une autre optimisation consiste à déplacer la déclaration <acronym title="Cascading Style Sheets">CSS</acronym> <code>cursor</code> dans la classe <code>.jevaisdisparaitre</code> de l&#8217;hypothétique feuille de style. <strong>Essayez de dissocier au mieux fond et forme</strong> : ça évite <em>BEAUCOUP</em> de modifications de code pour des ajustements esthétiques.</p>
<h3>Conclusion</h3>
<p><strong>Optimiser ses sélecteurs n&#8217;est finalement pas si difficile que ça quand on comprend comment fonctionnent les rouages internes</strong>. Il est évident que les gains peuvent être minimes sur de petites pages. Il s&#8217;agit cependant d&#8217;une gymnastique à maîtriser : ce n&#8217;est pas en arrivant sur de gros volumes qu&#8217;il faudra apprendre à sélectionner proprement.</p>
<p>Et comme <q>les petites rivières font les grands fleuves</q>, ces petites économies pourraient vous sauver la vie sur des applications full-<acronym title="Asynchronous JavaScript and XML">AJAX</acronym> ou qui sait, quand vous travaillerez chez Netvibes <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2007/jquery-optimisation-selecteurs-css/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

