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

<channel>
	<title>Performance web &#8211; Delphine MALASSINGNE</title>
	<atom:link href="https://articles.nissone.com/veille/performance-web/feed/" rel="self" type="application/rss+xml" />
	<link>https://articles.nissone.com</link>
	<description></description>
	<lastBuildDate>Mon, 21 Oct 2013 11:48:59 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.1</generator>
	<item>
		<title>Atelier webperformance / Opquast, mes impressions</title>
		<link>https://articles.nissone.com/2012/02/atelier-webperformance-opquast-mes-impressions/</link>
					<comments>https://articles.nissone.com/2012/02/atelier-webperformance-opquast-mes-impressions/#respond</comments>
		
		<dc:creator><![CDATA[Delphine Malassingne]]></dc:creator>
		<pubDate>Fri, 17 Feb 2012 14:54:59 +0000</pubDate>
				<category><![CDATA[[Brève]]]></category>
		<category><![CDATA[Performance web]]></category>
		<category><![CDATA[Qualité web]]></category>
		<guid isPermaLink="false">http://articles.nissone.com/?p=1853</guid>

					<description><![CDATA[Quelques impressions sur l'animation de l'atelier Web Performance Paris du 13 février 2012.]]></description>
										<content:encoded><![CDATA[<p>J&rsquo;ai donc co-animé hier, avec Elie Sloïm, un <strong>atelier autour de la performance web visant à faire un référentiel des bonnes pratiques</strong> en la matière.</p>
<p>Se retrouver à présenter la méthodo <strong>Opquast</strong> (car oui, vous n&rsquo;êtes pas surpris, c&rsquo;était basé sur Opquast), c&rsquo;est aussi se rendre mieux compte de comment elle est cadrée et robuste.</p>
<p>Je ne reviens pas dessus, ici ; c&rsquo;est plutôt l&rsquo;objet du <a href="http://www.webperf-france.net/2012/02/resume-atelier-referentiel-bonnes-pratiques-performance-web/">résumé de la présentation</a> sur Webperformance France.</p>
<p>Par contre, je reviens sur l&rsquo;atelier. Sur cette partie là, j&rsquo;ai été autant la spectatrice que l&rsquo;animatrice. J&rsquo;ai vu les groupes se mettre au travail densément, en jouant le jeu du cadre à respecter (ou pas). Les niveaux au sein d&rsquo;un même groupe étaient inégaux, les profils différents. Cela contribuait d&rsquo;autant à la richesse des échanges.</p>
<p>J&rsquo;ai aussi vu (et retenu !) comment Élie s&rsquo;y prenait pour l&rsquo;animation de ce type d&rsquo;atelier. Les points de vigilance, quelle aide apporter comment aux groupes, etc.</p>
<p>Merci donc à tous pour votre participation.<br />
Ça a été une belle expérience pour moi d&rsquo;animer ce premier (ben oui, on peut rêver !) atelier.</p>
<figure id="attachment_2070" aria-describedby="caption-attachment-2070" style="width: 500px" class="wp-caption aligncenter"><img fetchpriority="high" decoding="async" class="size-full wp-image-2070" title="Photo Jean-François Renauld - Licence CC-by-NC" src="http://articles.nissone.com/wp-content/uploads/2012/02/soiree-webperf.jpg" alt="" width="500" height="152" srcset="https://articles.nissone.com/wp-content/uploads/2012/02/soiree-webperf.jpg 500w, https://articles.nissone.com/wp-content/uploads/2012/02/soiree-webperf-300x91.jpg 300w" sizes="(max-width: 500px) 100vw, 500px" /><figcaption id="caption-attachment-2070" class="wp-caption-text">J&#39;aime bien les regards croisés visibles grâce aux reflets sur cette photo. Pas vous ?</figcaption></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://articles.nissone.com/2012/02/atelier-webperformance-opquast-mes-impressions/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Retour sur le Webperf contest 2010</title>
		<link>https://articles.nissone.com/2012/01/retour-webperf-contest-2010/</link>
					<comments>https://articles.nissone.com/2012/01/retour-webperf-contest-2010/#respond</comments>
		
		<dc:creator><![CDATA[Delphine Malassingne]]></dc:creator>
		<pubDate>Sun, 22 Jan 2012 15:57:04 +0000</pubDate>
				<category><![CDATA[Performance web]]></category>
		<category><![CDATA[concours]]></category>
		<category><![CDATA[webperf contest]]></category>
		<category><![CDATA[webperfParis]]></category>
		<guid isPermaLink="false">http://articles.nissone.com/?p=1753</guid>

					<description><![CDATA[Compte-rendu de la soirée webperfParis du 16 janvier 2012. Comme pour les autres fois, il s'agit juste de mes notes - de débutante en performance - un peu retravaillées.]]></description>
										<content:encoded><![CDATA[<div class="zonePlus">Avant de commencer, rappel sur l&rsquo;organisation et les soirées à venir :<br />
Normalement, tous les 2ème lundi du mois.<br />
webperfParis est preneur de vidéos et de compte-rendus.Si vous avez des idées de sujets (à présenter ou à réclamer) faites un mail à Anthony.Prochaine soirée : 13 février &#8211; <strong>Atelier de mise en place d&rsquo;un référentiel de bonnes pratiques webperf</strong><br />
Delphine Malassingne (ben moi, quoi !) et Élie Sloïm.</p>
<p>Pour se tenir au courant :<br />
<a href="http://www.webperf-france.net/">www.webperf-france.net</a> et <a href="https://twitter.com/#!/webperfparis">@webperfParis</a></p>
<p>Jean-Pierre Vincent : « Merci à Anthony d&rsquo;avoir repris les soirées ».</p>
</div>
<p>Merci 20minutes pour l&rsquo;accueil (ce n&rsquo;est pas facile de trouver une salle, si vous avez des options, parlez-en à Anthony il sera content)</p>
<p>Trois parties :</p>
<ol>
<li>Organisation et présentation du concours par Vincent Voyer</li>
<li>Les techniques des participants à retenir par Jean-Pierre Vincent</li>
<li>Présentation de la participation du gagnant « start render et onload » par le gagnant en question, Cédric Morin</li>
</ol>
<p>Encore une fois, il s&rsquo;agit juste de notes. Les trois supports de présentation sont en ligne, le site du concours est disponibles et contient toutes les infos, les vidéos vont arriver.</p>
<p>Merci Vincent, Jean-Pierre et Cédric.</p>
<h3>1. Organisation et présentation du concours</h3>
<p>Vincent Voyer &#8211; @zeroload &#8211; <a href="http://fasterize.com/">http://fasterize.com/</a><br />
Jean-Pierre Vincent</p>
<p>Le concours : optimiser le site web d&rsquo;un client et classer les participants (lots grâce aux sponsors).<br />
octobre &#8211; novembre 2010<br />
Organisé par Eric Daspet, Jean-Pierre Vincent et Vincent Voyer.<br />
<a href="http://webperf-contest.com/">http://webperf-contest.com/</a></p>
<p>Il fallait un site web représentatif, à fort trafic et d&rsquo;accord pour donner son site comme exemple de mauvaise optimisation de la perf.<br />
La FNAC a accepté. Le site était intéressant parce qu&rsquo;un des très gros acteurs français + site avec beaucoup de pages et un historique ; le tout faisait qu&rsquo;il y avait matière à amélioration.</p>
<p>La page ciblée était la page enfants : <a href="http://www.fnac.com/enfants.asp">www.fnac.com/enfants.asp</a><br />
(NB : Les optimisations sorties du concours semblent ne pas avoir été implémentées)<br />
4&prime; avant le début de l&rsquo;affichage<br />
17&prime; avant images telles qu&rsquo;ont peut s&rsquo;y attendre dans un catalogue<br />
Freeze au démarrage pendant la première seconde</p>
<p>Jury : pas que les chiffres mais également le style, le respect de l&rsquo;utilisateur, etc.</p>
<p>50 participants qui devaient devaient suivre des <a href="http://webperf-contest.com/rules-fr.html">règles</a>.<br />
Et comme il n&rsquo;y a pas que les chiffres dans la vie, le « style » comptait aussi :</p>
<ul>
<li>rendu progressif du site</li>
<li>temps avant premier rendu significatif (= disponibilité de l&rsquo;interface)</li>
<li>faisabilité de l&rsquo;optimisation en environnement de production</li>
<li>réalisation des optimisations (lazyload ne se remarquant presque pas, SEO, accessibilité)</li>
<li>explications détaillées de la part du participant</li>
</ul>
<p>3 gagnants :</p>
<ul>
<li>Plus bas nombre de requêtes et poids de la page : Alexandrine Boissière</li>
<li>scrore YOTTAA : Gaël Métais<br />
(score calculé avec <a href="http://www.yottaa.com/" target="_blank">www.yottaa.com</a>)</li>
<li>Meilleur start render et onload : Cédric Morin</li>
</ul>
<p>Les 3 gagnants affichent les premiers éléments en dessous de 1,5 secondes et la totalité entre 3,5 et 5 secondes.<br />
<script type="text/javascript" src="http://speakerdeck.com/embed/4f15fa5c1f41c80022014014.js"></script></p>
<h3>2. Les techniques des participants à noter</h3>
<p>Jean-Pierre Vincent &#8211;</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1784" title="jean-pierre-vincent" src="http://articles.nissone.com/wp-content/uploads/2012/01/jean-pierre-vincent.jpg" alt="" width="425" height="286" srcset="https://articles.nissone.com/wp-content/uploads/2012/01/jean-pierre-vincent.jpg 425w, https://articles.nissone.com/wp-content/uploads/2012/01/jean-pierre-vincent-300x201.jpg 300w" sizes="(max-width: 425px) 100vw, 425px" /></p>
<p>&nbsp;</p>
<h4>LES TECHNIQUES DE BASES</h4>
<ul>
<li>Gestion du cache navigateur</li>
<li>Compression gzip</li>
<li>Cookie (uploadé lors des 115 requêtes)
<ul>
<li>sous-domaine pour statique</li>
<li>redéfinir le cookie sur www.*</li>
</ul>
</li>
<li>Images :
<ul>
<li>la page avant optimisation contenait 80 images pour 500k. Une optimisation raisonnable (avec une qualité correcte) donnait 250k.</li>
<li>png 8bit</li>
<li>Introduction du nombres de couleurs</li>
<li>Outils tels que jpgtran, pngcrush&#8230;</li>
</ul>
</li>
<li>Concaténer et minifier</li>
</ul>
<h4>LES TECHNIQUES DE LA MORT</h4>
<p>Limiter le nombre de requêtes HTTP</p>
<h5>CSS</h5>
<p>Difficile (et encore assez nouveau à l&rsquo;époque)</p>
<ul>
<li>minifié, concaténé / gzipé</li>
<li>nettoyage à la main (mais délicat dans un contexte d&rsquo;industrialisation) : 28 à 12 ko</li>
<li>certains ont réussi à charger le CSS après le lancement de la page : star render à 200ms &#8230;mais la page s&rsquo;affiche sans aucun style ! et le CSS était dépendant de JS.</li>
<li>CSS inline : 2-3 ko de CSS en inline pour le layout et le reste ensuite via JS (bon 1er rendu, pas de dépendance JS mais pas de cache)</li>
</ul>
<h5>JS</h5>
<p>Même gzipé cela faisait 60ko</p>
<p>Utilisation de &lt;script defer&gt; qui permet de charger de manière asynchrone et native le JS mais il y a du coup des corrections à faire à la main.</p>
<p>Paralléliser les téléchargements des JS : 70ms de gain mais il y a un pb de dépendances (souvent un des JS devaient attendre l&rsquo;autre pour s’exécuter)</p>
<p>Lazy-loading (= télécharger le + tard possible images et JS) :</p>
<ul>
<li>Certains ont fait des téléchargements « onmousemouve » : technique de la mort mais qui donne une expérience utilisateur très mauvaise et il y a une dépendance à JavaScript.</li>
<li>Avoir géré l&rsquo;absence de JS était donc un plus auprès du jury.</li>
<li>Le footer était affiché dans une iframe. La contrainte du concours était de garder cette iframe. Certains ont donc utiliser le lazy-load pour l&rsquo;iframe.</li>
<li>Le champ de recherche contenait de l&rsquo;auto-suggestion. Là aussi, certain ont utiliser lazy-load : le JavaScript n&rsquo;était appelé qu&rsquo;au moment où l&rsquo;internaute cliquait dans le champ.</li>
</ul>
<p>Encoder les img en base 64 : 0 requête, mais 30% de poids par image (5 à 10% après gzip), pas de cache HTML et CSS spécifique IE</p>
<p>Tout encoder &#8211; en une seule requête ! Immédiat en téléchargement mais plusieurs secondes de charge CPU (8 secondes pendant lesquelles on ne peut rien faire).</p>
<h4>DERNIÈRE ULTIME TECHNIQUE</h4>
<p>&#8230;Savoir coder !<br />
Ceux qui ont passé du temps à recoder le site y ont gagné beaucoup :<br />
avant : 2000 nœuds DOM / 213 ko<br />
après :  50% des nœuds / 50% du HTML<br />
&gt; ressenti utilisateur hyper optimisé</p>
<p>Certains ont repris le CSS :</p>
<ul>
<li>Reset CSS</li>
<li>Suppression des filter() (dégradation gracieuse acceptée par le jury)</li>
<li>Utilisation de :before (même si cible IE7)</li>
<li>Dégradé png transparent</li>
</ul>
<h4>CONCLUSION</h4>
<p>Le temps d&rsquo;affichage a été divisé par 10 entre la version initiale et celles des gagnants.<br />
Les techniques de base représentent 70% du gain.</p>
<p>Conclusion personnelle de Jean-Pierre :</p>
<ul>
<li>Les gagnants n&rsquo;étaient pas des pro de la perf web mais le temps passé a payé</li>
<li>Les bonnes pratiques de codage : ça paye aussi (en maintenance mais aussi en perf)</li>
<li>L&rsquo;époque des grandes découvertes est-elle finie ? Jean-Pierre a l&rsquo;impression que oui.</li>
</ul>
<p>Enfin :<br />
À quand le prochain concours ?! (sur le mobile ? comme critère du Summer Refresh d&rsquo;Alsacréations ?)</p>
<p>Voir :  <a href="http://braincracking.org/category/articles/performances/">braincracking.org/category/articles/performances/</a> : articles de JP Vincent suite au concours.</p>
<div id="__ss_11117653" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a title="Retours sur le concours Webperf 2010" href="http://www.slideshare.net/jpvincent/retours-sur-le-concours-webperf-2010" target="_blank">Retours sur le concours Webperf 2010</a></strong> <iframe loading="lazy" src="http://www.slideshare.net/slideshow/embed_code/11117653" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="425" height="355"></iframe></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/jpvincent" target="_blank">Jean-Pierre Vincent</a></div>
</div>
<h3>3. Présentation de la participation du gagnant « start render et onload »</h3>
<p>Cédric Morin &#8211; <a href="http://yterium.net/">yterium.net</a></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1785" title="cedric-morin" src="http://articles.nissone.com/wp-content/uploads/2012/01/cedric-morin.jpg" alt="" width="399" height="305" srcset="https://articles.nissone.com/wp-content/uploads/2012/01/cedric-morin.jpg 399w, https://articles.nissone.com/wp-content/uploads/2012/01/cedric-morin-300x229.jpg 300w" sizes="(max-width: 399px) 100vw, 399px" /></p>
<h4>.htacess</h4>
<ul>
<li>forcer la compression gzip (deflate) sur HTML, JS et CSS</li>
<li>forcer des expire lointains sur fichiers statiques</li>
</ul>
<h4>Images</h4>
<ul>
<li>optimisation</li>
<li>preloading en début de &lt;body&gt;</li>
<li>Sprites CSS (images qui ne portent pas d&rsquo;information, regroupement logique, injectée en image de fond CSS et optimisation du menu)</li>
<li>Carrousel et animation : affichage avec une première image statique légère avant déclenchement via JS</li>
</ul>
<h4>Chargement asynchrone des morceaux de page</h4>
<p>(paralléliser la construction de la page avec le chargement des ressources pour envoyer le HTML le plus vite possible)</p>
<ul>
<li>L&rsquo;accessibilité (et référencement !) a été gérée via un hack &lt;noscript&gt; qui redirige le visiteur vers une version assemblée côté serveur.</li>
</ul>
<h4>Lazy-loading</h4>
<ul>
<li>en envoyant les images sans attribut src</li>
<li>en prévoyant, là aussi, une alternative si n&rsquo;y a pas de JavaScript</li>
</ul>
<h4>CSS</h4>
<ul>
<li>découpage des déclaration en unités logiques fonctionnelles &gt; une feuille de style par unité logique</li>
<li>une seule CSS servie générée automatiquement et qui inclue uniquement les feuilles de style nécessaires</li>
<li>minification</li>
<li>remplacement d&rsquo;image par du CSS</li>
<li>attributs width et height renseignés pour toutes les images</li>
</ul>
<h4>JS</h4>
<ul>
<li>uniquement JS externes (un script par fonctionnalité)</li>
<li>concaténation des JS en un seul</li>
<li>minification</li>
<li>appel des JS en pied de page (mais contexte spécifique ici)</li>
<li>chargement en parallèle et asynchrone de deux fichiers JS</li>
<li>JS de l&rsquo;auto-complétion n&rsquo;est chargé qu&rsquo;au focus sur le champ</li>
</ul>
<h4>Requêtes JSON</h4>
<ul>
<li>une seule requête (éléments en argument, tableau de réponse, dispatching à la réception)</li>
</ul>
<h4>HTML</h4>
<ul>
<li>minification (espaces redondants et commentaires)</li>
<li>suppression de toute mise en page en tableau et utilisation d&rsquo;un layout</li>
<li>reprise du code du menu pour qu&rsquo;il soit lisible sans les images</li>
</ul>
<h4>Cookies</h4>
<ul>
<li>utilisation des sous-domaines au maximum pour images et CSS</li>
<li>JS, morceaux de page asynchrone, et JSON servis sur domaine principal</li>
</ul>
<p>Cédric explique ses choix, donne ses sources et des détails dans son article et dans son diaporama :</p>
<p>Tout a été versionné et est à disposition sur : <a href="https://github.com/Cerdic/webperf-contest-2010/">https://github.com/Cerdic/webperf-contest-2010/</a></p>
<p>(Certains des ) outils  cités :</p>
<ul>
<li>optimisation des image : ImageOptim</li>
<li>pour les sprites CSS : <a href="http://spriteme.org/">http://spriteme.org/</a></li>
<li>lazy-loading sur images : jquery.lazyload.js</li>
<li>génération d&rsquo;une CSS à partir de plusieurs : Sever Side Inclusion</li>
<li>Minification de CSS : CSS Tidy</li>
<li>Concaténation des JS : Server Side Inclusion</li>
<li>Minification des JS : Google Closure Compiler &#8211; <a href="http://closure-compiler.appspot.com/home">http://closure-compiler.appspot.com/home</a></li>
<li>Chargement parallèle et asynchrone de JS : <a href="https://github.com/Cedric/jQl">https://github.com/Cerdic/jQl</a></li>
<li>Layout pour avoir le contenu HTML en premier : LayoutGala &#8211; <a href="http://blog.html.it/layoutgala/">http://blog.html.it/layoutgala/</a></li>
</ul>
<div id="__ss_11115750" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a title="Ma participation au WebPerf Contest 2010" href="http://www.slideshare.net/Yterium/participation-au-webperf-contest-2010" target="_blank">Ma participation au WebPerf Contest 2010</a></strong> <iframe loading="lazy" src="http://www.slideshare.net/slideshow/embed_code/11115750" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="425" height="355"></iframe></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/Yterium" target="_blank">Cédric MORIN</a></div>
</div>
<div class="zonePlus">
Crédit photo et photos de la soirée : <a href="http://www.flickr.com/photos/prelude666/sets/72157628923118013/">Prélude &#8211; Webperf janvier 2012</a>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://articles.nissone.com/2012/01/retour-webperf-contest-2010/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Le fonctionnement d&#8217;un navigateur &#124; Soirée performance web</title>
		<link>https://articles.nissone.com/2011/12/fonctionnement-navigateur-soiree-performance-web/</link>
					<comments>https://articles.nissone.com/2011/12/fonctionnement-navigateur-soiree-performance-web/#comments</comments>
		
		<dc:creator><![CDATA[Delphine Malassingne]]></dc:creator>
		<pubDate>Sat, 17 Dec 2011 17:59:35 +0000</pubDate>
				<category><![CDATA[[Compte-rendu]]]></category>
		<category><![CDATA[Performance web]]></category>
		<guid isPermaLink="false">http://articles.nissone.com/?p=1727</guid>

					<description><![CDATA[Compte-rendu de la présentation d'Anthony Ricaud sur le fonctionnement d'un navigateur, ici présentée dans le cadre de la soirée #webperfParis de décembre.]]></description>
										<content:encoded><![CDATA[<p>Bon, ça vaut c&rsquo;que ça vaut, mais voici mes notes de la soirée webperf de mardi dernier.<br />
Comme pour la dernière fois (<a href="http://articles.nissone.com/2011/05/atelier-performance-web-avril-2011-compte-rendu/">Atelier sur la performance web du 21 avril 2011 – Compte-rendu</a>), j&rsquo;ai noté ce que j&rsquo;ai pu et ce que j&rsquo;ai compris.</p>
<h2>Un navigateur, comment ça marche&nbsp;?</h2>
<p><strong>&gt; comprendre le navigateur pour aider à faire des choix.</strong><br />
<strong>Anthony Ricaud</strong></p>
<div class="zonePlus"><a href="http://www.slideshare.net/haricot/un-navigateur-comment-a-marche">Diaporama</a></div>
<h3>Introduction</h3>
<p>Cette présentation n&rsquo;a, initialement, pas été faite dans le contexte de la performance web. Elle permet de comprendre ce qu&rsquo;un navigateur fait lors d&rsquo;une requête (et cela inclue les temps d&rsquo;attente et de traitement.)</p>
<p>D&rsquo;un point de vue optimisation de la performance, les éléments présentés ci-dessous sont souvent minimes.</p>
<p>Voir les liens qui ont permis à Anthony de préparer sa présentation : <a href="http://blogmarks.net/user/rik/marks/tag/navigateur-marche">Blogmarks &gt; Marks de Rik lié au tag « navigateur-marche »</a>.</p>
<p>Le navigateur a énormément de choses à traiter (parser les URL, rendu des polices, s&rsquo;adapter aux OS, téléchargement, etc.)<br />
Ici, on va voir ce qu&rsquo;il se passe depuis la requête (clic sur un lien ou barre d&rsquo;adresse) jusqu&rsquo;au chargement de la page.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1738" title="anthony" src="http://articles.nissone.com/wp-content/uploads/2011/12/anthony.jpg" alt="anthony" width="250" height="208" /></p>
<h3>La requête et la réponse</h3>
<p>La requête est envoyée. Nous sommes ici dans le cas où tout se passe bien. Le navigateur lit alors les premières lignes du html pour choisir le mode qu&rsquo;il va appliquer pour interpréter la page.<br />
Il y a trois modes possibles : xml, quirks et standard.</p>
<h4>Avec « Content-Type: application/xhtml+xml » &gt; Mode XML</h4>
<p>Il est très peu utilisé parce que IE ne le supportait pas jusqu&rsquo;à la version 9 et parce qu&rsquo;en cas d&rsquo;erreur : ça se voit<br />
Pas de pb de performance par contre.<br />
=&gt; Tous les navigateurs sauf IE 7 et 8</p>
<h4>Avec « Content-Type: text/html » &gt; Mode Quirks</h4>
<p>Modifie le box model (celui du W3C ou celui d&rsquo;IE)<br />
=&gt; Tous les navigateurs</p>
<h4>Avec un doctype &gt; Mode Standard</h4>
<p>Considère le doctype comme un indice, au moment où ça a été créé, de la qualité du code.<br />
=&gt; Tous les navigateurs</p>
<p>Les navigateurs se fichent des versions de spécifications (HTML5, HTML4, XHTML1.0, CSS3, etc.)</p>
<p>Conseil aux intégrateurs : d&rsquo;un point de vue pragmatique, il vaut mieux se référer à ce qui est implémenté et fonctionne plutôt qu&rsquo;aux specifications qui ne sont pas toujours à jour.</p>
<h3>Le DOM</h3>
<p>= la compréhension qu&rsquo;a le navigateur du HTML qu&rsquo;il stocke en mémoire<br />
C&rsquo;est le DOM qui est manipulé par JS.<br />
Il est composé de nœuds éléments et de nœuds texte.</p>
<p>NB :<br />
Même si espaces et retours à la ligne créent des nœuds texte vides, il n&rsquo;est pas préconisé de minifier le HTML : le gain serait négligeable alors que parallèlement, il y aurait des problèmes de rendu à gérer.</p>
<p>Le HTML sera identique dans tous les navigateurs à partir de IE9/10. C&rsquo;est-à-dire, par exemple que l&rsquo;erreur &lt;p&gt;&lt;strong&gt;&lt;/p&gt;&lt;/strong&gt; sera interprétée de la même manière par tous les navigateurs.</p>
<h3>Les sous-ressources</h3>
<p>Pendant que le navigateur récupère le HTML, il va chercher les sous-ressources (images, les CSS, JS).</p>
<h4>Les images</h4>
<p>C&rsquo;est non-bloquant, le téléchargement continue.<br />
Le décodeur (le machin qui traite les images) n&rsquo;a pas non plus d&rsquo;impact sur le temps de traitement car il compose l&rsquo;image de son côté et l&rsquo;envoie quand elle est prête.</p>
<h4>Le CSS</h4>
<p>C&rsquo;est non-bloquant, le téléchargement continue.</p>
<h5>CSS Buckets</h5>
<p>Le navigateur ne prend que les sélecteurs et les place dans des « seaux » (hashtable) :</p>
<ul>
<li>id : #sidebar ; div#sidebar pour une raison de spécificité</li>
<li>class : .item</li>
<li>tagname : div</li>
<li>autres : :visited</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1737" title="cssbuckets" src="http://articles.nissone.com/wp-content/uploads/2011/12/cssbuckets.jpg" alt="cssbuckets" width="250" height="168" /></p>
<p>Dès qu&rsquo;il y a un <strong>combinateur </strong>de sélecteurs( espace , « ~ », « &gt; » et « + »), c&rsquo;est celui qui est le + à droite qui l&#8217;emporte</p>
<p>Les sélecteurs dans Autres vont ralentir la performance.</p>
<h5>CSS maching</h5>
<p>Les navigateurs prennent tous les nœuds et vont chercher les règles CSS qui leurs correspondent.</p>
<p>div#sidebar et #sidebar sont dans le même seau mais div#sidebar oblige à une vérification de plus.<br />
Dragonfly sort un profiler de CSS qui va permettre de voir les performances de chaque sélecteur (beta). En effet, sur la performance de sélecteur, il y a beaucoup de  cas particulier. (un outil du même type est en préparation chez Webkit)</p>
<ul>
<li>div p : on ira pas chercher « div »</li>
<li>ul p : il faudra vérifier tous les parents avant de passer à la suite</li>
<li>ul &gt; p : il n&rsquo;y a qu&rsquo;un parent à remonter</li>
<li>body &gt; div p : il a dû monter et descendre beaucoup de fois pour établir la règle</li>
</ul>
<p>Là encore, à moins d&rsquo;avoir un très grand DOM ET un très grand nombre de sélecteurs, tout ça est négligeable en matière d&rsquo;optimisation de la performance. S&rsquo;il n&rsquo;y avait que deux choses à avoir en tête :</p>
<ul>
<li>Plus un sélecteur est court, plus il est rapide à analyser.</li>
<li>Essayer d&rsquo;avoir le moins possible de sélecteur dans « Autres »</li>
</ul>
<p>(webkit stocke + d&rsquo;informations sur le DOM pour pouvoir descendre et remonter dans les noeuds plus vite ensuite)</p>
<h4>Render Tree</h4>
<p>Les images et le CSS ayant été traités, le « render tree » peut être fabriqué.</p>
<h5>Reflow ou layout (selon les navigateurs)</h5>
<p>A moins d&rsquo;un timeout ou d&rsquo;un JS qui demande une position, le reflow n&rsquo;est lancé qu&rsquo;une fois que toutes les CSS ont été chargées.</p>
<p>Chaque bloc est placé dans la page selon sa position et sa taille.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1739" title="reflow" src="http://articles.nissone.com/wp-content/uploads/2011/12/reflow.jpg" alt="reflow" width="250" height="170" /></p>
<p>&gt; Voir la <a href="http://www.youtube.com/watch?v=dndeRnzkJDU">vidéo sur Wikipédia Japon qui montre le reflow</a><br />
On voit dans la vidéo qu&rsquo;il commence par le centre, fait le côté et, à la fin &#8230;recommence : car il se rend compte en bas de colonne de gauche qu&rsquo;il n&rsquo;a pas assez de place en hauteur et qu&rsquo;il doit donc ajouter un ascenseur à droite. Il recalcule alors les largeurs en fonction.</p>
<p>NB : Sur IE, la scrollbar est mise d&rsquo;office.</p>
<blockquote class="citTwitter"><p>A ce propos, <a class="external external_icon" href="https://twitter.com/#!/zeroload/status/147434660924895234">Vincent Voyer</a><br />
propose une astuce : « Forcer la barre de défilement et empêcher un reflow au chargement : body{overflow-y: scroll;} »</p></blockquote>
<p>NB : Chrome et Safari ont des outils géniaux pour se faire une idée également de ce qui se passe pour l&rsquo;affichage de la page. Voir aussi Firefox Affiliates.</p>
<p>Le reflow est donc une étape relativement longue (compte-tenu de notre échelle). On peut donc garder en tête de veiller à ne pas générer de reflow inutiles.</p>
<p>Les 2 cas fréquents qui déclenchent le reflow alors que cela pourrait être facilement évité :</p>
<ul>
<li>images dans le code HTML sans width / height</li>
<li>l&rsquo;insertion des Flash avec des librairies JS comme swfobject</li>
</ul>
<h5>Painting</h5>
<p>= la vue de ce qui est affiché à l&rsquo;écran</p>
<p>Avant, c&rsquo;était le processeur qui dessinait tout. De ++ c&rsquo;est le GPU (Processeur Graphique) (+ puissant pour ces tâches (dont les transformations pour certains navigateurs)</p>
<h3>Le JS</h3>
<p>Rappel : c&rsquo;est bloquant (= le parseur s&rsquo;arrête et télécharge, interprète et exécute le JS avant de continuer)<br />
Depuis deux, trois ans, un parseur secondaire va chercher en parallèle les URL (pour gagner un peu de temps) mais pas plus</p>
<p>Il  y a des opérations JS hyper rapide. par contre, les éléments entres JS et DOM prennent forcément du temps.<br />
Le DOM c&rsquo;est lent.<br />
Si on demande des dimensions, on déclenche le reflow : faire toutes les demandes de lecture au début et ensuite seulement toutes les écritures.</p>
<p>EX : si on change couleur ou opacité, par exemple, pas de reflow déclenché</p>
<p>Display none libère de la mémoire mais est plus long à remettre en place.<br />
Visibilty hidden : ne libère pas de mémoire mais est ré-affiché plus vite.</p>
<div class="zonePlus">Les soirées webperfParis se réorganisent &#8230;Lorgnez du côté de <a href="https://sites.google.com/a/survol.fr/webperf-user-group/">https://sites.google.com/a/survol.fr/webperf-user-group/</a> pour être tenu au courant.</div>
<div class="zonePlus">Photo : <a href="http://www.flickr.com/photos/prelude666/sets/72157628412602249/">Prélude</a></div>
]]></content:encoded>
					
					<wfw:commentRss>https://articles.nissone.com/2011/12/fonctionnement-navigateur-soiree-performance-web/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
			</item>
		<item>
		<title>Atelier sur la performance web du 21 avril 2011 &#8211; Compte-rendu</title>
		<link>https://articles.nissone.com/2011/05/atelier-performance-web-avril-2011-compte-rendu/</link>
					<comments>https://articles.nissone.com/2011/05/atelier-performance-web-avril-2011-compte-rendu/#comments</comments>
		
		<dc:creator><![CDATA[Delphine Malassingne]]></dc:creator>
		<pubDate>Wed, 04 May 2011 14:44:17 +0000</pubDate>
				<category><![CDATA[[Compte-rendu]]]></category>
		<category><![CDATA[Performance web]]></category>
		<category><![CDATA[webperfParis]]></category>
		<guid isPermaLink="false">http://articles.nissone.com/?p=1541</guid>

					<description><![CDATA[Compte-rendu de l'atelier sur la web performance, organisé par webperf_fr. Échange d'idées, d'optimisations, d'outils sur des cas concrets de sites audités pendant l'atelier.]]></description>
										<content:encoded><![CDATA[<p>Chers débutants en web performance, j&rsquo;ai testé pour vous l&rsquo;atelier <strong>#webperf</strong>. Cela se passait le 21 avril, dans les locaux d&rsquo;Octo, à Paris. Le but de la soirée était d&rsquo;échanger autour de différents sites web et de proposer de quoi améliorer leur performance.<br />
Il y avait du haut niveau dans la salle et j&rsquo;ai donc eu l&rsquo;occasion de saisir plein de mots, plein de notions à aller explorer.<br />
Voici donc un petit « en vrac » de cette soirée.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1559" title="_MG_7166" src="http://articles.nissone.com/wp-content/uploads/2011/05/MG_7166.jpg" alt="_MG_7166" width="600" height="264" srcset="https://articles.nissone.com/wp-content/uploads/2011/05/MG_7166.jpg 600w, https://articles.nissone.com/wp-content/uploads/2011/05/MG_7166-300x132.jpg 300w" sizes="(max-width: 600px) 100vw, 600px" /></p>
<h3>Les outils</h3>
<p>Voici une liste des outils qui ont été cités à l&rsquo;occasion de cette soirée.</p>
<h4>WebPageTest.org</h4>
<p><a href="http://www.webpagetest.org/">www.webpagetest.org</a></p>
<p>Ancien <strong>AOL Page Test</strong> (qui lui permet de tester en local)<br />
Je connais WebPageTest depuis quelques temps. Outre qu&rsquo;il permet de simuler des tests de connexion en affinant les paramètres, il génère aussi des copies d&rsquo;écran permettant de voir ce que l&rsquo;internaute voit pendant le chargement. Voilà qui m&rsquo;intéresse beaucoup.</p>
<h4>Firebug</h4>
<p><a href="http://getfirebug.com/">http://getfirebug.com/</a></p>
<h4>Speed Tracer (sous Chrome)</h4>
<p><a href="http://code.google.com/intl/fr/webtoolkit/speedtracer/">http://code.google.com/intl/fr/webtoolkit/speedtracer/</a></p>
<p>Speed Tracer à l&rsquo;avantage de renseigner aussi <strong>l’exécution du JavaScript</strong> (et pas seulement son chargement)</p>
<h4>YSlow</h4>
<p><a href="http://developer.yahoo.com/yslow/">http://developer.yahoo.com/yslow/</a></p>
<h4>Google Page Speed</h4>
<p><a href="http://code.google.com/intl/fr/speed/page-speed/">http://code.google.com/intl/fr/speed/page-speed/</a></p>
<h4>DOM Monster</h4>
<p><a href="http://mir.aculo.us/dom-monster/">http://mir.aculo.us/dom-monster/</a></p>
<p>DOM Monster est un « bookmarklet » qui permet d&rsquo;avoir de nombreuses<strong> informations sur le DOM et son chargement</strong>.</p>
<h4>Dyna Trace</h4>
<p>Dyna Trace permet de faire, sur IE et Firefox, du <strong>profiling </strong>JavaScript.</p>
<h4>Mobitest7</h4>
<p><a href="http://www.blaze.io/mobile/">http://www.blaze.io/mobile/</a></p>
<h4>509inc.com</h4>
<p><a href="http://509inc.com/">http://509inc.com/</a></p>
<p>(en beta pour l&rsquo;instant &#8211; Androïd uniquement)</p>
<p>A noter également :<br />
<strong>Akamaï </strong>donne régulièrement des statistiques par pays sur les connexions (à voir s&rsquo;il s&rsquo;agit de moyennes ou de médianes)</p>
<p><a href="http://www.akamai.fr/enfr/stateoftheinternet/">http://www.akamai.fr/enfr/stateoftheinternet/</a></p>
<p>Et bien sûr, le <strong>code source</strong> de la page (où j&rsquo;ai pu trouver, moi aussi, une petite opti à faire, ouaiii !)</p>
<h3>Les conseils à la volée</h3>
<p>Les conseils ci-dessous ne représentent ni la totalité des optimisations à faire sur un site, ni la totalité de ce qui a été dit à la soirée WebPerf. Il s&rsquo;agit de ce que j&rsquo;ai réussi à noter et à (plus ou moins) comprendre.<br />
De plus, chacun de ces conseils a été donné dans le contexte d&rsquo;un site. Comme toujours, il ne s&rsquo;agit pas de préconisation à appliquer à la lettre, mais ce sont des pistes à valider en fonction de chaque cas.</p>
<h3>Images</h3>
<ul>
<li>Utiliser, à bon escient toujours, la technique des « <strong>sprites CSS</strong> »<br />
<a href="http://www.pompage.net/pompe/sprites/">http://www.pompage.net/pompe/sprites/</a><br />
<a href="http://www.alsacreations.com/tuto/lire/1068‐sprites‐css‐background‐position.html">http://www.alsacreations.com/tuto/lire/1068‐sprites‐css‐background‐position.html</a></li>
<li>Prévoir un script pour <strong>charger d&rsquo;abord les images du haut de page</strong> avant celles du bas de page (mais bien faire attention aux autres impacts notamment pour les mobiles)</li>
<li>Indiquer la <strong>taille des images</strong> dans le code HTML</li>
<li>Ne pas hésiter à mettre les<strong> vignettes en PNG</strong>, et même en PNG-8 car, dans une taille réduite, il n&rsquo;y aura pas de perte visuelle.</li>
</ul>
<h4>CSS</h4>
<ul>
<li>Ne pas séparer une CSS qui est appelée à chaque fois.</li>
<li>Servir les CSS plutôt sur le<strong> même domaine que le HTML</strong></li>
<li>La CSS pour l&rsquo;impression n&rsquo;est pas utile dès le début.<strong> La télécharger, via un JS, à la fin</strong> (ou la concaténée avec une autre si elle est légère)</li>
<li>Se poser la question de <strong>la nécessité d&rsquo;une CSS spécifique pour IE 7</strong>. IE 7 étant le navigateur le plus lent de tous, autant ne pas le charger en plus.</li>
<li>Dès qu&rsquo;on utilise des commentaires conditionnels, insérer un <strong>commentaire conditionnel vide tout en haut</strong>. En effet, l&rsquo;appel à commentaire conditionnel bloque 100ms.</li>
</ul>
<h4>CSS et JavaScript</h4>
<ul>
<li>Mettre CSS et JS en cache</li>
<li>Ajuster la durée de vie des CSS et des JS générés</li>
</ul>
<h4>HTML</h4>
<ul>
<li>Limiter le plus possible les styles en ligne et les « document.write »</li>
</ul>
<h4>Marqueurs d’audience</h4>
<ul>
<li>Réduire la taille de Google Analytics (une astuce permettrait de <strong>réduire le code asynchrone</strong> ; même si les différences seraient faibles selon certains tests, ça vaut toujours le coup). L&rsquo;asynchone peut être mis en haut de page.</li>
</ul>
<h4>Serveur</h4>
<ul>
<li>Utiliser un serveur type <strong>Nginx </strong>ou <strong>LightHTTPD </strong>pour traiter les<strong> demandes statiques </strong>et un serveur type <strong>Apache </strong>ou <strong>TomCat </strong>qui lui, enverrai les <strong>éléments dynamiques</strong>.</li>
<li>Utiliser la méthode de « DNS prefetching »<br />
<a href="https://developer.mozilla.org/En/Controlling_DNS_prefetching">https://developer.mozilla.org/En/Controlling_DNS_prefetching</a><br />
<a href="http://performance.survol.fr/2009/06/dns‐prefetch/">http://performance.survol.fr/2009/06/dns‐prefetch/</a></li>
</ul>
<h4>Autres</h4>
<ul>
<li>Fusionner les multiples fichiers CSS et les multiples fichiers JS</li>
<li>Utiliser <strong>gZip </strong>qui peut gagner jusqu&rsquo;à 90% de la taille d&rsquo;un fichier</li>
<li>Différer les chargements qui peuvent l&rsquo;être</li>
<li>Utiliser la technique du « <strong>flush</strong> » : envoyer par paquet : dès que x Ko sont prêts, les envoyer et ainsi de suite. Attention à l&rsquo;affichage qui peut alors paraître chaotique à l&rsquo;internaute.<br />
<a href="http://www.stevesouders.com/blog/2009/05/18/flushing‐the‐document‐early/">http://www.stevesouders.com/blog/2009/05/18/flushing‐the‐document‐early/</a></li>
<li>Utiliser les <strong>eTags </strong>dans la mesure où ils ne font pas redondance avec le cache.<br />
<a href="http://performance.survol.fr/2008/06/desactiver‐les‐etags/">http://performance.survol.fr/2008/06/desactiver‐les‐etags/</a><br />
<a href="http://en.wikipedia.org/wiki/HTTP_ETag">http://en.wikipedia.org/wiki/HTTP_ETag</a></li>
<li>Faire du <strong>domaine sharding </strong>(utiliser un sous‐domaine pour les images, par exemple, pour multiplier ainsi le nombre de téléchargement simultané par deux)</li>
</ul>
<p>Je rappelle donc que ces conseils ne sont pas des vérités absolues mais bien des pistes à revoir en fonction du contexte.</p>
<div class="zonePlus">Pour se tenir informé des prochains événements <strong>webperf_fr</strong> :<br />
<a href="https://sites.google.com/a/survol.fr/webperf‐user‐group/">https://sites.google.com/a/survol.fr/webperf‐user‐group/</a> (flux RSS disponible)<br />
<a href="https://twitter.com/#!/webperf_fr">https://twitter.com/#!/webperf_fr</a></div>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-1563" title="_MG_7165" src="http://articles.nissone.com/wp-content/uploads/2011/05/MG_7165.jpg" alt="_MG_7165" width="600" height="248" srcset="https://articles.nissone.com/wp-content/uploads/2011/05/MG_7165.jpg 600w, https://articles.nissone.com/wp-content/uploads/2011/05/MG_7165-300x124.jpg 300w" sizes="(max-width: 600px) 100vw, 600px" /><br />
Merci <a href="http://www.prelude.me/">www.prelude.me</a> pour les photos (et les réponses, ci-dessous, aux questions auxquelles je ne savais pas répondre !)</p>
]]></content:encoded>
					
					<wfw:commentRss>https://articles.nissone.com/2011/05/atelier-performance-web-avril-2011-compte-rendu/feed/</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
			</item>
	</channel>
</rss>
