<?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; latence</title>
	<atom:link href="http://performance.survol.fr/avec/latence/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>DNS Prefetch</title>
		<link>http://performance.survol.fr/2009/06/dns-prefetch/</link>
		<comments>http://performance.survol.fr/2009/06/dns-prefetch/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 10:00:46 +0000</pubDate>
		<dc:creator>Éric</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[domaine]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[latence]]></category>
		<category><![CDATA[préchargement]]></category>
		<category><![CDATA[prefetch]]></category>

		<guid isPermaLink="false">http://performance.survol.fr/?p=573</guid>
		<description><![CDATA[J&#8217;adore le principe du préchargement. Il s&#8217;agit tout simplement de charger par avance les informations dont on pense avoir besoin plus tard pour pouvoir les utiliser instantanément à ce moment là. Quand plus rien ne fonctionne, le préchargement peut encore améliorer &#8230; <a href="http://performance.survol.fr/2009/06/dns-prefetch/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>J&#8217;adore le principe du préchargement. Il s&#8217;agit tout simplement de charger par avance les informations dont on pense avoir besoin plus tard pour pouvoir les utiliser instantanément à ce moment là. Quand plus rien ne fonctionne, le préchargement peut encore améliorer les choses.</p>
<p>Firefox faisait déjà du préchargement, intelligemment, et ça sera probablement spécifié dans HTML 5. J&#8217;en reparlerai plus tard.</p>
<p>Aujourd&#8217;hui c&#8217;est de <a href="http://www.commentcamarche.net/contents/internet/dns.php3">DNS</a> que je souhaite parler. <a href="http://dev.chromium.org/developers/design-documents/dns-prefetching">Chrome</a> et <a href="https://developer.mozilla.org/En/Controlling_DNS_prefetching">Firefox 3.5</a> ont en effet tous deux la bonne idée de précharger les requêtes DNS. Pour les versions plus anciennes de Firefox il existe même <a href="https://addons.mozilla.org/en-US/firefox/addon/8923">une extension</a>. Etonnamment (et malheureusement) ce n&#8217;est pas encore dans les brouillons HTML 5 par contre.<span id="more-573"></span></p>
<h3>Comment ?</h3>
<p>Trois types de préchargement sont identifiés :</p>
<p>Tout d&#8217;abord le navigateur identifie les liens vers toutes les ressources à charger et tente de résoudre le nom de domaine au plus tôt, en parallèle des autres téléchargements afin que cette résolution soit disponible quand il y en a besoin. Je suppose que l&#8217;effet sera ici très restreint car très fréquemment dès qu&#8217;un ressource vers un nouveau domaine est identifiée alors le téléchargement est immédiatement lancé. Les seules effets que je vois c&#8217;est si vous épuisez la totalité des fils de téléchargements du navigateur, ou si une ressource bloque les files de téléchargement (par exemple un <a href="http://performance.survol.fr/2008/08/javascript-non-bloquant/">javascript bloquant</a>). Le premier cas ne doit quasiment jamais arriver, sur Firefox il faudrait 30 téléchargements simultanés répartis équitablement sur 5 domaines différents, sur Chrome c&#8217;est plus de 60 répartis équitablement sur plus de 10 domaines. Le second cas arrive de moins en moins (<a href="http://www.stevesouders.com/ua/">chrome 2 et Firefox 3.5 ne bloquent plus les téléchargements sur les javascript</a>).</p>
<p>Le second type de préchargement c&#8217;est analyser tous les liens sur lesquels l&#8217;utilisateur peut cliquer, pour résoudre par avance le nom de domaine. Il y aura un gain réel dès que vous utilisez un lien entre deux sites distincts, c&#8217;est à dire très fréquemment quand même.. L&#8217;effet est réduit (on ne gagne que le temps de la résolution DNS) mais il vous fera effectivement gagner du temps.</p>
<p>Le troisième type de préchargement est déclaratif. Le navigateur repère les liens de type<code> &lt;link rel="dns-prefetch" href="//example.org"&gt;</code> et précharge la résolution DNS. Charge à l&#8217;auteur de faire les déclarations pertinentes en sachant ce qu&#8217;il précharge et pourquoi.</p>
<p>Chrome a en fait un quatrième type de préchargement DNS. Il retient à chaque fois les dix domaines résolus au précédent démarage, et les précharge pour vous immédiatement. Vos deux ou trois premiers clics à l&#8217;ouverture du navigateur seront donc magiquement accélérés. C&#8217;est peut être aussi ça qui donne l&#8217;impression de performance ressentis par certains. Mieux, il précharge les sites proposés dans l&#8217;autocomplétion de la barre d&#8217;adresse et de recherche. Le temps que vous preniez votre décision, l&#8217;option a déjà été préchargée et la page s&#8217;affichera d&#8217;autant plus rapidement. Là si l&#8217;effet lui même n&#8217;est pas plus important que les précédents, le ressenti utilisateur est clairement grandement amélioré, on donne une impression de continuité et de réactivité dans tout le navigateur, ce qui est exactement le ressenti exprimé par les utilisateurs de Chrome.</p>
<h3>Pour quoi ?</h3>
<p>Une résolution DNS c&#8217;est couramment entre 30 et 200 ms. Sur des sites américains, c&#8217;est assez souvent plus de 100 ms. Ces mécanismes de préchargement peuvent faire gagner la résolution DNS initiale, et donc la latence de la première requête, la plus importante. Pouvoir avancer dans le temps une ou deux résolutions DNS dans la page peut aussi améliorer les choses, mais je crains que là l&#8217;effet soit plus restreint. Dans l&#8217;ensemble c&#8217;est jusqu&#8217;à 150 ms qu&#8217;on peut gagner. Ce n&#8217;est pas grand chose mais <a href="http://performance.survol.fr/2008/06/a-quoi-ca-sert/">ça reste quand même significatif</a>.</p>
<p>Pour d&#8217;autres pays le résultat peut être encore plus important. Ainsi Google a <a href="http://blog.chromium.org/2008/09/dns-prefetching-or-pre-resolving.html">ses propres statistiques</a> récoltées avec Chrome où on voit que <a href="http://2.bp.blogspot.com/_LJuAPqyUVas/SNE-y5DnY9I/AAAAAAAAAA0/L0oFIrUIkxw/s1600-h/histogram.PNG">la moitié de des requêtes DNS des utilisateurs test se font en plus de 100 ms</a>. Là où ça devient vraiment inacceptable c&#8217;est de voir que la moyenne est de 217 ms et qu&#8217;il y a encore pas loin de 10 % des requêtes qui dépassent la demi seconde. Même si ça arrive rarement, pouvoir gagner cette demi seconde est une victoire incontestable pour le confort utilisateur.</p>
<h3>Vie privée et désactivation</h3>
<p>Les petits malins auront remarqué qu&#8217;avec ce principe, en installant un mouchard dans son serveur DNS et en générant un nom de domaine unique différent à chaque utilisateur on peut traquer l&#8217;utilisateur. L&#8217;intérêt par rapport à une bête balise image est cependant assez faible. On peut déjà faire la même chose, mais en plus simple.</p>
<p>Si toutefois la chose vous gêne, vous pouvez le désactiver dans vos préférences Firefox (cherchez <code>network.dns.disablePrefetch</code>), ou ajouter une balise meta sur vos pages : <code>&lt;meta http-equiv="x-dns-prefetch-control" content="off"&gt;</code>. Mais pourquoi voudriez-vous diminuer l&#8217;expérience utilisateur de toutes façons ?</p>
]]></content:encoded>
			<wfw:commentRss>http://performance.survol.fr/2009/06/dns-prefetch/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Latence et CDN</title>
		<link>http://performance.survol.fr/2009/06/latence-et-cdn/</link>
		<comments>http://performance.survol.fr/2009/06/latence-et-cdn/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 11:00:57 +0000</pubDate>
		<dc:creator>Éric</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[akamai]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[cdn]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[latence]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[réseau]]></category>

		<guid isPermaLink="false">http://performance.survol.fr/?p=503</guid>
		<description><![CDATA[La latence est une des composantes qui pénalise le plus les performances actuellement. Les connexions Internet françaises se font plutôt à haut débit, et même un mauvais wifi laisse finalement passer assez de trafic pour que ce soit viable. Par &#8230; <a href="http://performance.survol.fr/2009/06/latence-et-cdn/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://performance.survol.fr/2008/03/impact-de-la-latence-reseau/">La latence est une des composantes qui pénalise le plus les performances actuellement</a>. Les connexions Internet françaises se font plutôt à haut débit, et même un mauvais wifi laisse finalement passer assez de trafic pour que ce soit viable. Par contre, avec l&#8217;explosion du nombre de composants par page, la latence est probablement le facteur le plus limitant.  40 composants à 50ms de latence, c&#8217;est 2 secondes de perdues. Même en imaginant utiliser deux fils de téléchargement, c&#8217;est encore une seconde d&#8217;attente. Sur une mauvaise connexion (wifi ?) ou quand on s&#8217;adresse à un site qui n&#8217;a pas de serveur en France (ou très proche), la latence peut vite exploser.</p>
<p>Je ne parle même pas de c<a href="http://www.theinquirer.fr/2009/03/20/hadopi-un-veritable-danger-pour-le-saas.html">e que pourraient nous apporter HADOPI et LOPSI2</a> s&#8217;ils filtrent les accès côté FAI (on peut leur faire confiance pour affirmer que les débits ne bougeront pas, mais en ce qui concerne la latence&#8230;). À 120ms de latence c&#8217;est d&#8217;un coup plusieurs secondes qui partent en fumée.  En fait ce sont souvent les publicités qui ont la plus grande latence. Quand le javascript qui gère la pub est bloquant et qu&#8217;on a deux ou trois redirections HTTP, on peut facilement perdre une seconde. Si vous ne me croyez pas, regardez <a href="http://venturebeat.com/2008/09/22/is-latency-crippling-yahoos-right-media/">l&#8217;exemple de Right Media</a>.<span id="more-503"></span></p>
<h3>Les solutions</h3>
<p>Pour aller plus vite il faut donc soit avoir moins de composants par page, soit faire en sorte que la latence entre ces composants et le visiteur est réduite.  Moins de composants c&#8217;est renouveler des solutions que j&#8217;ai déjà abordé ici : mettre en cache tout ce qu&#8217;on peut, container les fichiers javascript, faire de même avec les feuilles de style, et explorer les sprites CSS pour les images.  Réduire la latence elle-même est par contre plus complexe. Comme on ne peut pas d&#8217;un coup de baguette magique améliorer la connexion du visiteur (quoi que certains tentent de <a href="http://gigaom.com/2008/08/12/fastsoft-tweaks-tcp-to-accelerate-the-internet/">jouer avec TCP</a>), il ne reste plus qu&#8217;à approcher le serveur au maximum près du fournisseur d&#8217;accès du visiteur.</p>
<p>Pour un public français c&#8217;est réalisable, les FAI français font du peering entre eux, tout est regroupé entre quelques gros, la latence due au placement géographique est probablement proche de zéro (pour un site américain, avoir des serveurs sur les deux côtes au lieu d&#8217;une seule fait une réelle différence par contre). Sauf qu&#8217;assez souvent ce n&#8217;est pas un site français c&#8217;est un site francophone, ou adressé aux français (qui sont peut être en déplacement).  Reste que même pour un site non touristique qu&#8217;on croit adresser aux français métropolitain, il y a des requêtes qui viennent des DOM TOM, des pays limitrophes, des pays européens (oui, je travaille tous les jours de Paris avec une adresse IP londonienne ) et finalement d&#8217;un peu partout dans le monde (je suis toujours étonné de voir les statistiques géographiques de ce blog).</p>
<h3>Content Delivery Network</h3>
<p>L&#8217;idéal serait donc d&#8217;avoir un serveur local chez chaque FAI. Malheureusement on se doute bien qu&#8217;au niveau coûts c&#8217;est infaisable, d&#8217;autant plus s&#8217;il faut les synchroniser. Les CDN, puisque c&#8217;est comme ça que ça s&#8217;appelle (Content Delivery Network, réseau de distribution de contenu), se placent à quelques endroits géographiques, avec des liens réseaux spécifiques vers les FAI principaux et entre les différents emplacements.  <a href="http://www.datacenterknowledge.com/archives/2008/11/18/where-amazons-data-centers-are-located/">Amazon propose donc quatorze emplacements</a>, huit aux USA, quatre en Europe (Londres, Dublin, Amsterdam et Francfort), ainsi que deux en Asie (Hong Kong et Tokyo). Akamaï, le leader, propose 71 pays différents (et probablement plusieurs emplacements aux USA).</p>
<p>Dans l&#8217;ensemble sur les CDN donnant des listes précises, les pays du nord et les USA semblent les mieux couverts mais ce peut être un biais du à mes sources d&#8217;information. N&#8217;ayant pas eu à faire de recherche spécifique  l&#8217;Asie l&#8217;Afrique ou l&#8217;Europe ont peut être quelques CDN spécifiques. À vous de fouiller dans <a href="http://www.cdnlist.com/">la cinquantaine de CDN dans le monde</a>.  Akamaï propose une petite application pour <a href="http://www.akamai.com/html/technology/dataviz2.html">constater la latence entre deux villes</a>. Bon, c&#8217;est visiblement très biaisé, mais le principe est bien là, lui.</p>
<h3>Fonctionnement</h3>
<p>Sur le principe un CDN ce n&#8217;est pas bien compliqué. Il s&#8217;agit de modifier le DNS pour faire pointer vers celui du CDN. Là on utilise des DNS personnalisés chez différents FAI, ou un système de tracking géographique des adresses IP pour renvoyer les différents utilisateurs chacun vers le serveur le plus proche de chez eux. Le serveur lui même est soit pré-rempli avec tous les composants utiles, soit fonctionne comme un proxy évolué (ce qui demande que vous même gériez correctement toutes vos entêtes de cache).</p>
<h3>Dois-je utiliser un CDN ?</h3>
<p>Pour un petit site français, pas certain. Pour un site plus gros, cela peut permettre de déporter les coûts de serveurs et de bande passante, c&#8217;est uniquement une question financière.  Par contre, dès que vous visez plus international, en dehors de la simple Europe occidentale, ça peut commencer à prendre son sens. Les coûts sont assez progressifs et abordables même pour une petite société (Akamaï part à partir de 150$/mois, Amazon a un prix au consommé qui semble ridicule pour des petits trafics).</p>
<p>Une seule chose, ne vérifiez pas l&#8217;efficacité depuis votre bureau français, avec une faible latence. Au mieux entre un CDN avec un serveur à Paris et votre propre serveur parisien, il n&#8217;y aura pas grande différence. Il se pourrait même que le CDN semble ralentir vos pages (vu qu&#8217;il faudra peut être joindre Londres pour certains réseaux). Par contre pour d&#8217;autres, aux DOM TOM ou à l&#8217;étranger, la différence sera notable. Un petit coup par <a href="http://www.webpagetest.org/">webpagetest</a> peut donner un premier aperçu si vous le souhaitez.</p>
<p>Au pire, rien ne vous empêche de fournir un lien directement vers votre serveur quand le visiteur est dans la même zone géographique, et un lien vers le CDN sinon. Une petite reconnaissance de l&#8217;adresse IP devrait suffire et le risque de dégrader les performances en cas d&#8217;erreur est assez faible.</p>
]]></content:encoded>
			<wfw:commentRss>http://performance.survol.fr/2009/06/latence-et-cdn/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cache central des bibliothèques javascript</title>
		<link>http://performance.survol.fr/2009/02/cache-central-des-bibliotheques-javascript/</link>
		<comments>http://performance.survol.fr/2009/02/cache-central-des-bibliotheques-javascript/#comments</comments>
		<pubDate>Tue, 17 Feb 2009 11:00:15 +0000</pubDate>
		<dc:creator>Éric</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[cdn]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[domaine]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[latence]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[réseau]]></category>
		<category><![CDATA[url]]></category>
		<category><![CDATA[yahoo!]]></category>

		<guid isPermaLink="false">http://performance.survol.fr/?p=410</guid>
		<description><![CDATA[On m&#8217;a posé quelques fois la question alors voici la réponse : Oui. Oui il faut, quand vous le pouvez, utiliser les liens centralisés de Google ou de Yahoo pour vos bibliothèques javascript. Je parle de ne pas recopier jquery &#8230; <a href="http://performance.survol.fr/2009/02/cache-central-des-bibliotheques-javascript/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>On m&#8217;a posé quelques fois la question alors voici la réponse : Oui.</p>
<p>Oui il faut, quand vous le pouvez, utiliser <a href="http://code.google.com/apis/ajaxlibs/documentation/index.html#AjaxLibraries">les liens centralisés de Google</a> ou <a href="http://developer.yahoo.com/yui/articles/hosting/#background">de Yahoo</a> pour vos bibliothèques javascript. Je parle de ne pas recopier jquery ou yui directement sur vos serveurs, mais d&#8217;utiliser les liens centralisés proposés par les deux moteurs de recherche.</p>
<p>Voilà pour la réponse générique, ensuite on peut détailler un peu.</p>
<p><span id="more-410"></span></p>
<h3 lang="en">Content delivery network</h3>
<p>Le premier gain c&#8217;est l&#8217;utilisation des <acronym lang="en" title="content delivery network">CDN</acronym> de Yahoo! et de Google. Le principe du <a href="http://performance.survol.fr/avec/cdn/">CDN</a> c&#8217;est plus ou moins placer des serveurs dans plusieurs pays, voire directement chez les FAI, pour que le trajet fait sur le réseau soit le plus court possible. On vise une latence réduite. <a href="http://performance.survol.fr/2008/03/impact-de-la-latence-reseau/">La latence ça peut tuer un site web</a>.</p>
<p>Seuls les plus gros sites web peuvent s&#8217;offrir des CDN. Profiter de Yahoo! ou Google c&#8217;est toujours appréciable.</p>
<p>Maintenant vous n&#8217;utiliserez qu&#8217;une seule grosse bibliothèque javascript. En échange vous allez utiliser un nom de domaine supplémentaire, donc <a href="http://performance.survol.fr/2008/07/analyse-requete-http-serveur-et-reseau/">une requête DNS supplémentaire et une connexion de plus</a>. Le deal est intéressant si ce qu&#8217;on gagne en latence dépasse ce que coûte la requête DNS.</p>
<p>Soyons clairs, si vos contenus ne sont pas sur le même continent qu&#8217;une partie sensible de vos clients, alors c&#8217;est un bon deal, n&#8217;hésitez pas. Aux États-Unis, éviter de traverser de l&#8217;Alaska vers New-York, c&#8217;est du temps gagné, non négligeable. Mais en même temps les sociétés vraiment internationales ont déjà souvent un hébergement par pays ou continent, ou utilisent déjà un CDN.</p>
<p>Si vous restez en Europe occidentale ça devient déjà moins clair. Si vous êtes hébergés en France dans un gros datacenter et que vos clients sont en France &#8230; là pas sur que le bénéfice du CDN soit réel. Les FAI ont des liens de peering entre eux et avec les hébergeurs français, la latence est globalement faible dès le départ. (Note: ceci n&#8217;a pas été vérifié par des tests, je suis preneur d&#8217;avis et de retours d&#8217;expérience sur la pertinence de CDN pour un trafic français avec un hébergement en France)</p>
<h3>Nombre de domaines</h3>
<p>Le second aspect de ces caches centralisés c&#8217;est le fait qu&#8217;ils sont justement sur un domaine séparé. Il y a du pour et du contre.</p>
<p>Dans le pour, votre Javascript peut être téléchargé immédiatement même si <a href="http://performance.survol.fr/2008/04/limitation-du-nombre-de-requetes/">les files de téléchargement</a> sont déjà occupées avec d&#8217;autres éléments de votre site. Maintenant comme on définit souvent ce genre de bibliothèques javascript tout en haut de page, les files de téléchargement sont généralement vides à ce moment là de toutes façons. Bref, je ne suis pas convaincu.</p>
<p>Toujours dans le pour, <a href="http://performance.survol.fr/2008/12/quel-avenir/">si votre navigateur est très récent (comprendre&nbsp;: IE 8, Safari 4, Firefox 3.1) le javascript ne bloque pas les autres téléchargements</a>. Là aussi, avoir un domaine différent évite d&#8217;utiliser un slot dans vos autres téléchargements. En pratique, avec six slots simultanés minimum sur ces navigateurs, je ne suis pas convaincu que cela fasse une différence fondamentale.</p>
<p>Bref, pas convaincu, sachant qu&#8217;il y a du contre qui s&#8217;ajoute : avec un nom de domaine en plus, comme on l&#8217;a vu, il y a une requête DNS supplémentaire. Est-ce que ça vaut le coup pour un unique fichier ? pas sûr du tout.</p>
<h3>Cache centralisé</h3>
<p>Troisième aspect, en utilisant les liens de Google et Yahoo! on finit par tous utiliser les mêmes URL pour nos bibliothèques javascript.</p>
<p>Le résultat c&#8217;est que pour les bibliothèques les plus populaires, cela augmente la probabilité que vous l&#8217;ayez déjà en <a href="http://performance.survol.fr/2008/10/expires-et-cache-control-une-date-limite-de-consommation-pour-vos-contenus/">cache</a> à cause d&#8217;un site précédent. Là le gain est important, surtout pour vos pages d&#8217;accueil (celles qui ont le plus gros trafic &laquo;&nbsp;cache vide&nbsp;&raquo;). Reste qu&#8217;en réalité l&#8217;URL contient la version de la bibliothèque et tous les sites n&#8217;utilisent pas les mêmes versions, ou même les mêmes bibliothèques. La mutualisation est assez limitée et le gain reste à prouver.</p>
<p>L&#8217;avantage concret est par contre visible pour les entreprises et pour les universités. Ces dernières ont des proxys cache qui auront toutes les chance d&#8217;avoir déjà votre bibliothèque en cache, dans la bonne version. Sur la cinquantaine (ou le millier) de collègues, il y en aura bien un qui aura téléchargé la bibliothèque avant vous.</p>
<p>La question est donc, vos visiteurs sont-ils sur des lignes professionnelles ou des lignes de particuliers ? dans ce second cas le gain n&#8217;est pas évident.</p>
<h3>Mais alors, pourquoi répondre &laquo;&nbsp;oui&nbsp;&raquo; ?</h3>
<p>Parce que je parlais jusqu&#8217;à maintenant du cas idéal. Si vous avez déjà un CDN, que vos ressources statiques sont déjà sur domaine séparé, et que vos entêtes de cache sont bien réglées, alors gardez vos bibliothèques chez vous. Mais &#8230; ce n&#8217;était le cas pour aucun de ceux qui m&#8217;ont posé la question.</p>
<p>En fait je doute que ce soit le cas pour quiconque se pose la question. Ceux qui ont déjà fait tout le chemin de performance avec CDN, domaine tiers et entêtes de cache, ils ont souvent les moyens de tester eux même quelle est la meilleure solution. Ou mieux, ils ont déjà réalisé que pour éliminer une requête HTTP il faut déjà fusionner leur bibliothèque javascript avec leur code javascript spécifique. Bref, la question est sans objet pour eux.</p>
<p>Pour les autres, qui n&#8217;ont pas les moyens d&#8217;utiliser un CDN quand bien même ils en auraient besoin, ou qui n&#8217;ont pas déjà un domaine séparé pour les ressources statiques, ou qui ne gèrent pas correctement leurs entêtes de cache, pour eux c&#8217;est intéressant. Ce n&#8217;est pas parfait, mais c&#8217;est un mieux, une démarche d&#8217;amélioration progressive. Pour vous, qui vous posez la question, la réponse est probablement &laquo;&nbsp;oui, utilisez les liens de Yahoo et Google pour vos bibliothèques javascript&nbsp;&raquo;. Et puis &#8230; ça fait autant de bande passante en moins à payer.</p>
<p>En cas de doute, le &laquo;&nbsp;oui&nbsp;&raquo; a plus de chance d&#8217;être positif ou sans effet que de réellement être négatif.</p>
]]></content:encoded>
			<wfw:commentRss>http://performance.survol.fr/2009/02/cache-central-des-bibliotheques-javascript/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Impact de la latence réseau</title>
		<link>http://performance.survol.fr/2008/03/impact-de-la-latence-reseau/</link>
		<comments>http://performance.survol.fr/2008/03/impact-de-la-latence-reseau/#comments</comments>
		<pubDate>Sun, 30 Mar 2008 22:15:43 +0000</pubDate>
		<dc:creator>Éric</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[concaténation]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[latence]]></category>
		<category><![CDATA[réseau]]></category>

		<guid isPermaLink="false">http://performance.survol.fr/?p=9</guid>
		<description><![CDATA[Après avoir parlé hier des stratégies d&#8217;optimisation, parlons rapidement de ce qu&#8217;il y a à gagner. Je me concentre sur la stratégie la plus fréquente : tenter de regrouper nos ressources dans des gros fichiers globaux. Pour l&#8217;exemple, j&#8217;ai arbitrairement &#8230; <a href="http://performance.survol.fr/2008/03/impact-de-la-latence-reseau/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Après avoir parlé hier des stratégies d&#8217;optimisation, parlons rapidement de ce qu&#8217;il y a à gagner. Je me concentre sur la stratégie la plus fréquente : tenter de regrouper nos ressources dans des gros fichiers globaux.</p>
<p>Pour l&#8217;exemple, j&#8217;ai arbitrairement utilisé <a href="http://fredericdevillamil.com">le blog de Frédéric de Villamil</a>. La page semble assez rapide à charger. Concrêtement, de chez moi, je met environ 500 ms à charger les composants internes (je ne compte donc pas le tag Google analytics et les images Flickr).<span id="more-8"></span></p>
<p>Sur ces 450 ms je charge :</p>
<ul>
<li>82 ms pour la connexion initiale et le téléchargement du fichier HTML ;</li>
<li>19 ms pour la feuille de style ;</li>
<li>96 ms pour 4 fichiers javascript ;</li>
<li>le reste vient des 9 images, chargées avec deux fils de téléchargements parallèles.</li>
</ul>
<p>En soit il n&#8217;y a rien d&#8217;extraordinaire mais cela fait tout de même un total de 15 ressources à télécharger.</p>
<h3>L&#8217;impact de la latence</h3>
<p>Pour chaque ressource à télécharger je subis la latence du réseau, c&#8217;est à dire le temps d&#8217;acheminer ma requête jusqu&#8217;au serveur puis le temps que sa réponse traverse les câbles pour atteindre ma machine. </p>
<p>Frédéric utilise une machine sur un réseau très proche du mien. Un aller-retour met donc 12 ms à s&#8217;exécuter, ce qui est extrêmement peu. 15 ressources à télécharger c&#8217;est 15&#215;12 = 180 ms, soit tout de même 40% de mon temps d&#8217;attente.</p>
<p>Si on regarde de plus près, les 4 fichiers javascripts sont génériques. Si je les concatène pour en faire un seul, je gagne d&#8217;un coup 3 aller-retours, soit 60 ms (13% de mon temps d&#8217;attente).</p>
<p>En allant un peu plus loin, les images de fond pour l&#8217;entête et le pied de page pourraient être regroupées en un sprite CSS vertical. Les autres images de mise en page pourraient être regroupées en un sprite horizontal.  Sur 6 images de mise en page (il y avait deux images de contenu), nous réduisons à deux fichiers. Le gain est de 50 ms (11% du temps d&#8217;attente).</p>
<p>Avec ces réductions, c&#8217;est un total de 110 ms qu&#8217;on peut épargner aux navigateurs, soit 25% du temps de chargement de la page. Non seulement la page finira de s&#8217;afficher 25% plus vite, mais en plus l&#8217;affichage débutera bien plus tôt : le chargement de nos fichiers javascript bloquait l&#8217;affichage de la page. 60 ms de gagné à cet endroit, c&#8217;est une page qui débute son affichage 60 ms plus tôt.</p>
<h3>L&#8217;ordre de grandeur des gains</h3>
<p>Les chiffres mentionnées semblent minimes, et ils le sont. Mais un chargement de près de 500 ms c&#8217;est un chargement qui est ressenti par le visiteur. Permettre de débuter l&#8217;affichage plus vite et finir plus rapidement le téléchargement de toutes les images, c&#8217;est un vrai ressenti de &laquo;&nbsp;site rapide&nbsp;&raquo; pour l&#8217;utilisateur. Quelle que soit la valeur absolue, quand vous dépassez 250 ms, 25% de gain c&#8217;est visible.</p>
<p>Ces chiffres sont minimes aussi parce que j&#8217;ai pris un cas presque idéal : peu d&#8217;images dans le graphisme, et un serveur avec une liaison presque directe vers mon fournisseur d&#8217;accès Internet. La latence avec le serveur est plus souvent de l&#8217;ordre de 30 à 60 ms, parfois plus. Même Google et Yahoo sont à un peu plus de 30 ms de de chez moi.</p>
<p>Si le serveur de frédéric avait une latence de 40 ms au lieu des 12 ms, mon navigateur aurait mis un peu plus d&#8217;une seconde à tout afficher. Il commence à y avoir un vrai sentiment d&#8217;attente de la part de l&#8217;utilisateur (imaginez si votre téléviseur mettait ce temps là à réagir).</p>
<p>Nos petites optimisations simples à faire auraient épargné presque 280 ms : plus d&#8217;un quart de seconde. Là aussi cela se <em>verra</em> pour l&#8217;utilisateur, surtout si ça veut dire que la page commence son chargement plus vite.</p>
]]></content:encoded>
			<wfw:commentRss>http://performance.survol.fr/2008/03/impact-de-la-latence-reseau/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
