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

<channel>
	<title>Performance web &#187; velocity</title>
	<atom:link href="http://performance.survol.fr/avec/velocity/feed/" rel="self" type="application/rss+xml" />
	<link>http://performance.survol.fr</link>
	<description>Quelques mots pour des sites web rapides</description>
	<lastBuildDate>Fri, 18 Jun 2010 12:47:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Velocity, les armes secrètes d&#8217;AOL</title>
		<link>http://performance.survol.fr/2009/08/velocity-aol/</link>
		<comments>http://performance.survol.fr/2009/08/velocity-aol/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 10:00:03 +0000</pubDate>
		<dc:creator>Éric</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[AOL]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[Dave Artz]]></category>
		<category><![CDATA[jsmin]]></category>
		<category><![CDATA[middims]]></category>
		<category><![CDATA[modjsmin]]></category>
		<category><![CDATA[mod_concat]]></category>
		<category><![CDATA[publicité]]></category>
		<category><![CDATA[sonar]]></category>
		<category><![CDATA[velocity]]></category>

		<guid isPermaLink="false">http://performance.survol.fr/?p=707</guid>
		<description><![CDATA[Toujours aux conferences Velocity de juin dernier, Dave Artz d&#8217;AOL mérite un billet propre. Je regrette de ne pas en avoir trouvé la vidéo au milieu des autres vidéos Velocity. Modules apache La présentation débute par des liens vers quelques &#8230; <a href="http://performance.survol.fr/2009/08/velocity-aol/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Toujours <a href="http://performance.survol.fr/avec/velocity/">aux conferences Velocity</a> de juin dernier, <a href="http://en.oreilly.com/velocity2009/public/schedule/detail/7611">Dave Artz</a> d&#8217;AOL mérite un billet propre. Je regrette de ne pas en avoir trouvé la vidéo au milieu des autres <a href="http://velocityconference.blip.tv/?sort=date;date=;view=archive;user=velocityconference;nsfw=dc;s=posts;page=1">vidéos Velocity</a>.<span id="more-707"></span></p>
<h3>Modules apache</h3>
<p>La présentation débute par des liens vers quelques modules Apache pour automatiser les tâches que je recommande ici régulièrement : concaténation, minimisation, retravail des images.</p>
<p>Pour la concaténation des javascript et css il propose <a href="http://code.google.com/p/modconcat/">mod_concat</a> dont j&#8217;avais <a href="http://performance.survol.fr/2009/03/encore-des-outils/">brièvement parlé en mars</a>. Il s&#8217;agit simplement d&#8217;automatiser le processus de concaténation des fichiers javascript et css via un module Apache. Les entêtes de cache utilisées sont celles du fichier le plus récent, vous n&#8217;avez rien à gérer, il suffit d&#8217;ajouter les noms de fichiers souhaités dans l&#8217;URL.</p>
<p>Pour la minimisation nous propose <a href="http://code.google.com/p/modjsmin/">modjsmin</a>, qui est simplement le script de minimisation de Douglas crockford transformé en filtre Apache. Côté images il y a c&#8217;est <a href="http://code.google.com/p/moddims/">moddims</a> qui redimensionne et découpe les images à la demande avec Image Magick. Si vous vous devez d&#8217;utiliser des solutions dynamiques alors ce sont probablement des liens à suivre, mais je continue à penser qu&#8217;il vaut mieux traiter ça hors ligne à la publication et pas sur le serveur web.</p>
<h3>Les publicités</h3>
<p>La seconde partie de la présentation est plus intéressante. Notamment Dave donne sa solution pour le problème persistant de tout intégrateur web : les publicités lentes et bloquantes. Il propose ici de les <a href="http://www.artzstudio.com/files/fif-demo/">charger dans une iframe</a> de façons à ce que le contenu de la page générale continue de se charger, puis récupère le DOM et les styles pour les regreffer dans le document principal (ce qui est obligatoire si votre publicité risque d&#8217;interagir avec le reste de la page). En pratique il y a quelques écueils quand j&#8217;avais essayé, tout dépend donc de ce que vous faites tourner en publicité.</p>
<h3>Chargement à la demande</h3>
<p>Dave a aussi mis au point un mécanisme que j&#8217;aime beaucoup. Il s&#8217;agit d&#8217;exploiter la différence entre la mesure brute de la performance et le ressenti de performance. L&#8217;utilisateur n&#8217;a pas besoin d&#8217;une page qui se charge vite, il a besoin d&#8217;une page qui charge vite ce qu&#8217;il a sous les yeux. Seuls 20 % des utilisateurs lisant jusqu&#8217;à la fin de la page, il est envisageable de ne charger les composants du bas de page qu&#8217;à la demande, quand l&#8217;utilisateur passe au dessus. Dave a donc fait un petit outil appelé <a href="http://www.artzstudio.com/files/sonar/">Sonar</a> pour détecter quand charger quel élément, et faire les ajouts/requêtes nécessaires.</p>
]]></content:encoded>
			<wfw:commentRss>http://performance.survol.fr/2009/08/velocity-aol/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Velocity, publicité, reflow, CDN, ajax et gzip</title>
		<link>http://performance.survol.fr/2009/08/velocity-quelques-conferences/</link>
		<comments>http://performance.survol.fr/2009/08/velocity-quelques-conferences/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 10:00:20 +0000</pubDate>
		<dc:creator>Éric</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[cdn]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[gzip]]></category>
		<category><![CDATA[Mike Brittain]]></category>
		<category><![CDATA[moddim]]></category>
		<category><![CDATA[publicités]]></category>
		<category><![CDATA[reflow]]></category>
		<category><![CDATA[statistiques]]></category>
		<category><![CDATA[Tony Gentilcore]]></category>
		<category><![CDATA[velocity]]></category>

		<guid isPermaLink="false">http://performance.survol.fr/?p=698</guid>
		<description><![CDATA[Je poursuis la lecture des vidéos et des présentations des conférences Velocity de juin dernier. Au delà de Gzip La première chose à activer sur les serveurs c&#8217;est gzip. Il s&#8217;agit de compresser tous les contenus texte en provenance du &#8230; <a href="http://performance.survol.fr/2009/08/velocity-quelques-conferences/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Je <a href="http://performance.survol.fr/avec/velocity/">poursuis</a> la lecture <a href="http://en.oreilly.com/velocity2009/public/schedule/proceedings">des vidéos et des présentations des conférences Velocity</a> de juin dernier.<span id="more-698"></span></p>
<h3>Au delà de Gzip</h3>
<p>La première chose à activer sur les serveurs c&#8217;est gzip. Il s&#8217;agit de compresser tous les contenus texte en provenance du serveur avant de les faire transiter par le réseau. Si vous ne l&#8217;avez pas fait, activez gzip sur votre serveur web ! <a href="http://en.oreilly.com/velocity2009/public/schedule/detail/9072">Tony Gentilcore nous parle de 70% de gain</a> en volume de téléchargement. De mon expérience ça donne un peu plus mais même à 70 % c&#8217;est indispensable.</p>
<p>Là où Tony amène une information nouvelle, c&#8217;est que 15 % des clients ne déclarent pas supporter gzip, hors robots. Il blâme les mauvais proxys et les outils de sécurité privés comme Norton Internet Security, Zone Alarm, McAfee Internet Security, etc. Ces outils sont généralement des plaies, et pas que côté performance, et voilà qu&#8217;ils s&#8217;autorisent à modifier les entêtes HTTP envoyées par le navigateur. Bref, c&#8217;est 15 % des visiteurs qui auront une page non compressée et il va falloir trouver une solution.</p>
<p>Il propose donc de tenter de détecter le support gzip réel du navigateur via une iframe. Le contenu de l&#8217;iframe est envoyé zippé, quoi que déclare le navigateur. Si le navigateur décode le contenu, on lui pose un cookie pour retenir qu&#8217;il faut lui envoyer le contenu zippé malgré l&#8217;absence de l&#8217;entête HTTP appropriée.</p>
<p>J&#8217;aime bien l&#8217;idée de l&#8217;autodétection mais attention à ne la mettre en oeuvre que pour ces 15 % de clients mal configurés. Hors de question d&#8217;imposer une iframe aux autres.</p>
<h3>Ajax à Facebook</h3>
<p>La seconde présentation dont je voulais vous parler c&#8217;est celle de Facebook. Malheureusement, après avoir tenté plusieurs angles d&#8217;approche, je me rend compte que je suis incapable de vous en faire un résumé. Le plus simple est donc de vous laisser aller voir <a href="http://en.oreilly.com/velocity2009/public/schedule/detail/7611">les fichiers</a> ou <a href="http://velocityconference.blip.tv/file/2293221/">la vidéo</a> de la présentation. Ils présentent leur démarche pour améliorer les performances, et plus spécifiquement comment ils sont passés à un modèle pur Ajax pour la navigation (le conteneur HTML reste, le contenu est chargé via Ajax).</p>
<p>Je fais l&#8217;impasse sur la moitié de la présentation qui fait état de leurs outils de surveillance pour passer à la fin. On y trouve quelques graphiques qui montrent le nombre de pages vues suivant les performances obtenues. Comme Steve Souders le disait dans son résumé, ceux qui ont les moins bonnes performances sont aussi ceux qui visitent le moins de pages.</p>
<p>Comme on me l&#8217;a signalé il y a peu (merci Rik), il est possible que leur méthodologie soit aussi en cause (moins on visite de pages, plus la première page, cache vide, aura d&#8217;influence dans le calcul et moins bon sera le temps de chargement moyen, la courbe cumule alors un biais du à la mesure en plus de l&#8217;effet qu&#8217;on cherche à mesurer) mais il est tout de même intéressant de voir que le profil de chaque site est différent. Certains semblent plus dépendants des performances que d&#8217;autres.</p>
<h3>Un peu de CDN</h3>
<p>C&#8217;est ensuite Mike Brittain qui <a href="http://en.oreilly.com/velocity2009/public/schedule/detail/7521">nous parle de CDN</a>. Rien de bien nouveau à première vue mais le fichier de la présentation manque cruellement d&#8217;une bande sonore ou d&#8217;une vidéo, il y a peut être eu bien plus de choses intéressantes à l&#8217;oral.</p>
<p>Pour ceux qui n&#8217;ont pas travaillé avec un CDN vous y retrouverez tout de même un ou deux schémas explicatifs, et en particulier sur la notion de serveur d&#8217;origine pour un CDN (si le CDN n&#8217;a pas une ressource, il va la chercher sur vos propres serveurs pour la mettre en cache de son côté par la suite).</p>
<p>La dernière partie aurait elle aussi fortement bénéficiée d&#8217;un enregistrement sonore. On y parle de quelque chose qui est très efficace mais difficile à mettre en oeuvre : un squelette de page générique qu&#8217;on peut mettre en cache voire servir depuis le CDN et qui reçoit toutes les personnalisations et informations temps réel via des requêtes utilisateurs en javascript. Si vous avez des pages d&#8217;accueil lourdes que vous souhaitez mettre en cache, c&#8217;est la solution à tester (mais ça demande beaucoup de boulot).</p>
<h3>Et du reflow</h3>
<p>On va enchaîner avec Lindsey Simon, qui parle de <a href="http://performance.survol.fr/avec/reflow/">reflow</a>. Nous avons abordé la chose plusieurs fois ici mais je vous recommande de jeter un oeil à <a href="http://en.oreilly.com/velocity2009/public/schedule/detail/9340">la présentation</a> qui est un bon résumé. Il identifie comme problèmes majeurs impactant lors des reflow : le nombre d&#8217;éléments, la profondeur de l&#8217;arbre DOM, le nombre de sélecteurs CSS, la complexité des sélecteurs CSS, et le type de changement opéré (display block, visibilitiy hidden, etc.)</p>
<p>On y retrouve aussi la recommandation de faire les manipulations DOM lourdes hors de l&#8217;arbre général (fragment dom), hors du rendu (display none), hors du flux (position absolue), ou au moins en une fois en changeant les classes HTML plutôt que les attributs de style. On limite alors l&#8217;impact et le besoin d&#8217;un recalcul de toute la page.</p>
<h3>Encore de la pub</h3>
<p>Une des présentations que j&#8217;attendais c&#8217;est celle sur <a href="http://en.oreilly.com/velocity2009/public/schedule/detail/8959">la performance des publicités</a>. La présentation, conjointe avec plein de gens biens, est finalement décevante. On y explique très bien les problèmes, mais il manque les solutions. Il faut avouer que c&#8217;était un peu présenté comme un panel d&#8217;expert donc l&#8217;intéressant est à l&#8217;oral. On trouve juste deux liens sur des recommandations de bonnes pratiques.  Ça peut toutefois être bien utile pour donner au moins un guide à vos agences de pub (si vous êtes en position d&#8217;imposer quelque chose, ce qui est rarement le cas). Par contre au moins ici il y a <a href="http://velocityconference.blip.tv/file/2293389?filename=VelocityConf-Velocity09EricGoldsmithArturBergmanTonyRalphBryantMason875.mov">un enregistrement vidéo</a>.</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 37px; width: 1px; height: 1px;">
<h2 class="fn">Lindsey Simon</h2>
</div>
]]></content:encoded>
			<wfw:commentRss>http://performance.survol.fr/2009/08/velocity-quelques-conferences/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Compte rendu des conférences Velocity &#8211; Steve Souders</title>
		<link>http://performance.survol.fr/2009/07/compte-rendu-des-conferences-velocity-steve-souders/</link>
		<comments>http://performance.survol.fr/2009/07/compte-rendu-des-conferences-velocity-steve-souders/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 10:00:57 +0000</pubDate>
		<dc:creator>Éric</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[AOL]]></category>
		<category><![CDATA[argumentaire]]></category>
		<category><![CDATA[Bing]]></category>
		<category><![CDATA[chiffres]]></category>
		<category><![CDATA[exemples]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Shopzilla]]></category>
		<category><![CDATA[Steve Souders]]></category>
		<category><![CDATA[velocity]]></category>

		<guid isPermaLink="false">http://performance.survol.fr/?p=673</guid>
		<description><![CDATA[S&#8217;il y a une série de conférences auxquelles vous devez assister sur les performances, ce sont les conférences Velocity. La seconde édition a eu lieu en juin dernier, je regrette que l&#8217;éloignement m&#8217;ait contraint à ne pas espérer y aller, &#8230; <a href="http://performance.survol.fr/2009/07/compte-rendu-des-conferences-velocity-steve-souders/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>S&#8217;il y a une série de conférences auxquelles vous devez assister sur les performances, ce sont les conférences Velocity. La seconde édition a eu lieu en juin dernier, je regrette que l&#8217;éloignement m&#8217;ait contraint à ne pas espérer y aller, mais heureusement il y a des présentations en ligne et des résumés.</p>
<p>C&#8217;est <a href="http://radar.oreilly.com/2009/07/velocity-making-your-site-fast.html">le résumé de Steve Souders</a> qui a été publié récemment. On y retrouve quatre affirmations tirées des conférences. Toutes parlent d&#8217;une corrélation importante entre les performances et le trafic ou le business du site web :<span id="more-673"></span></p>
<h3>Microsoft</h3>
<p>Microsoft a trouvé qu&#8217;un ralentissement de deux secondes implique une réduction 1,8 % du nombre de recherches par utilisateur. Cela semble peu, mais c&#8217;est accompagné aussi d&#8217;une réduction de 4,3 % du revenu par utilisateur, et là ça fait moins rire. Autrement formulé : un utilisateur clique moins sur les publicités d&#8217;un site lent que sur les publicités d&#8217;un site rapide.</p>
<p>Ça rejoint d&#8217;ailleurs Google qui prend en compte la performance dans son &laquo;&nbsp;quality score&nbsp;&raquo; pour adword (en gros un site lent paiera plus cher ses publicités parce que le pourcentage de clic est plus faible) et c&#8217;est finalement logique, on hésitera à partir ailleurs et à se laisser tenter si on remet pas en cause une longue et pénible session de navigation qui nous a permis d&#8217;arriver jusqu&#8217;à la page en cours. Si la navigation est rapide on hésitera moins à partir dans diverses directions pour revenir ensuite.</p>
<p>Avis aux sites qui se rémunèrent sur la pub, et aux agences de comm qui font des publicités ultra lentes sous prétexte d&#8217;avoir une meilleur qualité d&#8217;image.</p>
<h3>Google</h3>
<p>Google lui a affirmé que 400 ms diminuait de 0,59 % le nombre de recherches par utilisateur. Là je suis un peu étonné parce que finalement ce n&#8217;est pas très significatif (sauf à ralentir de plusieurs secondes, et encore) et parce que <a href="http://glinden.blogspot.com/2006/11/marissa-mayer-at-web-20.html">leur dernière communication à ce sujet</a> était d&#8217;un tout autre ordre de grandeur. Ils refont d&#8217;ailleurs état de chiffres bien plus importants dans une autre conférence dans le même événement. J&#8217;attends donc de lire leur communication complètement pour juger de ce que cela implique et de comment comprendre leurs différents chiffres qui ne semblent pas dire la même chose.</p>
<p>Par contre Google fait état d&#8217;un fait d&#8217;importance : les utilisateurs qui ont subit ce ralentissement minime de 400 ms continuent de faire moins de recherche sur le long terme même après que ce ralentissement soit supprimé. En gros vos performances actuelles vous impactent non seulement maintenant mais aussi dans le futur. Le chiffre avancé parait faible mais il a beaucoup d&#8217;implications et le contexte de Google est très particulier, j&#8217;y reviendrai donc certainement dans un billet dédié.</p>
<h3>AOL</h3>
<p>Sur le réseau AOL les 10 % d&#8217;utilisateurs qui ont les meilleures performances visitent moitié plus de page par session que les 10 % avec les moins bonnes performances.</p>
<p>Autant dire que cela a un impact sur le trafic des sites, et donc forcément la conversion en clic publicitaires ou en achats. Le chiffre est important mais il peut revêtir plusieurs formes, je vous en dirai plus quand j&#8217;aurai là aussi lu leur présentation à tête reposée.</p>
<h3>Shopzilla</h3>
<p>Enfin, Shopzilla a réduit le temps de chargement de 7 secondes à 2 secondes. C&#8217;est une différence importante et ça a donc du nécessiter des efforts conséquents, mais le résultat est là : 25 % d&#8217;augmentation de trafic, 7 à 12 % d&#8217;augmentation sur les revenus, et 50 % de réduction sur les coûts matériels.</p>
<p>À défaut d&#8217;être une formule magique, investir dans l&#8217;amélioration de la performance *doit* être considéré après lecture de ces chiffres. Payer une étude quelques milliers d&#8217;euros et un développeur interne pendant quelques jours/semaines pour corriger ce qui a été trouvé, cela peut assez facilement se révéler un investissement payant à court terme.</p>
]]></content:encoded>
			<wfw:commentRss>http://performance.survol.fr/2009/07/compte-rendu-des-conferences-velocity-steve-souders/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Améliorer le code javascript</title>
		<link>http://performance.survol.fr/2009/07/ameliorer-le-code-javascript/</link>
		<comments>http://performance.survol.fr/2009/07/ameliorer-le-code-javascript/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 10:00:17 +0000</pubDate>
		<dc:creator>Éric</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[boucle]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[domfragment]]></category>
		<category><![CDATA[fragment]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Nicholas Zakas]]></category>
		<category><![CDATA[portée]]></category>
		<category><![CDATA[reflow]]></category>
		<category><![CDATA[repaint]]></category>
		<category><![CDATA[style]]></category>
		<category><![CDATA[variables]]></category>
		<category><![CDATA[velocity]]></category>

		<guid isPermaLink="false">http://performance.survol.fr/?p=653</guid>
		<description><![CDATA[Malgré le rappel de Douglas Crockford sur le fait que le code javascript lui-même représente au mieux 15% des performances de la page, il est parfois utile d&#8217;y jeter un oeil. Nicholas Zakas, de Yahoo!, propose un bon aperçu pour &#8230; <a href="http://performance.survol.fr/2009/07/ameliorer-le-code-javascript/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Malgré le rappel de Douglas Crockford sur le fait que le code javascript lui-même représente au mieux 15% des performances de la page, il est parfois utile d&#8217;y jeter un oeil.</p>
<p>Nicholas Zakas, de Yahoo!, propose un bon aperçu pour ceux que ça intéresse dans sa présentation <a href="http://en.oreilly.com/velocity2009/public/schedule/detail/7510">&laquo;&nbsp;Writing Efficient javascript&nbsp;&raquo; aux conférences Velocity 2009</a>.</p>
<h3>Variables locales</h3>
<p>Vous y trouverez un rappel sur <a href="http://performance.survol.fr/2008/05/portee-des-variables-javascript/">l&#8217;influence de la chaîne de résolution des variables javascript</a> avec un raccourci très significatif : local variable = fast. Le graphique à l&#8217;écran 26 est parfait pour expliquer tout ça :</p>
<p><a href="http://performance.survol.fr/wp-content/uploads/2009/06/Picture-3.png"><img class="aligncenter size-medium wp-image-654" title="Influence de la portée des variables en javascript" src="http://performance.survol.fr/wp-content/uploads/2009/06/Picture-3-300x206.png" alt="Influence de la portée des variables en javascript" width="300" height="206" /></a><br />
<span id="more-653"></span><br />
Les fermetures lexicales et les <code>try/catch</code> augmentent d&#8217;autant la chaîne de résolution. Les <code>with</code> ajoutent un niveau à chaque accès à une variable et sont eux à éviter.</p>
<p>Globalement utilisez le mot clef <code>var</code> partout, ne laissez pas de variables globales. Quand vous utilisez plus d&#8217;une fois une donnée qui n&#8217;est pas globale à votre bloc de code, et particulièrement si elle est dans un tableau ou dans un objet, stockez là dans une variable locale pour un accès plus rapide.</p>
<h3>Boucles et listes</h3>
<p>Plus loin, dans les écrans 60+ Nicholas discute des boucles, avec quelques faits connus mais qu&#8217;il convient de rappeler, notamment que les conditions d&#8217;arrêt des boucles doivent être le plus simple possible : Si vous itérez dans un tableau, : stockez la taille du tableau dans une variable locale au lieu de tester sa valeur à chaque itération, et évitez for/in, for/each ou les équivalents each des différentes bibliothèques javascript.</p>
<p>C&#8217;est particulièrement vrai pour ce qui est retourné par les collections DOM, par exemple ce qui est dans <code>document.images</code> ou <code>document.getElementByTagName()</code>. Il s&#8217;agit de collections dynamiques et la recherche est relancée à chaque fois qu&#8217;on accède à une propriété de la liste, par exemple si on teste le nombre d&#8217;éléments de la liste en condition d&#8217;arrêt d&#8217;une boucle.</p>
<p>A propos des boucles, je vous conseille aussi <a href="http://blogs.sun.com/greimer/entry/best_way_to_code_a">ce billet de Greg Reimer</a> de chez Sun. Il y liste différentes manière de faire des boucles en javascript sur un tableau, un tableau épart, et une collection HTML, avec des microbenchmark pour comparer le tout.</p>
<h3>Repaint et reflow</h3>
<p>Pour rappel le reflow c&#8217;est le recalcul de la géométrie et de l&#8217;agencement de la page en fonction du formattage de tous les objets présents. Cela arrive quand on manipule le DOM, change les styles, ou récupère des informations de style.</p>
<p><a href="http://performance.survol.fr/avec/reflow/">Les solutions à apporter</a> ont toutes été déjà abordées ici mais les voici ensemble et confirmées par Nicholas :</p>
<ul>
<li>Faire les manipulations de DOM en dehors du document, par exemple dans un fragment ou en <code>display:none</code></li>
<li>Grouper ensemble les modifications de style, majoritairement en changeant la classe HTML au lieu du style directement, ou en utilisant <code>cssText</code></li>
<li>Mettre en cache les informations sur l&#8217;agencement de la page qu&#8217;on récupère via javascript, puis grouper séparément les lectures et les écritures</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://performance.survol.fr/2009/07/ameliorer-le-code-javascript/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Corrélation entre le temps de rendu et la complexité CSS</title>
		<link>http://performance.survol.fr/2009/07/correlation-entre-le-temps-de-rendu-et-la-complexite-css/</link>
		<comments>http://performance.survol.fr/2009/07/correlation-entre-le-temps-de-rendu-et-la-complexite-css/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 10:00:55 +0000</pubDate>
		<dc:creator>Éric</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[reflow]]></category>
		<category><![CDATA[rendu]]></category>
		<category><![CDATA[sélecteur]]></category>
		<category><![CDATA[Steve Souders]]></category>
		<category><![CDATA[velocity]]></category>

		<guid isPermaLink="false">http://performance.survol.fr/?p=641</guid>
		<description><![CDATA[On en a parlé plusieurs fois. Le temps de reflow d&#8217;un navigateur est dépendant de la complexité des feuilles de style, et particulièrement de la complexité des sélecteurs CSS. Google Page Speed y fait référence mais si vous voulez être &#8230; <a href="http://performance.survol.fr/2009/07/correlation-entre-le-temps-de-rendu-et-la-complexite-css/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>On en a parlé plusieurs fois. Le <a href="http://performance.survol.fr/avec/reflow/">temps de reflow</a> d&#8217;un navigateur est dépendant de la complexité des feuilles de style, et particulièrement de la <a href="http://performance.survol.fr/avec/selecteur/">complexité des sélecteurs CSS</a>.</p>
<p><a href="http://performance.survol.fr/2009/06/google-page-speed/">Google Page Speed</a> y fait référence mais si vous voulez être convaincus il faut aller voir <a href="http://en.oreilly.com/velocity2009/public/schedule/detail/8807">la présentation de Steve Souders aux conférences Velocity 2009</a>. À l&#8217;écran 75 on trouve un graphique qui vérifie la corrélation entre le nombre de règles CSS, le nombre de sélecteurs complexes, et le temps nécessaire au reflow.<span id="more-641"></span></p>
<p><a href="http://performance.survol.fr/wp-content/uploads/2009/06/Picture-2.png"><img class="aligncenter size-full wp-image-646" title="perf sélecteurs css" src="http://performance.survol.fr/wp-content/uploads/2009/06/Picture-2.png" alt="perf sélecteurs css" width="567" height="267" /></a><!--more--></p>
<p>Il y a trop de choses en jeu pour tirer des conclusions fermes, mais une corrélation est des plus probable. Bref, écrémez vos CSS et simplifiez vos sélecteurs. Si en plus vous limitez le nombre de noeuds DOM et la profondeur moyenne, vous toucherez probablement le jackpot en terme de performance de rendu.</p>
<p>Pour vous aider Google Page Speed permet de repérer les sélecteurs potentiellement les plus coûteux, et ceux qui ne servent à rien dans la page en cours.</p>
]]></content:encoded>
			<wfw:commentRss>http://performance.survol.fr/2009/07/correlation-entre-le-temps-de-rendu-et-la-complexite-css/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Point trop n&#8217;en faut</title>
		<link>http://performance.survol.fr/2009/06/point-trop-nen-faut/</link>
		<comments>http://performance.survol.fr/2009/06/point-trop-nen-faut/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 10:00:07 +0000</pubDate>
		<dc:creator>Éric</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[outils]]></category>
		<category><![CDATA[sprite]]></category>
		<category><![CDATA[SriteMe]]></category>
		<category><![CDATA[Steve Souders]]></category>
		<category><![CDATA[velocity]]></category>
		<category><![CDATA[Vladimir Vukićević]]></category>

		<guid isPermaLink="false">http://performance.survol.fr/?p=603</guid>
		<description><![CDATA[En ce moment se tiennent les conférences Velocity en Californie. C&#8217;est une période où les experts parlent entre eux et où les bonnes remarques et bons sujets à propos des performances web sont publiés plusieurs fois par jour. Suite à &#8230; <a href="http://performance.survol.fr/2009/06/point-trop-nen-faut/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>En ce moment se tiennent <a href="http://en.oreilly.com/velocity2009">les conférences Velocity</a> en Californie. C&#8217;est une période où les experts parlent entre eux et où les bonnes remarques et bons sujets à propos des performances web sont publiés plusieurs fois par jour.</p>
<p>Suite à plusieurs de ces publications à propos des <a href="http://performance.survol.fr/2008/06/des-sprites-jusqua-plus-soif/">sprites CSS</a>, il est temps de faire ici un petit complément sur le sujet.<span id="more-603"></span></p>
<h3>Sprite Me</h3>
<p>Le premier lien c&#8217;est <a href="http://www.stevesouders.com/spriteme/">SpriteMe</a>, un bookmarklet qui permet de repérer les images les plus pertinentes à grouper ensemble dans un sprite. L&#8217;outil regarde toutes les images de background dans la CSS, les groupe par alignement et taille. Plus tard il est prévu qu&#8217;il <a href="http://spritegen.website-performance.org/">génère</a> le sprite associé puis mette à jour la CSS.</p>
<p>Je reste assez septique sur ces deux dernières étapes. C&#8217;est réalisable, sans aucun doute, mais pas forcément pertinent. On risque d&#8217;associer des images qui ne sont qu&#8217;occasionnellement dans le même contexte, ou des couleurs trop différentes, des alignements difficiles à faire parce que telle ou telle image a besoin d&#8217;une grande marge, etc.</p>
<p>La décision et la réalisation doivent probablement rester des étapes manuelles, mais l&#8217;aide à la décision ne peut être qu&#8217;une bonne chose.</p>
<h3>Trop c&#8217;est trop</h3>
<p>Le second lien c&#8217;est Vladimir Vukićević de Mozilla qui rappelle <a href="http://blog.vlad1.com/2009/06/22/to-sprite-or-not-to-sprite/">les problèmes inhérents à une mauvaise réalisation des sprites</a>.</p>
<p>Sur le réseau on fait transiter des images compressées, aussi seul le poids du fichier et le nombre de requêtes HTTP comptent. Les sprites sont une grande avancée. Toutefois, le navigateur utilise lui l&#8217;image décompressée en mémoire. Sur des tailles démeusurées, la mémoire se retrouve encombrée par un simple sprite. Sur un exemple réel, Vladimir parle d&#8217;un sprite de 75Mo en mémoire (1299&#215;15000 pixels).</p>
<p>Donc voilà, un rappel n&#8217;est jamais mauvais et j&#8217;avais déjà abordé ici la problématique à propos des terminaux mobiles, le sprite est globalement une bonne chose mais il vaut mieux rester mesuré : gardez la taille réelle de l&#8217;image en tête.</p>
<p>Le plus simple pour éviter les excès c&#8217;est de grouper ensemble des images de taille similaire et d&#8217;alignement identique. Pas d&#8217;icône 16&#215;16 liée à des bandeaux 2000&#215;24 pour éviter de perdre 1984px de largeur. De toutes façons, rappelez-vous qu&#8217;au delà de 2000 pixels, un bug du navigateur Opera risque de vous mettre des bâtons dans les roues.</p>
<h3>Ne pas jeter le bébé avec l&#8217;eau du bain</h3>
<p>La solution c&#8217;est le pipelining HTTP, qui ne semble jamais venir. Le commentaire de Rob Sayre de Mozilla à ce sujet (« en théorie, ahahaha ») veut tout dire. Les autres possibilités ce sont les conteneurs jar de mozilla, ou les réponses mime/multipart, de Mozilla aussi.</p>
<p>Mais voilà, pour l&#8217;instant c&#8217;est la seule technique viable que nous ayons, et elle fonctionne. En restant correct sur les tailles, le gain côté réseau dépasse largement le petit effet négatif sur la mémoire. N&#8217;oubliez pas, même sur les terminaux mobiles, c&#8217;est le réseau qui reste le plus gros goulet d&#8217;étranglement.</p>
<p>Bref, faites juste attention aux tailles des images décompressées.</p>
]]></content:encoded>
			<wfw:commentRss>http://performance.survol.fr/2009/06/point-trop-nen-faut/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Performance du navigateur et reflow</title>
		<link>http://performance.survol.fr/2009/04/performance-du-navigateur-et-reflow/</link>
		<comments>http://performance.survol.fr/2009/04/performance-du-navigateur-et-reflow/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 11:00:13 +0000</pubDate>
		<dc:creator>Éric</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[firebug]]></category>
		<category><![CDATA[gecko]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[reflow]]></category>
		<category><![CDATA[rendu]]></category>
		<category><![CDATA[velocity]]></category>
		<category><![CDATA[vidéo]]></category>

		<guid isPermaLink="false">http://performance.survol.fr/?p=461</guid>
		<description><![CDATA[On a parlé des questions de rendu en novembre et plus récemment j&#8217;ai ressorti un vieux lien vers trois vidéos montrant les phases de rendu de Gecko. Il y a quelques jours j&#8217;ai aussi abordé la lenteur du DOM dans &#8230; <a href="http://performance.survol.fr/2009/04/performance-du-navigateur-et-reflow/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>On a parlé <a href="http://performance.survol.fr/2008/11/questions-de-rendu/">des questions de rendu</a> en novembre et plus récemment j&#8217;ai ressorti un vieux lien vers <a href="http://performance.survol.fr/2009/02/video-de-la-phase-de-rendu-du-navigateur/">trois vidéos montrant les phases de rendu de Gecko</a>. Il y a quelques jours j&#8217;ai aussi abordé la <a href="http://performance.survol.fr/2009/03/lenteur-du-dom/">lenteur du DOM dans les navigateurs</a>.</p>
<p>Tous les problèmes de performance ne sont pas dus au réseau. Le navigateur lui même prend du temps pour réaliser le rendu de la page web, et optimiser cette partie n&#8217;est pas inutile.<span id="more-461"></span> Eric Lawrence et Christian Stockwell avaient fait <a href="http://assets.en.oreilly.com/1/event/7/IE%208%20What%27s%20Coming%20Presentation.ppt">une présentation aux conférence Velocity 2008 à propos d&#8217;Internet Explorer 8</a> en publiant deux graphiques sur la performance interne au navigateur. Le premier concerne une moyenne du TOP 100 du web. On y voit deux étapes &laquo;&nbsp;layout&nbsp;&raquo; et &laquo;&nbsp;rendering&nbsp;&raquo; qui prennent plus de deux tiers du temps, alors que finalement jscript et dom ne représentent pas grand chose. Pouvoir accélérer le rendu ne semble pas inutile. Même dans le cas d&#8217;une application très orientée &laquo;&nbsp;web 2.0&#8243; donc principalement constituée de javascript, css, layout, rendering et html cumulés représentent un quart du temps passé.</p>
<p><a href="http://performance.survol.fr/wp-content/uploads/2009/04/picture-41.png"><img class="aligncenter size-full wp-image-465" title="performance sous IE du TOP 100" src="http://performance.survol.fr/wp-content/uploads/2009/04/picture-41.png" alt="css 0%, layout 43%, rendering 27%, html 3%, marshalling 7%, dom 5%, formats 9%, jscript 3%, autres 2%" width="515" height="51" /></a></p>
<p>On reprend donc tout ça avec d&#8217;un côté Nicole Sullivan qui fait un billet &laquo;&nbsp;<a href="http://www.stubbornella.org/content/2009/03/27/reflows-repaints-css-performance-making-your-javascript-slow/">reflow &amp; repaint</a>&laquo;&nbsp;. Elle y répertorie quelques causes de reflow et quelques recommandations simples pour les éviter. On retrouve l&#8217;idée des tableaux à taille fixe, l&#8217;absence d&#8217;expressions CSS pour IE, positionner en absolu les éléments qui bougent, etc. Pour ma part je rajouterai la question des boucles javascript dont j&#8217;avais parlé en février dans les questions de rendu (regrouper toutes les lectures de type offsetHeight d&#8217;un côté, et toutes les écritures de style / classe de l&#8217;autre).</p>
<p>Ensuite il y a la suite des trois vidéos. Le dernier moteur Gecko offre une interface pour intercepter l&#8217;<a href="https://developer.mozilla.org/web-tech/2008/10/13/mozafterpaint/">événement MozAfterPaint</a> et faire des choses sympa. On voit un <a href="http://reflowr.appspot.com/">bookmarklet pour tester le nombre reflow</a>, un autre qui <a href="http://ejohn.org/blog/browser-paint-events/">visualise les &laquo;&nbsp;paint&nbsp;&raquo;</a>, une <a href="http://www.kylescholz.com/blog/2009/01/firefox_paint_events_update.html">extension de Firebug</a> pour la même chose, et un <a href="http://blog.yoono.com/blog/2008/12/download-yoono-xulprofiler/">profiler XUL</a> qui permet de voir certaines choses de ce type. Pour ne rien gâcher on a même <a href="http://blog.mozilla.com/gen/2009/04/09/how-to-make-your-own-gecko-reflow-video/">la procédure pour produire soi même les vidéos de reflow</a>.</p>
<p>Enfin, pour ceux que ça intéresse, Mozilla publie <a href="http://www.mozilla.org/newlayout/doc/reflow.html">une documentation sur les reflow HTML</a>. <a href="http://dev.opera.com/articles/view/efficient-javascript/?page=3">Opera en parle aussi</a> dans une documentation sur le Javascript efficace.</p>
]]></content:encoded>
			<wfw:commentRss>http://performance.survol.fr/2009/04/performance-du-navigateur-et-reflow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mesurer la performance avec Jiffy</title>
		<link>http://performance.survol.fr/2009/03/mesurer-la-performance-avec-jiffy/</link>
		<comments>http://performance.survol.fr/2009/03/mesurer-la-performance-avec-jiffy/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 11:00:27 +0000</pubDate>
		<dc:creator>Éric</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Bill Scott]]></category>
		<category><![CDATA[conférence]]></category>
		<category><![CDATA[firebug]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[jiffy]]></category>
		<category><![CDATA[mesure]]></category>
		<category><![CDATA[netflix]]></category>
		<category><![CDATA[outils]]></category>
		<category><![CDATA[statistiques]]></category>
		<category><![CDATA[velocity]]></category>
		<category><![CDATA[vidéo]]></category>
		<category><![CDATA[yslow]]></category>

		<guid isPermaLink="false">http://performance.survol.fr/?p=431</guid>
		<description><![CDATA[Jiffy est un projet mené par Netflix et présenté aux conférences Velocity 2008 (en ligne, pdf, vidéo) par Bill Scoot (tiens, encore un ancien Yahoo!). Personne n&#8217;a l&#8217;air d&#8217;en avoir parlé depuis mais le projet est suffisamment intéressant pour mériter &#8230; <a href="http://performance.survol.fr/2009/03/mesurer-la-performance-avec-jiffy/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.google.com/p/jiffy-web/ ">Jiffy est un projet mené par Netflix</a> et <a href="http://en.oreilly.com/velocity2008/public/schedule/detail/3632">présenté</a> aux c<a href="http://performance.survol.fr/avec/velocity/">onférences Velocity 2008</a> (<a href="http://looksgoodworkswell.blogspot.com/2008/06/velocity-conference-improving-netflix.html">en ligne</a>, <a href="http://assets.en.oreilly.com/1/event/7/Improving%20Netflix%20Performance%20Presentation.pdf">pdf</a>, <a href="http://blip.tv/file/1018527">vidéo</a>) par Bill Scoot (tiens, encore un ancien Yahoo!). Personne n&#8217;a l&#8217;air d&#8217;en avoir parlé depuis mais le projet est suffisamment intéressant pour mériter de s&#8217;y arrêter.<span id="more-431"></span></p>
<p>Le besoin est commun à celui de la plupart des sites important : avoir des statistiques et des mesures réelles venant des utilisateurs. Pour les performances la question est loin d&#8217;être évidentes et la plupart des outils dégradent les performances qu&#8217;ils sont en train de mesurer.</p>
<h3>Mesurer</h3>
<p>Dans sa présentation Bill Scott nous propose un tout petit script js, moins de 10ko. Il offre deux fonctionnalités de base : <code lang="en">mark()</code> et <code lang="en">measure()</code>. La première fonction prend un repère dans le temps, et la seconde mesure le temps passé depuis un repère donné. On peut donc avoir plusieurs mesures par repère, et tout est stocké dans le DOM pour réutilisation plus tard.</p>
<p>Bien entendu on voudra faire une marque à l&#8217;exécution du script, tout en haut du <code lang="en">&lt;head&gt;</code>. On voudra faire une mesure à la fin du <code lang="en">&lt;body&gt;</code>, sur le <span lang="en">DOMContentLoaded</span> et sur le <span lang="en">onLoad</span>. Probablement, puisque la publicité est souvent le plus gros problème de performance, on voudra faire une marque avant d&#8217;insérer la publicité et faire une mesure juste après. Faire une mesure après le contenu principal pourrait aussi être intéressant, de façon à mesurer la partie &laquo;&nbsp;importante pour l&#8217;utilisateur&nbsp;&raquo; quitte à ce que je reste mette plus longtemps à charger.</p>
<p>La seule chose qu&#8217;on ne mesure pas c&#8217;est le premier aller-retour serveur pour aller chercher la page HTML, et le second pour aller chercher le script Jiffy. Maintenant il ne s&#8217;agit pas d&#8217;avoir des mesures absolues, qui ne veulent rien dire en soi. Il y aura un décalage par rapport à Yslow mais on pourra avoir d&#8217;autres mesures, plus précises, et surtout on pourra mesurer les variations suivant les modifications de la page. C&#8217;est finalement ça l&#8217;important : pouvoir améliorer les choses, peu importe où on se situe.</p>
<h3>Collecter</h3>
<p>La seconde partie de Jiffy c&#8217;est l&#8217;envoi des résultats. Le but de Netflix est en effet la collecte statistiques. Il s&#8217;agit donc d&#8217;envoyer toutes les mesures faites avec tout ce qu&#8217;on peut collecter d&#8217;intéressant (version du navigateur, adresse ip, système, identifiant des publicités affichées, page visitée, etc.).</p>
<p>On nous propose d&#8217;envoyer les résultats à chaque mesure ou d&#8217;envoyer une requête groupée en fin de page. Le tout étant reçu par le serveur web pour alimenter une grosse base de données. Envoyer un résultat à chaque mesure risque de dégrader les performances, d&#8217;un autre côté envoyer les résultats en fin de page implique un biais si certains de vos utilisateurs quittent la page avant. Il doit aussi y avoir moyen de stocker ça en cookie pour le recevoir à la requête suivante mais cela implique d&#8217;autres biais.</p>
<p>Avec toutes les mesures, des filtres par navigateur, date, url, publicité &#8230; on pourra enfin détecter la source des problèmes. Lors des évolutions du site, on aura des mesures réelles sur la réaction des différents navigateurs. Mais on pourra être alerté si la courbe de performance pour une URL, un navigateur, une source géographique ou une publicité se dégrade ou s&#8217;améliore. Une publicité ou un partenaire ne respecte pas son SLA à cause des javascript qui appellent des javascript qui appellent des javascript ? on le verra.</p>
<h3>Afficher</h3>
<p>Avec tout ça, nous avons même droit à <a href="http://looksgoodworkswell.blogspot.com/2008/06/announcing-jiffy-firebug-extension-for.html">une extension</a> firefox qui se branche sur firebug et qui permet de visualiser les statistiques de la page courante.</p>
<p><a href="http://performance.survol.fr/wp-content/uploads/2009/03/jiffy-duration.png"><img class="aligncenter size-medium wp-image-433" title="jiffy-duration" src="http://performance.survol.fr/wp-content/uploads/2009/03/jiffy-duration-300x108.png" alt="jiffy-duration" width="300" height="108" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://performance.survol.fr/2009/03/mesurer-la-performance-avec-jiffy/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Google SDCH et HTTP</title>
		<link>http://performance.survol.fr/2009/02/google-sdch-et-http/</link>
		<comments>http://performance.survol.fr/2009/02/google-sdch-et-http/#comments</comments>
		<pubDate>Thu, 12 Feb 2009 11:00:50 +0000</pubDate>
		<dc:creator>Éric</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[communication]]></category>
		<category><![CDATA[compression]]></category>
		<category><![CDATA[conférence]]></category>
		<category><![CDATA[etag]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[Google toolbar]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Microsoft Internet Explorer]]></category>
		<category><![CDATA[sdch]]></category>
		<category><![CDATA[serveur]]></category>
		<category><![CDATA[velocity]]></category>

		<guid isPermaLink="false">http://performance.survol.fr/?p=401</guid>
		<description><![CDATA[On vous a dit de compresser vos échanges HTTP avec gzip ou deflate, des les identifier avec des ETag, mais pouvons nous faire mieux ? C&#8217;est la question abordée par certaines équipes de Google (slides disponibles) en juin dernier aux &#8230; <a href="http://performance.survol.fr/2009/02/google-sdch-et-http/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>On vous a dit de c<a href="http://performance.survol.fr/2008/04/compression-avant-transfert/">ompresser vos échanges HTTP avec gzip ou deflate</a>, des les <a href="http://performance.survol.fr/2008/06/desactiver-les-etags/">identifier avec des ETag</a>, mais pouvons nous faire mieux ? C&#8217;est <a href="http://en.oreilly.com/velocity2008/public/schedule/detail/2598">la question abordée par certaines équipes de Google</a> (<a href="http://assets.en.oreilly.com/1/event/7/Shared%20Dictionary%20Compression%20Over%20HTTP%20Presentation.ppt">slides disponibles</a>) en juin dernier aux <a href="http://en.oreilly.com/velocity2008/">conférences Velocity 2008</a>. Ils partent du principe qu&#8217;une page web est composée de plusieurs éléments, dont certains sont communs à plusieurs pages et ne nécessitent pas d&#8217;être renvoyés.</p>
<p>Google propose donc <a href="http://sdch.googlegroups.com/web/Shared_Dictionary_Compression_over_HTTP.pdf?gda=Znx6Cl0AAABP1YGtttuzY8Xt5fWEme6RW917cp3OCWgHAcxHpzR4UA12alwZyuoqsE-BiY88xfLrk0HuZRJs1gcUl6mErWX6yPI8Lq4cE5IelfQO528z8OU2_747KStNgkfeVUa7Znk">un codage supplémentaire pour HTTP qui s&#8217;appelle SDCH</a>,<span id="more-401"></span> et qui peut s&#8217;ajouter avant gzip ou deflate. Le serveur découpe sa page en paquets, qui peuvent chacun avoir des métadonnées et une expiration explicite. Le tout est stocké dans un dictionnaire du côté du navigateur, un peu comme les cookies actuellement. Quand le navigateur demande une page il envoie les identifiants de paquet qu&#8217;il connaît déjà, le serveur peut donc se contenter de compléter ce qui manque. On a donc le même fonctionnement que les Etag du point de vue de la négociation.</p>
<p>Les entêtes HTTP en jeu sont <code>Avail-Dictionnary</code> (l&#8217;équivalent de <code>Etag</code> pour SDCH) et <code>X-SDHC</code> (pour déclarer la version et l&#8217;implémentation de SDCH utilisée) du côté du navigateur, et <code>X-SDCH-Dictionary</code> du côté du serveur.</p>
<p>Reste que cela implique que la réponse du serveur soit codée suivant une forme bien particulière, non compatible avec les anciens clients HTTP. Google a donc prévu une auto-négociation et la réutilisation de l&#8217;entête Accept-Encoding. Grâce à cela, les navigateurs qui le peuvent auront un contenu SDCH puis compressé par gzip, les autres se contenteront du gzip.</p>
<p>Si vous voyez passer un <code>Accept-Encoding: sdch, gzip</code> c&#8217;est que votre navigateur supporte ce codage. Si en plus vous voyez une réponse <code>Content-Encoding: sdch, gzip</code> c&#8217;est que le serveur a bien compris que vous supportiez SDCH et va utiliser ce codage.</p>
<p> Je n&#8217;ai vu aucun mouvement ni aucune volonté de mouvement de la part de Mozilla, en fait depuis la communication de Google l&#8217;idée n&#8217;a pas l&#8217;air d&#8217;avoir fait recette où que ce soit. Seul <a href="http://groups.google.com/group/SDCH">un groupe de discussion</a>, quasi vide, a fait suite à la communication de juin 2008.</p>
<p><a href="http://groups.google.com/group/chromium-dev/browse_thread/thread/f3e9b8f3ea603129?pli=1">Chrome a un premier support de SDCH</a> (non activé par défaut pour la version publique actuelle) mais ça ne changera pas la face du monde. Le point intéressant est toutefois que <a href="http://googlesystem.blogspot.com/2009/02/google-search-pages-load-faster-in.html">SDCH est automatiquement intégré à Microsoft Internet Explorer si la Google toolbar est installée</a>. La page d&#8217;aide de Google indique <a href="http://www.google.com/support/toolbar/bin/answer.py?hl=en&#038;answer=113087">comment désactiver tout ça</a>. </p>
<p>Si l&#8217;idée peut être intéressante, je suis un peu étonné que Google tente de l&#8217;imposer de lui-même sans avoir le support d&#8217;au moins un intervenant (Mozilla, Opera, Apple, Microsoft) ou une publication normative officielle de type RFC. La seule chose qui sauve cet unilatéralisme est la présence d&#8217;une version dans l&#8217;auto-négociation (donc on pourra gérer d&#8217;éventuelles évolutions dans les spécifications si jamais tout le monde se met autour de la table pour en rediscuter).</p>
]]></content:encoded>
			<wfw:commentRss>http://performance.survol.fr/2009/02/google-sdch-et-http/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Velocity 2009 &#8211; Appel à participation</title>
		<link>http://performance.survol.fr/2008/11/velocity-2009-appel-a-participation/</link>
		<comments>http://performance.survol.fr/2008/11/velocity-2009-appel-a-participation/#comments</comments>
		<pubDate>Wed, 12 Nov 2008 17:04:31 +0000</pubDate>
		<dc:creator>Éric</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Californie]]></category>
		<category><![CDATA[conférence]]></category>
		<category><![CDATA[événement]]></category>
		<category><![CDATA[O'Reilly]]></category>
		<category><![CDATA[velocity]]></category>
		<category><![CDATA[vidéo]]></category>

		<guid isPermaLink="false">http://performance.survol.fr/?p=309</guid>
		<description><![CDATA[Plusieurs de mes billets ont pris comme base des présentations données aux conferences Velocity de 2008. Il s&#8217;agit d&#8217;un événement organisé par O&#8217;Reilly où on y parle performance en long en large et en travers. Alors voilà, ils viennent de &#8230; <a href="http://performance.survol.fr/2008/11/velocity-2009-appel-a-participation/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://performance.survol.fr/avec/velocity/">Plusieurs de mes billets</a> ont pris comme base des présentations données aux <a href="http://en.oreilly.com/velocity2008/">conferences Velocity de 2008</a>. Il s&#8217;agit d&#8217;un événement organisé par O&#8217;Reilly où on y parle performance en long en large et en travers.</p>
<p>Alors voilà, ils viennent de publier un <a href="http://en.oreilly.com/velocity2009/public/cfp/53">appel à participation</a> pour l&#8217;année prochaine en Californie, juin 2009 exactement. Si vous avez de quoi partager, tentez l&#8217;aventure. Dans le cas contraire tentez d&#8217;y assister, c&#8217;est l&#8217;événement le plus pertinent sur le sujet. Pour ma part je tenterai d&#8217;y être, tout dépendra de mon employeur.</p>
<p>Entre temps, vous pouvez toujours voir les présentations données en 2008, <a href="http://en.oreilly.com/velocity2008/public/schedule/proceedings">fichiers</a> et <a href="http://velocityconf.blip.tv/#1034044">vidéos</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://performance.survol.fr/2008/11/velocity-2009-appel-a-participation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
