<?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>webperf contest &#8211; Delphine MALASSINGNE</title>
	<atom:link href="https://articles.nissone.com/tag/webperf-contest/feed/" rel="self" type="application/rss+xml" />
	<link>https://articles.nissone.com</link>
	<description></description>
	<lastBuildDate>Sun, 29 Jan 2012 15:59:28 +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>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 fetchpriority="high" 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>
	</channel>
</rss>
