<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Blog - Your-Mix.net</title>
	<link>http://www.your-mix.net/</link>
	<description>Le fil RSS officiel du Blog Your-Mix.net</description>
	<language>fr</language>




<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/ym-blog" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Stage et nouveautés Your-Mix</title>
		<link>http://feedproxy.google.com/~r/ym-blog/~3/--ai7Bhio4I/stage-et-nouveautes-your-mix</link>
		<guid isPermaLink="false">http://www.your-mix.net/blog/annonces/stage-et-nouveautes-your-mix</guid>
		<dc:date>2009-04-21T11:51:21Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Sebastien P.</dc:creator>

<category domain="http://your-mix.net/blog/annonces/">Annonces</category>


		<description>Bonjour, comme vous avez-pu le constater, suite à ce billet vous expliquant pourquoi, le blog est resté de nombreuses semaines en inactivité, période durant laquelle nous n'avons pourtant pas chômé, bien au contraire ... En effet, outre le fait que je n'ai plus que mes weekend à consacrer sur Your-Mix (stage chez Orange Labs la semaine oblige), sachez tout de même que beaucoup de bonnes choses sont en préparation ! Pour vous mettre l'eau à la bouche, commençons par l'annonce du nouveau Webdesign du (...)

-
&lt;a href="http://www.your-mix.net/blog/annonces/" rel="directory"&gt;Annonces&lt;/a&gt;


		</description>


 <content:encoded><![CDATA[<div class='rss_chapo'><p class="spip">Bonjour, comme vous avez-pu le constater, suite à <a href='http://www.your-mix.net/blog/annonces/spip-2-0-3-jquery-ui-et-stage/' class='spip_out'>ce billet</a> vous expliquant pourquoi, <strong class="spip">le blog est resté</strong> de nombreuses semaines <strong class="spip">en inactivité</strong>, période durant laquelle <strong class="spip">nous n'avons pourtant pas chômé</strong>, bien au contraire ...</p></div>
		<div class='rss_texte'><p class="spip">En effet, outre le fait que je n'ai plus que mes weekend à consacrer sur <strong class="spip">Your-Mix</strong> (stage chez Orange Labs la semaine oblige), sachez tout de même que <strong class="spip">beaucoup de bonnes choses sont en préparation</strong> !</p> <p class="spip">Pour vous mettre l'eau à la bouche, commençons par l'annonce du <strong class="spip">nouveau Webdesign du site</strong> que vous pourrez admirer d'ici peu en remplacement de ce blog : un Webdesign <strong class="spip">beaucoup plus orienté Web 2.0</strong> avec au programme nuage de tags, icones shiny, un nouveau logo, coloration syntaxique des snippets de code informatique, etc. etc.</p> <p class="spip">Ensuite, comme une bonne nouvelle n'arrive jamais seule, sachez que <strong class="spip">le projet Your-Mix ne va plus seulement être réservé aux DJs</strong>, il ouvrira ses portes à TOUS LES PODCASTEURS quels qu'ils soient (radios, émissions, interviews, ...) et ce notamment avec la nouvelle version du site mais aussi avec l'arrivée de la <strong class="spip">version 2 beta de notre Player Flash</strong>, entièrement repensé et comprenant énormément de fonctionnalités supplémentaires (dont la liste sera dévoilée au fur et à mesure sur ce blog) ... mais pour cela il faudra être encore un tantinet patient ...</p> <p class="spip">Et enfin, pour terminer ce billet sur une note tout aussi positive, sachez qu'après réflexion <strong class="spip">j'ai décidé de ne plus insérer de publicité</strong> sur aucune page du futur service Your-Mix, de même qu'il existera <strong class="spip">une offre totalement gratuite</strong> (certes limitée) dont je dois encore déterminer les modalités.</p> <p class="spip">Cordialement.</p> <p class="spip"><i class="spip">PS :</i> Pour des mises à jour plus courtes mais plus régulières, vous pouvez d'ores et déjà <a href='http://twitter.com/maxymeumprod' class='spip_out'>me suivre sur Twitter</a>.</p> <p class="spip"><i class="spip">PS 2 :</i> Suite à la mise à jour du noyau du blog, tous les commentaires ont momentanément été perdus, de plus des spammeurs commençaient à faire des siennes sur mes billets j'ai donc décidé de désactiver le module de commentaires jusqu'à nouvel ordre. Dernière chose, toujours à cause de cette mise à jour, toutes les statistiques de consultation de billets ont aussi été perdues ce qui a pour effet de mettre un "beau" 0 partout donnant ainsi la fâcheuse impression que personne ne me lis ...</p></div>
		
		<img src="http://feeds.feedburner.com/~r/ym-blog/~4/--ai7Bhio4I" height="1" width="1"/>]]></content:encoded>


		
		<pubDate>Tue, 21 Apr 2009 13:51:21 +0200</pubDate>
	<feedburner:origLink>http://www.your-mix.net/blog/annonces/stage-et-nouveautes-your-mix</feedburner:origLink></item>
<item>
		<title>Eviter les expressions CSS</title>
		<link>http://feedproxy.google.com/~r/ym-blog/~3/9lWOsViOLnU/eviter-les-expressions-css</link>
		<guid isPermaLink="false">http://www.your-mix.net/blog/developpement/eviter-les-expressions-css</guid>
		<dc:date>2009-04-20T20:19:09Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Sebastien P.</dc:creator>

<category domain="http://your-mix.net/blog/developpement/">Développement</category>


		<description>"Précédemment dans la série des performances sur le Web" : je vous avais expliqué qu'il est bénéfique et donc conseillé de déplacer toutes vos lignes d'appel de script juste avant de refermer la balise body. Parlons maintenant de la règle numéro 7 : éviter les expressions CSS. Les expressions CSS - comme on les appelle - ne sont qu'un moyen d'intégrer du JavaScript dans vos feuilles de style CSS. Elles sont supportées uniquement sous Internet Explorer de la version 5 à la version 7 (eh oui, ils les ont (...)

-
&lt;a href="http://www.your-mix.net/blog/developpement/" rel="directory"&gt;Développement&lt;/a&gt;


		</description>


 <content:encoded><![CDATA[<div class='rss_chapo'><p class="spip">"<a href='http://www.your-mix.net/blog/developpement/et-le-javascript-tres-tard.html' class='spip_out'>Précédemment</a><i class="spip"> dans la série des performances sur le Web</i>" : je vous avais expliqué qu'il est bénéfique et donc conseillé de <strong class="spip">déplacer toutes vos lignes d'appel de script juste avant de refermer la balise body</strong>. Parlons maintenant de <a href='http://developer.yahoo.com/performance/rules.html#css_expressions' class='spip_out'>la règle numéro 7</a> : <strong class="spip">éviter les expressions CSS</strong>.</p></div>
		<div class='rss_texte'><p class="spip"><strong class="spip">Les expressions CSS</strong> - comme on les appelle - ne sont qu'un moyen d'<strong class="spip">intégrer du JavaScript dans vos feuilles de style CSS</strong>. Elles sont supportées uniquement sous Internet Explorer de la version 5 à la version 7 (eh oui, ils les ont abandonnées dans la version 8 !).</p> <p class="spip">Outre le fait que les expressions CSS <strong class="spip">sont assez puissantes</strong> (vous imaginez bien que rendre dynamiques les propriétés de vos styles peut-être intéressant), sachez qu'elles sont aussi <strong class="spip">fortement déconseillées du point de vue des performances</strong> ! En effet, premièrement, si l'on sépare les CSS et le JS du HTML dans des fichiers bien distincts ce n'est justement pas pour aller mélanger les CSS et le JavaScript ! Ensuite, la raison principale avancée par l'équipe Yahoo pour oublier les expressions CSS est que <strong class="spip">ces dernières sont recalculées à chaque fois que l'utilisateur redimensionne la page, utilise le scroll, à chaque fois qu'il bouge la souris, etc</strong>. Bref, une horreur, un peu comme le coup du <a href='http://performance.survol.fr/2008/09/mode-de-rendu-des-tableaux/' class='spip_out'>mode de rendu des tableaux HTML</a> (pour faire court, <strong class="spip">utilisez la directive CSS table-layout:fixed</strong> et les navigateurs Web lutteront moins pour l'affichage et le reflow de vos grands tableaux aux multiples lignes et colonnes) ; les propriétés CSS à base d'expression JavaScript peuvent donc être recalculées des dizaines de milliers de fois en peu de temps ce qui arrive à être plutôt lourd à digérer pour <strong class="spip">quelque chose de si simple à éviter</strong> !</p> <p class="spip">Malgré tout, pour ceux ou celles qui seraient tout de même intéressé(e)s et qui souhaiteraient en savoir plus sur les expressions CSS, vous pouvez toujours consulter <a href='http://msdn.microsoft.com/fr-fr/library/ms537634(en-us).aspx' class='spip_out'>la page officielle Microsoft</a> ou bien <a href='http://alyze.info/Blog/10' class='spip_out'>ce blog ci</a> et encore <a href='http://www.gatellier.be/blog/css-pseudo-classes-internet-explorer/' class='spip_out'>ce blog là</a>.</p> <p class="spip">Cordialement.</p> <p class="spip"><i class="spip">PS :</i> par manque de temps ces dernières semaines, je n'ai pas pu assurer la mise en ligne régulière de mes posts sur le sujet des performances Web, veuillez m'en excuser, on se retrouve donc très bientôt avec la règle numéro 8, <a href='http://developer.yahoo.com/performance/rules.html#external' class='spip_out'>externaliser le JavaScript et les CSS</a>.</p></div>
		
		<img src="http://feeds.feedburner.com/~r/ym-blog/~4/9lWOsViOLnU" height="1" width="1"/>]]></content:encoded>


		
		<pubDate>Mon, 20 Apr 2009 22:19:09 +0200</pubDate>
	<feedburner:origLink>http://www.your-mix.net/blog/developpement/eviter-les-expressions-css</feedburner:origLink></item>
<item>
		<title>SPIP 2.0.3, JQuery UI et stage</title>
		<link>http://feedproxy.google.com/~r/ym-blog/~3/-rNhdIRdzN4/spip-2-0-3-jquery-ui-et-stage</link>
		<guid isPermaLink="false">http://www.your-mix.net/blog/annonces/spip-2-0-3-jquery-ui-et-stage</guid>
		<dc:date>2009-02-16T09:47:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>MAXymeum Prod.</dc:creator>

<category domain="http://your-mix.net/blog/annonces/">Annonces</category>


		<description>Un peu de nouvelles concernant l'avancée des travaux ne fait pas de mal. Après la finalisation de la version 1 beta révision 9 de notre player DJ et notre choix de ne rendre cette mise à jour disponible au public qu'en même temps que les pages dédiées aux DJs (car les deux sont étroitement liées), qu'en est-il du développement de ces dites pages ? À l'heure actuelle, notre développeur attitré se heurte aux dernières difficultés concernant principalement un plugin de notation en étoile récalcitrant allant (...)

-
&lt;a href="http://www.your-mix.net/blog/annonces/" rel="directory"&gt;Annonces&lt;/a&gt;


		</description>


 <content:encoded><![CDATA[<div class='rss_chapo'><p class="spip"><strong class="spip">Un peu de nouvelles</strong> concernant l'avancée des travaux ne fait pas de mal. Après la finalisation de la <a href='http://www.your-mix.net/blog/annonces/player-v1-beta-revision-9/' class='spip_out'>version 1 beta révision 9</a> de notre player DJ et notre choix de ne rendre cette mise à jour disponible au public qu'en même temps que les pages <strong class="spip">dédiées aux DJs</strong> (car les deux sont étroitement liées), <strong class="spip">qu'en est-il du développement de ces dites pages</strong> ?</p></div>
		<div class='rss_texte'><p class="spip">À l'heure actuelle, <strong class="spip">notre développeur attitré se heurte aux dernières difficultés</strong> concernant principalement <a href='http://www.spip-contrib.net/Notation-d-articles-SPIP' class='spip_out'>un plugin de notation en étoile</a> récalcitrant allant de paire avec l'établissement d'un classement des DJs. Visiblement, <strong class="spip">le plugin en question n'est pas compatible avec le travail déjà réalisé</strong> sur <a href='http://www.your-mix.net/blog/developpement/url-rewriting-et-le-cms-spip/' class='spip_out'>la présentation (réécriture) des URL</a> de notre plateforme qu'est <strong class="spip">Your-Mix</strong>.</p> <p class="spip">Pour des raisons évidentes de <strong class="spip">gain de temps</strong> de développement et de <strong class="spip">capacité à mettre en place</strong> un système tel que celui que nous souhaitons réaliser, notre développeur s'est basé dès le départ sur un CMS (Content Management System) bien connu : <a href='http://www.spip.net/rubrique91.html' class='spip_out'>SPIP</a>, alors dans <a href='http://www.spip.net/fr_article3567.html' class='spip_out'>sa mouture 1.9.2</a>. Après avoir eu du mal avec la réécriture d'URL sous SPIP afin d'obtenir un résultat de type "arborescence", <strong class="spip">des petits soucis sont apparus</strong> notamment dans la gestion et l'administration du <a href='http://www.spip.net/fr_article886.html' class='spip_out'>cache applicatif</a> page par page qui est alors devenue impossible ainsi que dans la compatibilité avec le plugin "notation".</p> <p class="spip">Depuis quelques temps, <strong class="spip">SPIP est disponible en version publique 2.0.3</strong>, <a href='http://www.spip.net/fr_article3784.html' class='spip_out'>une mise à jour importante</a> qui laisse entrevoir le bout du tunnel quant au plugin "notation" puisqu'une version plus récente - et plus performante - a été réalisée uniquement pour SPIP 2. De même, la gestion des URL en modèle arborescent est maintenant native, <strong class="spip">ce qui devrait régler les conflits rencontrés actuellement</strong> avec le cache de SPIP. Enfin, dans le souci d'améliorer l'expérience utilisateur, nous explorerons les nouvelles pistes offertes par SPIP 2 concernant <strong class="spip">l'usage d'AJAX</strong> dans l'intégration des formulaires et de plusieurs pages pour les commentaires. En résumé, le prochain grand pallier à passer pour l'avancement de la plateforme <strong class="spip">Your-Mix</strong> est la mise à jour et l'assimilation de son noyau : SPIP en version 2.0.3.</p> <p class="spip">Pour accompagner ce noyau, <a href='http://www.your-mix.net/blog/annonces/choix-d-un-framework-js-jquery/' class='spip_out'>nous avions déjà évoqué notre choix du Framework JS JQuery</a> ; eh bien pour accompagner ce Framework, nous avons décidé de <strong class="spip">le compléter par sa branche orientée interface utilisateur</strong> nommée <a href='http://jqueryui.com/' class='spip_out'>JQuery UI</a>. Cet ajout - pas des moindres - <strong class="spip">permet notamment de gérer le glisser/déposé</strong> (drag & drop) que nous mettrons en place dans l'interface d'administration du <strong class="spip">Your-Mix DJ Web MP3 Player</strong> pour chaque DJ. Cependant, un petit travail supplémentaire sera à réaliser : <strong class="spip">revoir le Web Design final des pages DJ pour intégrer par la suite JQuery UI</strong> selon un thème personnalisé.</p> <p class="spip">Pour terminer ce billet, il nous faut replacer ces annonces dans le contexte actuel : <strong class="spip">notre développeur commence dès aujourd'hui un stage chez Orange Labs</strong> (France Télécom département Recherche et Développement) à cause de quoi l'avancée des travaux sur la plateforme <strong class="spip">Your-Mix</strong> sera d'autant compromise.</p> <p class="spip">Merci de votre compréhension, cordialement.</p></div>
		
		<img src="http://feeds.feedburner.com/~r/ym-blog/~4/-rNhdIRdzN4" height="1" width="1"/>]]></content:encoded>


		
		<pubDate>Mon, 16 Feb 2009 10:47:00 +0100</pubDate>
	<feedburner:origLink>http://www.your-mix.net/blog/annonces/spip-2-0-3-jquery-ui-et-stage</feedburner:origLink></item>
<item>
		<title>... et le JavaScript très tard</title>
		<link>http://feedproxy.google.com/~r/ym-blog/~3/Tqvd1gU_hU8/et-le-javascript-tres-tard</link>
		<guid isPermaLink="false">http://www.your-mix.net/blog/developpement/et-le-javascript-tres-tard</guid>
		<dc:date>2009-02-15T11:06:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Sebastien P.</dc:creator>

<category domain="http://your-mix.net/blog/developpement/">Développement</category>


		<description>"Précédemment dans la série des performances sur le Web" : je vous avais expliqué pourquoi séparer vos CSS de vos HTML dans un - seul - fichier dédié appelé dans head via la balise link permet un rendu progressif et donc un chargement plus rapide pour vos pages. Le cas inverse s'applique alors pour vos codes JavaScript, c'est la règle numéro 6 : mettre les scripts en bas. Contrairement à la croyance générale, il est préférable d'appeler vos fichiers JS le plus tard possible dans la page, c'est à dire (...)

-
&lt;a href="http://www.your-mix.net/blog/developpement/" rel="directory"&gt;Développement&lt;/a&gt;


		</description>


 <content:encoded><![CDATA[<div class='rss_chapo'><p class="spip">"<a href='http://www.your-mix.net/blog/developpement/appeler-les-css-tres-tot/' class='spip_out'>Précédemment</a> <i class="spip">dans la série des performances sur le Web</i>" : je vous avais expliqué <strong class="spip">pourquoi séparer vos CSS</strong> de vos HTML dans un - seul - fichier dédié <strong class="spip">appelé dans head via la balise link</strong> permet un <strong class="spip">rendu progressif</strong> et donc un chargement plus rapide pour vos pages. Le cas inverse s'applique alors pour vos codes JavaScript, c'est <a href='http://developer.yahoo.com/performance/rules.html#js_bottom' class='spip_out'>la règle numéro 6</a> : <strong class="spip">mettre les scripts en bas</strong>.</p></div>
		<div class='rss_texte'><p class="spip">Contrairement à la croyance générale, il est <strong class="spip">préférable d'appeler vos fichiers JS le plus tard possible</strong> dans la page, c'est à dire juste avant de refermer la balise body. La plupart du temps, nous insérons notre ligne type : <em class="code"><!-- htmlA --><code class='spip_code' dir='ltr'><script type="application/javascript" src="monSuperScript.js"></script></code><!-- htmlB --></em> (oui, <i class="spip">application/javascript</i> est le nouveau mime-type certifié à utiliser en remplacement de <i class="spip">text/javascript</i> maintenant obsolète) dans head probablement plus par souci d'une certaine élégance pour notre source ; or <strong class="spip">cette pratique n'est absolument pas obligatoire</strong>, et <a href='http://www.w3.org/TR/REC-html40/interact/scripts.html' class='spip_out'>ce n'est pas la W3C qui démentira</a>, les standards sont clairs, <strong class="spip">on peut aussi bien déclarer un script dans head que dans body</strong> et la seconde solution est loin de ne pas être "propre" ...</p> <p class="spip">Le fait est que lorsqu'un navigateur Internet (actuel) détecte un appel de script, <strong class="spip">il bloque totalement le rendu de la page</strong> jusqu'à ce que le fichier soit chargé et le code interprété (à la différence par exemple des images qui seront téléchargées <a href='http://performance.survol.fr/avec/parallelisation/' class='spip_out'>en parallèle</a> ... j'y reviendrai). Ce comportement est dû au fait que <strong class="spip">le JavaScript peut entre autres modifier le contenu d'une page</strong> notamment via la méthode <em class="code">document.write(...) ;</em> Dans ce cas, la déclaration du script est bien faite dans le body, à l'endroit même de la page où vous avez souhaité que quelque chose soit écrit via JavaScript ; <strong class="spip">cette méthode est cependant fortement à déconseiller</strong> car le JavaScript devient alors ici <a href='http://www.journaldunet.com/developpeur/tutoriel/dht/070119-js-unobstrusive-javascript-non-intrusif.shtml' class='spip_out'>intrusif</a> comme si vous l'insériez dans un attribut HTML de type gestion d'évènement que sont par exemple : <i class="spip">onmouseover</i>, <i class="spip">onmouseout</i>, <i class="spip">onkeydown</i>, etc. Il est évident qu'un script faisant usage de <i class="spip">document.write</i> ne pourra être déplacé plus bas dans la page (un <strong class="spip">exemple</strong> courant est <strong class="spip">la publicité Google Adsense</strong> qui est difficilement déplaçable sauf éventuellement grâce à une triche à base de CSS).</p> <p class="spip">De plus, dans le cas contraire (pas de <i class="spip">document.write</i> et un appel du script dans head), le navigateur réagira de la même façon, le problème étant que <strong class="spip">le blocage du rendu se fait au niveau du header</strong> de la page, autrement dit rien ne sera encore affiché puisque le body n'est pas encore interprété. <strong class="spip">Quel est alors l'intérêt</strong> de bloquer le rendu si rien n'est rajouté à la page via JavaScript ? Eh oui, sinon vous auriez utilisé <i class="spip">document.write</i> et alors déplacé votre déclaration de script dans le body. D'une manière très générale, ce qu'il faut retenir avec <strong class="spip">le JavaScript</strong>, c'est qu'il <strong class="spip">est un élément bloquant</strong> pour le moteur de rendu d'un navigateur Web.</p> <p class="spip">Afin de limiter la casse dans les deux cas de figure présentés ci-dessus, <strong class="spip">on évitera d'écrire du JavaScript dit intrusif</strong> par exemple <a href='http://www.css4design.com/blog/framework-jquery-pour-ecrire-du-javascript-non-intrusif' class='spip_out'>grâce à l'utilisation d'un Framework JS tel que JQuery</a>, on pourra - et l'on devra - alors <strong class="spip">toujours déplacer sa/ses ligne(s) d'appel de script</strong> pour l'écrire <strong class="spip">juste avant de refermer la balise body</strong>. Par conséquent, <strong class="spip">tout le rendu</strong> de la page <strong class="spip">sera fait</strong> (c'est à dire que votre visiteur aura rapidement accès à l'information recherchée) <strong class="spip">avant le blocage</strong> lié au chargement de vos scripts. J'en avais déjà parlé, il s'agit ni plus ni moins de <strong class="spip">privilégier le fond à la forme</strong> lors du rendu afin que <strong class="spip">vos visiteurs aient moins l'impression d'attendre</strong>. En plus, ceci vous assurera que l'arbre de vos pages (constitué par les "noeuds" de balises) sera entièrement disponible avant que votre Framework JS fasse les attributions pour la gestion des évènements (<i class="spip">onclick</i>, ...) ; le cas contraire étant une aberration.</p> <p class="spip">Cordialement.</p></div>
		
		<img src="http://feeds.feedburner.com/~r/ym-blog/~4/Tqvd1gU_hU8" height="1" width="1"/>]]></content:encoded>


		
		<pubDate>Sun, 15 Feb 2009 12:06:00 +0100</pubDate>
	<feedburner:origLink>http://www.your-mix.net/blog/developpement/et-le-javascript-tres-tard</feedburner:origLink></item>
<item>
		<title>Appeler les CSS très tôt ...</title>
		<link>http://feedproxy.google.com/~r/ym-blog/~3/2kok98Pvzvc/appeler-les-css-tres-tot</link>
		<guid isPermaLink="false">http://www.your-mix.net/blog/developpement/appeler-les-css-tres-tot</guid>
		<dc:date>2009-02-02T11:04:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Sebastien P.</dc:creator>

<category domain="http://your-mix.net/blog/developpement/">Développement</category>


		<description>"Précédemment dans la série des performances sur le Web" : je vous avais expliqué comment compresser vos composants à base de texte côté serveur via la méthode Gzip (ou Deflate). La conclusion à tirer de cette amélioration était son rapport efficacité/ressources élevé. En effet, pour une petite ligne de code, vous et vos visiteurs y gagnerez beaucoup ! Parlons maintenant de la règle numéro 5 : mettre les CSS en haut. J'en avais déjà parlé dans le quatrième paragraphe de ce billet, le principe pour cette (...)

-
&lt;a href="http://www.your-mix.net/blog/developpement/" rel="directory"&gt;Développement&lt;/a&gt;


		</description>


 <content:encoded><![CDATA[<div class='rss_chapo'><p class="spip">"<a href='http://www.your-mix.net/blog/developpement/compression-gzip-ou-deflate/' class='spip_out'>Précédemment</a> <i class="spip">dans la série des performances sur le Web</i>" : je vous avais expliqué <strong class="spip">comment compresser vos composants</strong> à base de texte côté serveur <strong class="spip">via la méthode Gzip (ou Deflate)</strong>. La conclusion à tirer de cette amélioration était son <strong class="spip">rapport efficacité/ressources élevé</strong>. En effet, pour une petite ligne de code, vous et vos visiteurs y gagnerez beaucoup ! Parlons maintenant de <a href='http://developer.yahoo.com/performance/rules.html#css_top' class='spip_out'>la règle numéro 5</a> : <strong class="spip">mettre les CSS en haut</strong>.</p></div>
		<div class='rss_texte'><p class="spip">J'en avais déjà parlé dans le quatrième paragraphe <a href='http://www.your-mix.net/blog/developpement/faire-moins-de-requetes-http/' class='spip_out'>de ce billet</a>, le principe pour cette règle d'optimisation est le même, à savoir <strong class="spip">permettre à la page de faire son rendu progressivement</strong> et ainsi que <strong class="spip">le visiteur ait accès plus rapidement au fond</strong> (à l'information recherchée) <strong class="spip">qu'à la forme</strong> (le Web Design et tous les évènements JavaScript par exemple). Pour ce faire, l'équipe de Yahoo - ayant mené toutes sortes de recherches sur la question des performances - nous conseille fortement d'appeler nos feuilles de style CSS très tôt dans la page c'est à dire <strong class="spip">entre les balises <!-- htmlA --><code class='spip_code' dir='ltr'><head> et </head></code><!-- htmlB --></strong>.</p> <p class="spip">Je pense qu'il n'est pas nécessaire de s'étendre sur le sujet car il me semble que cette pratique - de surcroit recommandée aussi dans<a href='http://www.w3.org/TR/html4/struct/links.html#h-12.3' class='spip_out'>les spécifications HTML du W3C</a> - est plus que courante ; cependant, il y a une subtilité concernant la méthode d'appel des CSS, il existe en effet la méthode dite "<i class="spip">link</i>" : <em class="code"></p>
<div style='text-align: left;' class='spip_code' dir='ltr'><code><link rel="stylesheet" type="text/css" href="maSuperCSS.css" /></code></div>
<p class="spip"></em> et la méthode dite "<i class="spip">import</i>" : <em class="code"></p>
<div style='text-align: left;' class='spip_code' dir='ltr'><code><style type="text/css">@import url(maSuperCSS.css);</style></code></div>
<p class="spip"></em> Ces deux méthodes ont toutes deux pour effet d'appliquer vos styles dans vos pages ; <a href='http://www.babylon-design.com/site/index.php/2007/04/10/184-regle-import-bonne-pratique' class='spip_out'>certains vous diront</a> que choisir "<i class="spip">import</i>" est une bonne pratique pour se faciliter la vie lorsqu'il s'agit de <strong class="spip">regrouper de vos différents fichiers</strong> afin de créer des feuilles de style "dynamiques", alors que <a href='http://performance.survol.fr/2008/04/css-et-import/' class='spip_out'>d'autres vous diront</a> - du point de vue des performances - qu'utiliser "<i class="spip">link</i>" <strong class="spip">n'est pas bloquant donc plus rapide et à conseiller</strong> si l'on souhaite rejoindre les recommandations données par l'équipe Yahoo.</p> <p class="spip"><strong class="spip">Ce que j'en dis</strong> : puisque vous avez normalement déjà (dans la mesure du possible) <a href='http://www.your-mix.net/blog/developpement/faire-moins-de-requetes-http/' class='spip_out'>regroupé vos fichiers en un seul</a>, il me semble alors qu'utiliser la méthode "<i class="spip">import</i>" perd toute son utilité ; préférez donc en général (sauf rares cas exceptionnels où vous ne pourrez pas faire autrement) la méthode "<i class="spip">link</i>" et <strong class="spip">le problème sera réglé</strong>.</p> <p class="spip">Enfin, <strong class="spip">une dernière petite précision concernant les sélecteurs CSS</strong> : sachez que le rendu pour un élément du <a href='http://fr.wikipedia.org/wiki/Document_Object_Model' class='spip_out'>DOM</a> ciblé de la manière suivante (exemple donné arbitrairement) : <em class="code">table#monTableau tr td.maCellule <!-- htmlA --><code class='spip_code' dir='ltr'>{...}</code><!-- htmlB --></em> sera moins rapide que pour : <em class="code">.maCellule <!-- htmlA --><code class='spip_code' dir='ltr'>{...}</code><!-- htmlB --></em> En effet, contrairement à ce que l'on pourrait croire, <strong class="spip">donner plus de précision dans le ciblage n'aide pas le moteur de rendu du navigateur</strong>, ceci lui fait au contraire calculer plus de choses. En plus, simplifier vos sélecteurs allègera vos CSS, c'est tout bénef' !</p> <p class="spip">Cordialement.</p></div>
		
		<img src="http://feeds.feedburner.com/~r/ym-blog/~4/2kok98Pvzvc" height="1" width="1"/>]]></content:encoded>


		
		<pubDate>Mon, 02 Feb 2009 12:04:00 +0100</pubDate>
	<feedburner:origLink>http://www.your-mix.net/blog/developpement/appeler-les-css-tres-tot</feedburner:origLink></item>
<item>
		<title>Player v1 Beta révision 9</title>
		<link>http://feedproxy.google.com/~r/ym-blog/~3/ROJ8_xBupsg/player-v1-beta-revision-9</link>
		<guid isPermaLink="false">http://www.your-mix.net/blog/annonces/player-v1-beta-revision-9</guid>
		<dc:date>2009-01-29T09:46:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>MAXymeum Prod.</dc:creator>

<category domain="http://your-mix.net/blog/annonces/">Annonces</category>


		<description>Comme nous l'avions annoncé dans ce billet, une nouvelle mise à jour de notre DJ Web MP3 Player en version 1 Beta révision 9 était dans les cartons, prévue pour être rendue publique courant Janvier 2009 ; c'est maintenant chose faite ... ou presque ... Cette mise à jour s'accompagne même de deux ajouts non annoncés supplémentaires. Il s'agit de la présentation du numéro de version lors d'un clic droit (menu contextuel de Flash) n'importe où dans la zone du Player permettant à tout-un-chacun de savoir si le (...)

-
&lt;a href="http://www.your-mix.net/blog/annonces/" rel="directory"&gt;Annonces&lt;/a&gt;


		</description>


 <content:encoded><![CDATA[<div class='rss_chapo'><p class="spip">Comme nous l'avions annoncé <a href='http://www.your-mix.net/blog/annonces/roadmap-player-v1-beta-r9/' class='spip_out'>dans ce billet</a>, une nouvelle <strong class="spip">mise à jour</strong> de notre <strong class="spip">DJ Web MP3 Player</strong> en <strong class="spip">version 1 Beta révision 9</strong> était dans les cartons, prévue pour être rendue publique courant Janvier 2009 ; c'est maintenant chose faite ... ou presque ...</p></div>
		<div class='rss_texte'><p class="spip">Cette mise à jour s'accompagne même de deux ajouts non annoncés supplémentaires. Il s'agit de la <strong class="spip">présentation du numéro de version</strong> lors d'un clic droit (menu contextuel de Flash) n'importe où dans la zone du Player permettant à tout-un-chacun de savoir si le navigateur Web utilisé aura appliqué les prochaines mises à jour ou si il faudra actualiser son cache. De plus, <strong class="spip">le code HTML pour exporter le Player a été retravaillé</strong> pour être raccourci et simplifié.</p> <p class="spip">La version 1 Beta révision 9 du DJ Web MP3 Player <strong class="spip">Your-Mix</strong> est d'ores et déjà finalisée et comporte donc les améliorations et nouvelles fonctionnalités suivantes :</p> <p class="spip">1) Correction de bug lecture aléatoire. <br />
2) URL permanente page du DJ. <br />
3) Code pour exporter le Player. <br />
4) Choix de la couleur de fond. <br />
5) Ajout du texte "[Explicite]". <br />
6) Affichage du numéro de version. <br />
7) Code HTML d'export simplifié.</p> <p class="spip">Cependant, l'affichage de l'URL permanente vers la page du DJ pose un problème puisque les pages en question ne sont pas encore terminées et pleinement fonctionnelles. <strong class="spip">Nous avons alors décidé de ne rendre cette nouvelle version de notre Player publique que lorsque les pages DJ en question le seront</strong>. Merci de votre compréhension.</p> <p class="spip">Cordialement.</p></div>
		
		<img src="http://feeds.feedburner.com/~r/ym-blog/~4/ROJ8_xBupsg" height="1" width="1"/>]]></content:encoded>


		
		<pubDate>Thu, 29 Jan 2009 10:46:00 +0100</pubDate>
	<feedburner:origLink>http://www.your-mix.net/blog/annonces/player-v1-beta-revision-9</feedburner:origLink></item>
<item>
		<title>Compression Gzip ou Deflate</title>
		<link>http://feedproxy.google.com/~r/ym-blog/~3/JmBMx5q3aB0/compression-gzip-ou-deflate</link>
		<guid isPermaLink="false">http://www.your-mix.net/blog/developpement/compression-gzip-ou-deflate</guid>
		<dc:date>2009-01-23T11:03:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Sebastien P.</dc:creator>

<category domain="http://your-mix.net/blog/developpement/">Développement</category>


		<description>"Précédemment dans la série des performances sur le Web" : je vous avais expliqué comment stocker vos composants dans le cache navigateur de vos visiteurs et comment définir une date d'expiration dans le lointain ou proche futur. Cette règle d'optimisation était très importante et permettait d'économiser beaucoup de ressources et de temps de chargement. Passons à la règle numéro 4, toute aussi importante : compresser les composants avec Gzip (ou Deflate). Compresser vos composants a pour effet de (...)

-
&lt;a href="http://www.your-mix.net/blog/developpement/" rel="directory"&gt;Développement&lt;/a&gt;


		</description>


 <content:encoded><![CDATA[<div class='rss_chapo'><p class="spip">"<a href='http://www.your-mix.net/blog/developpement/en-tetes-expires-et-cache-control/' class='spip_out'>Précédemment</a> <i class="spip">dans la série des performances sur le Web</i>" : je vous avais expliqué <strong class="spip">comment stocker vos composants dans le cache navigateur</strong> de vos visiteurs et <strong class="spip">comment définir une date d'expiration</strong> dans le lointain ou proche futur. Cette règle d'optimisation était très importante et permettait d'<strong class="spip">économiser beaucoup de ressources et de temps</strong> de chargement. Passons à la <a href='http://developer.yahoo.com/performance/rules.html#gzip' class='spip_out'>règle numéro 4</a>, toute aussi importante : <strong class="spip">compresser les composants avec Gzip</strong> (ou Deflate).</p></div>
		<div class='rss_texte'><p class="spip">Compresser vos composants a pour effet de <strong class="spip">diminuer les temps de réponse</strong> aux requêtes HTTP que font vos visiteurs. Autrement dit, moins un composant pèse lourd et plus vite il sera acheminé à travers les tuyaux du réseau jusqu'aux ordinateurs des internautes, ce qui est logique. On pourra alors, de la même façon que nous le faisons avec Photoshop, SmushIt ou autre pour nos images, <strong class="spip">compresser via le serveur tout ce qui est à base de texte</strong> (et uniquement, j'y reviendrai). Par exemple, pourquoi ne pas compresser vos pages HTML, vos feuilles de style CSS, vos fichiers JavaScript, XML, TXT et/ou JSON avant de les envoyer au client ? Ceci peut être d'autant plus intéressant que ces fichiers ont pu être alourdis lorsque vous les avez tous regroupés afin de <a href='http://www.your-mix.net/blog/developpement/faire-moins-de-requetes-http/' class='spip_out'>faire moins de requêtes HTTP</a> comme je vous l'avais suggéré et vivement conseillé.</p> <p class="spip">Ceux qui on lu au moins mon billet précédent concernant la mise en cache navigateur des composants me diront "pourquoi compresser les CSS, fichiers JS et autres pour réduire les temps de réponse alors qu'à partir de leur second accès sur le site, les visiteurs auront un cache plein et ces fichiers seront renvoyés par leur disque dur et non plus par le réseau ?". Eh bien la réponse réside plus ou moins dans la question, il s'agit d'<strong class="spip">accélérer le chargement des pages lors d'une première visite et donc d'un accès fait avec un cache vide</strong> ; ceci se justifie encore une fois du fait que les fichiers sont regroupés et donc potentiellement plus lourds car certaines directives (CSS, JS, ...) sont inutilisées sur certaines pages mais bien présentes dans ces fichiers.</p> <p class="spip">Ok, alors comment je fais pour compresser mes composants ? C'est très simple, depuis l'arrivée du protocole HTTP 1.1 et depuis Internet Explorer 4, <strong class="spip">presque tous les navigateurs sont capables de décompresser un contenu renvoyé compressé par le serveur</strong> ; ne vous préoccupez pas de ceux qui n'en sont pas capables, le même contenu leur sera alors automatiquement renvoyé non-compressé pour qu'il n'y ait aucun risque d'incompatibilité. Concrètement, vous configurez votre serveur Apache (pour ceux qui ne me suivent pas régulièrement, je ne fais état sur ce Blog que d'Apache étant le seul que je connais) via <i class="spip">httpd.conf</i> ou <i class="spip">.htaccess</i> (à la racine) pour qu'il compresse les fichiers souhaités avant de les renvoyer à vos visiteurs qui les décompresseront ensuite avant de les lire (et les stocker dans leur cache navigateur), <strong class="spip">le tout d'une manière totalement transparente et automatique</strong>. Sachez que les résultats de cette méthode sont visibles dès les premières secondes après sa mise en place et que son efficacité permet de réduire - d'après Yahoo - les temps de réponse d'environ 70%, pour une seule ligne de code !</p> <p class="spip"><strong class="spip">La syntaxe à adopter est différente selon la version d'Apache</strong> que vous utilisez. En effet, Apache 1.3+ se sert du module <i class="spip">mod_gzip</i> (à télécharger sur <a href='http://sourceforge.net/projects/mod-gzip/' class='spip_out'>cette page</a>, aide à l'installation et à l'utilisation sur <a href='http://www.trustonme.net/didactels/223.html' class='spip_out'>cette page</a>) tandis qu'Apache 2+ intègre par défaut le module <a href='http://httpd.apache.org/docs/2.0/mod/mod_deflate.html' class='spip_out'>mod_deflate</a> qui est très simple à utiliser. Si vous ne savez pas lequel choisir, vous pouvez toujours essayer le code suivant : <em class="code"><!-- htmlA --><code class='spip_code' dir='ltr'><IfModule mod_deflate.c></code><!-- htmlB --><br />
<!-- htmlA --><code class='spip_code' dir='ltr'><FilesMatch "\.(html|php|txt|xml|js|css)$"></code><!-- htmlB --><br />
SetOutputFilter DEFLATE<br />
<!-- htmlA --><code class='spip_code' dir='ltr'></FilesMatch></code><!-- htmlB --><br />
<!-- htmlA --><code class='spip_code' dir='ltr'></IfModule></code><!-- htmlB --></em> qui fait un test de présence pour <i class="spip">mod_deflate</i> avant de compresser uniquement vos fichiers HTML, PHP, TXT, XML, JS et CSS. Vous pourrez ensuite vérifier si ce snippet a fonctionné grâce au <a href='http://www.your-mix.net/blog/developpement/yslow-analyse-et-note-vos-pages/' class='spip_out'>sous-menu "Components" de YSlow</a>. Ces quelques lignes de code donnent exactement le même résultat que celle-ci qui est toutefois plus propre (se servant des <a href='http://fr.wikipedia.org/wiki/Type_MIME' class='spip_out'>mime-type</a>) : <em class="code">AddOutputFilterByType DEFLATE text/html text/xml application/xhtml+xml text/plain application/javascript text/css</em> Une dernière chose, <strong class="spip">n'essayez pas de compresser via Gzip/Deflate vos images, PDF ou autre qui sont des fichiers déjà compressés lors de leur production logicielle</strong>. Les risques sont de consommer des ressources processeur de votre serveur pour rien (eh oui, compresser c'est nécessaire, très bien, mais pas gratuit ni magique) voire d'augmenter leur poids.</p> <p class="spip">Des questions ?</p></div>
		
		<img src="http://feeds.feedburner.com/~r/ym-blog/~4/JmBMx5q3aB0" height="1" width="1"/>]]></content:encoded>


		
		<pubDate>Fri, 23 Jan 2009 12:03:00 +0100</pubDate>
	<feedburner:origLink>http://www.your-mix.net/blog/developpement/compression-gzip-ou-deflate</feedburner:origLink></item>
<item>
		<title>En-têtes Expires et Cache-Control</title>
		<link>http://feedproxy.google.com/~r/ym-blog/~3/UFCDipan8N4/en-tetes-expires-et-cache-control</link>
		<guid isPermaLink="false">http://www.your-mix.net/blog/developpement/en-tetes-expires-et-cache-control</guid>
		<dc:date>2009-01-17T11:01:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Sebastien P.</dc:creator>

<category domain="http://your-mix.net/blog/developpement/">Développement</category>


		<description>"Précédemment dans la série des performances sur le Web" : je vous avais expliqué quels sont les bénéfices et les pendants à utiliser un CDN. En conclusion, le comportement à adopter face à cette règle d'optimisation - si vous n'êtes pas fortunés - était selon moi l'ignorance du moins pour l'instant afin de se concentrer d'avantage sur les règles suivantes comme la très importante règle numéro 3 : ajouter des en-têtes Expires et Cache-Control. Comme promis, nous allons reparler ici du cache client. Sans entrer (...)

-
&lt;a href="http://www.your-mix.net/blog/developpement/" rel="directory"&gt;Développement&lt;/a&gt;


		</description>


 <content:encoded><![CDATA[<div class='rss_chapo'><p class="spip">"<a href='http://www.your-mix.net/blog/developpement/utiliser-un-cdn/' class='spip_out'>Précédemment</a> <i class="spip">dans la série des performances sur le Web</i>" : je vous avais expliqué <strong class="spip">quels sont les bénéfices et les pendants à utiliser un CDN</strong>. En conclusion, <strong class="spip">le comportement à adopter face à cette règle</strong> d'optimisation - si vous n'êtes pas fortunés - <strong class="spip">était selon moi l'ignorance</strong> du moins pour l'instant afin de se concentrer d'avantage sur les règles suivantes comme la très importante <a href='http://developer.yahoo.com/performance/rules.html#expires' class='spip_out'>règle numéro 3</a> : <strong class="spip">ajouter des en-têtes Expires et Cache-Control</strong>.</p></div>
		<div class='rss_texte'><p class="spip"><a href='http://www.your-mix.net/blog/developpement/yslow-analyse-et-note-vos-pages/' class='spip_out'>Comme promis</a>, nous allons reparler ici du <strong class="spip">cache client</strong>. Sans entrer dans les détails, <strong class="spip">ajouter des en-têtes HTTP Expires et Cache-Control</strong> sur vos fichiers permet de <strong class="spip">contrôler ce cache</strong>. Le principe est simple, lors de sa première visite sur votre site, un visiteur lambda fera un certain nombre de requêtes HTTP à votre serveur (nombre que vous avez réduit grâce à <a href='http://www.your-mix.net/blog/developpement/faire-moins-de-requetes-http/' class='spip_out'>ce billet</a>) ; lorsque votre serveur enverra sa réponse pour chaque composant, il enverra aussi les fameuses en-têtes/directives qui donneront l'ordre au navigateur du visiteur de stocker les composants en question dans son répertoire dédié au cache. Autrement dit, <strong class="spip">vos composants seront ensuite copiés quelque-part sur les ordinateurs de vos visiteurs</strong>.</p> <p class="spip">L'intérêt de cette méthode ne réside donc pas dans la première visite (cache vide) mais dans les suivantes (cache plein). Les composants ayant déjà été téléchargés et stockés,<strong class="spip"> le navigateur ne renverra alors plus de requêtes HTTP</strong>, on élimine ainsi les temps de réponse et de trafic sur le réseau pour chacun d'eux <strong class="spip">ce qui est un gain conséquent</strong> ! De même, en plus d'un temps de chargement des pages diminué pour vos visiteurs (ce qui améliore leur expérience de navigation sur votre site), comme les composants ne sont pas téléchargés inutilement à chaque fois, vous faites <strong class="spip">des économies toutes aussi conséquentes sur votre bande passante</strong>. C'est à peu près tout pour le côté théorique, passons au côté pratique.</p> <p class="spip">Il faut toujours <strong class="spip">séparer votre contenu en deux types</strong> : celui <strong class="spip">dynamique</strong> (qui est modifié souvent comme vos pages html sur lesquelles les visiteurs peuvent ajouter des commentaires ou votre page d'accueil par exemple) et celui <strong class="spip">statique</strong> (qui est très rarement modifié comme les images composant votre Web design, vos CSS, vos fichiers JavaScript et vos animations Flash, voire certaines pages par exemple). Cette distinction est très importante car les en-têtes Expires et Cache-Control servent à stocker vos composants dans le cache client, oui mais en précisant quand même <strong class="spip">une date de "péremption"</strong>. Concrètement, on choisira de faire stocker (bien) plus longtemps les fichiers dits statiques que ceux dits dynamiques. On parle de faire <strong class="spip">expirer ces fichiers statiques à une date éloignée dans le futur</strong>, soit une ou plusieurs années ; vous imaginez avoir réglé vos fichiers dynamiques sur la même date d'expiration, admettons que les commentaires ajoutés aujourd'hui sur vos pages n'apparaissent à vos anciens visiteurs que dans deux ans. C'est un schéma absolument non-envisageable. <strong class="spip">Pour les fichiers dynamiques, on choisira une date d'expiration quelques dizaines de secondes</strong> (quelques minutes tout au plus) <strong class="spip">dans le futur</strong> après un premier accès ; même l'AJAX peut être mis en cache, c'est toujours ça de gagné.</p> <p class="spip">A noter - et c'est <strong class="spip">très important</strong> - qu'une fois vos fichiers statiques mis en cache pour plusieurs années, les modifier et les ré-uploader sur votre serveur ne sera pas suffisant pour que vos visiteurs au cache plein voient les changements avant leur expiration (sauf après avoir vidé le cache manuellement) ; <strong class="spip">vous devez alors renommer tous vos fichiers statiques après chaque modification</strong> pour que les changements soient effectifs à tout un chacun. Personnellement, j'ajoute la date à laquelle j'ai modifié mes fichiers dans leurs noms comme ceci : <i class="spip">maSuperCSS_150109.css</i>, <i class="spip">monSuperLogo_150109.png</i>, etc. (il est aussi possible de passer la date en paramètre via l'url comme ceci : <i class="spip">maSuperCSS.css ?date=150109</i>).</p> <p class="spip">Comment règle-t'on les en-têtes Expires et Cache-Control ? Ceci est très simple, c'est l'histoire de quelques lignes dans <a href='http://en.wikipedia.org/wiki/Httpd.conf' class='spip_out'>le fichier de configuration d'Apache</a> (je ne parlerai ici que d'Apache étant le seul que je connais, désolé) si vous y avez accès, sinon vous pouvez les ajouter à <a href='http://fr.wikipedia.org/wiki/Htaccess' class='spip_out'>un fichier htaccess</a> à la racine de votre serveur. On pourrait tout à fait envoyer une directive pour Expires et une autre pour Cache-Control séparément (ce qui signifie un peu plus de lignes à coder) mais <strong class="spip">Apache 2.0+ nous propose un module qui se charge d'envoyer les deux tout en n'écrivant qu'une seule ligne</strong> par <a href='http://fr.wikipedia.org/wiki/Type_MIME' class='spip_out'>type de fichier (mime-type)</a>, pourquoi se priver ? Avant de vous donner un exemple de code, il est important de souligner que <strong class="spip">Cache-Control et Expires reviennent au même</strong> seulement Cache-Control est une version plus évoluée d'Expires apparue avec <a href='http://fr.wikipedia.org/wiki/Hypertext_Transfer_Protocol' class='spip_out'>le protocole HTTP 1.1</a> pour répondre à des besoins plus spécifiques en proposant <a href='http://fr.wikipedia.org/wiki/M%C3%A9moire_cache_d%27internet' class='spip_out'>des paramètres optionnels poussés</a> (Cache-Control prend alors le pas sur Expires si disponible) ; je ne rentrerai pas dans les détails sur ce billet mais en attendant, ceux que ça intéresse peuvent d'ores et déjà consulter <a href='http://performance.survol.fr/2008/10/expires-et-cache-control-une-date-limite-de-consommation-pour-vos-contenus/' class='spip_out'>cette page</a> ou encore <a href='http://performance.survol.fr/2008/05/prive-ou-public/' class='spip_out'>celle-ci</a> qui traite de la mise en cache de contenu lié aux zones personnelles nécessitant une identification login/pass sur des réseaux partagés ...</p> <p class="spip">Voici un exemple non exhaustif des directives les plus courantes que vous pouvez faire avec le fameux module <a href='http://httpd.apache.org/docs/2.0/mod/mod_expires.html' class='spip_out'>mod_expires</a> d'Apache : <em class="code">ExpiresActive On<br />ExpiresDefault "access plus 2 minutes"<br />ExpiresByType text/html "access plus 2 minutes"<br />ExpiresByType text/xml "access plus 2 minutes"<br />ExpiresByType application/xhtml+xml "access plus 2 minutes"<br />ExpiresByType application/x-shockwave-flash "access plus 1 day"<br />ExpiresByType text/plain "modification plus 1 day"<br />ExpiresByType image/vnd.microsoft.icon "modification plus 5 years"<br />ExpiresByType image/jpeg "modification plus 5 years"<br />ExpiresByType image/png "modification plus 5 years"<br />ExpiresByType image/gif "modification plus 5 years"<br />ExpiresByType application/javascript "modification plus 5 years"<br />ExpiresByType text/css "modification plus 5 years"</em> On définit donc une ligne correspondant à la directive à adopter par défaut et/ou une ligne par type de fichier (dans l'ordre : html, xml, xhtml, swf, txt, ico, jpg, png, gif, js, css). Je vous l'avais dit, <strong class="spip">c'est très simple et c'est aussi très puissant permettant un réglage fin</strong> (années, mois, semaines, jours, heures, minutes, secondes) pour chaque type de composant. <strong class="spip">La date d'expiration peut aussi être absolue</strong> (modification plus ...) <strong class="spip">ou relative</strong> à la date à laquelle vos visiteurs viendront la première fois sur votre site.</p> <p class="spip">Une dernière chose, <a href='http://www.your-mix.net/blog/developpement/faire-moins-de-requetes-http/' class='spip_out'>j'avais parlé</a> d'un <strong class="spip">intérêt de coupler les sprites à cette méthode de contrôle du cache client</strong>. En effet, si un visiteur arrive sur une page où il chargera une grosse image contenant des zones non utilisées (j'entends par là non affichées), cette image sera donc maintenant stockée dans son cache client, par conséquent si il parcours votre site c'est cette image stockée qui sera utilisée et uniquement pour toutes les autres pages (là ou seront affichées les zones précédemment non affichées). Autrement dit, <strong class="spip">on fait un pré-chargement valable pour tout le reste du site</strong>. Google notamment utilise cette technique.</p> <p class="spip">Des questions ?</p></div>
		
		<img src="http://feeds.feedburner.com/~r/ym-blog/~4/UFCDipan8N4" height="1" width="1"/>]]></content:encoded>


		
		<pubDate>Sat, 17 Jan 2009 12:01:00 +0100</pubDate>
	<feedburner:origLink>http://www.your-mix.net/blog/developpement/en-tetes-expires-et-cache-control</feedburner:origLink></item>
<item>
		<title>Utiliser un CDN</title>
		<link>http://feedproxy.google.com/~r/ym-blog/~3/v3Txiv7JX6k/utiliser-un-cdn</link>
		<guid isPermaLink="false">http://www.your-mix.net/blog/developpement/utiliser-un-cdn</guid>
		<dc:date>2009-01-15T10:59:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Sebastien P.</dc:creator>

<category domain="http://your-mix.net/blog/developpement/">Développement</category>


		<description>"Précédemment dans la série des performances sur le Web" : je vous avais expliqué ce qu'est une requête HTTP, pourquoi en faire trop par page est pénalisant et comment en faire moins sans pour autant dénaturer votre site Web, il s'agissait de la règle d'optimisation numéro 1 sur YSlow ; on va alors parler aujourd'hui de la règle numéro 2 : utiliser un CDN. Un CDN (pour "Content Delivery Network" ou "réseau de 'livraison' de contenu" en bon français) est effectivement le mécanisme qui gèrera les réponses (...)

-
&lt;a href="http://www.your-mix.net/blog/developpement/" rel="directory"&gt;Développement&lt;/a&gt;


		</description>


 <content:encoded><![CDATA[<div class='rss_chapo'><p class="spip">"<a href='http://www.your-mix.net/blog/developpement/faire-moins-de-requetes-http/' class='spip_out'>Précédemment</a> <i class="spip">dans la série des performances sur le Web</i>" : je vous avais expliqué <strong class="spip">ce qu'est une requête HTTP</strong>, pourquoi <strong class="spip">en faire trop</strong> par page <strong class="spip">est pénalisant</strong> et <strong class="spip">comment en faire moins</strong> sans pour autant dénaturer votre site Web, il s'agissait de la règle d'optimisation numéro 1 sur YSlow ; on va alors parler <strong class="spip">aujourd'hui</strong> de <a href='http://developer.yahoo.com/performance/rules.html#cdn' class='spip_out'>la règle numéro 2</a> : <strong class="spip">utiliser un CDN</strong>.</p></div>
		<div class='rss_texte'><p class="spip"><a href='http://fr.wikipedia.org/wiki/Content_Delivery_Network' class='spip_out'>Un CDN</a> (pour "Content Delivery Network" ou "réseau de 'livraison' de contenu" en bon français) est effectivement le mécanisme qui gèrera les réponses aux requêtes HTTP de vos visiteurs de manière à ce que <strong class="spip">vos fichiers</strong> leur <strong class="spip">soient acheminés par les chemins les plus courts</strong> possibles sur le réseau. Autrement dit, il s'agit de faire des <strong class="spip">économies en temps de réponse mais aussi en bande passante</strong> (et en heures de travail) car les CDN comprennent aussi leur propre gestion automatisée du cache client.</p> <p class="spip">Utiliser un CDN c'est bien ; oui, utiliser un CDN c'est bien ...</p> <p class="spip">D'après ce que j'ai compris ceci fonctionne plus ou moins comme un espace de stockage FTP sur lequel vous déposez vos fichiers et c'est tout. Vous devrez peut-être mettre à jour vos liens par la suite mais ça s'arrête là. En pratique <strong class="spip">on stocke donc tous les fichiers statiques</strong> (c'est à dire qui sont très rarement modifiés : css, js, swf, png, jpg, etc.) <strong class="spip">sur le CDN</strong> et tous les fichiers dynamiques (html, php, etc.) sur un serveur classique.</p> <p class="spip">... Mais utiliser un CDN c'est cher !</p> <p class="spip">Si votre site Web vous rapporte(ra), qu'il a pour vocation d'être internationalisé, que vous pouvez investir alors allez-y car le retour sur <strong class="spip">l'investissement devrait valoir le coup</strong> (chez Yahoo on parle d'une diminution des temps de réponse de 20% depuis qu'ils utilisent un CDN). Cependant dans la plupart des cas, <strong class="spip">les coûts</strong> liés à la mise en place et à l'utilisation d'un tel service <strong class="spip">sont rédhibitoires</strong> (soit plusieurs milliers d'euros par mois !) de même que cette utilisation n'est pas forcément justifiée (ceci dépend principalement de l'importance du site). <strong class="spip">Mon conseil est donc de passer outre cette règle d'optimisation</strong> (du moins pour l'instant), peu importe que YSlow vous octroie un méchant "F" tant que vous faites ce qu'il faut pour avoir un "A" resplendissant partout ailleurs.</p> <p class="spip">Pour ceux qui souhaitent tout de même en savoir plus, j'ai trouvé <a href='http://www.haute-disponibilite.net/2008/01/28/faut-il-utiliser-un-cdn-type-akamai-pour-gerer-son-trafic-web/' class='spip_out'>cette page très bien faite où tout est détaillé comme il se doit</a> et si ce n'est pas suffisant voici des liens directs vers les sites des trois fournisseurs de CDN cités par Yahoo : <a href='http://www.akamai.com/' class='spip_out'>Akamai Technologies</a>, <a href='http://www.mirror-image.com/' class='spip_out'>Mirror Image Internet</a> et <a href='http://www.limelightnetworks.com/' class='spip_out'>Limelight Networks</a>.</p> <p class="spip">Cordialement.</p></div>
		
		<img src="http://feeds.feedburner.com/~r/ym-blog/~4/v3Txiv7JX6k" height="1" width="1"/>]]></content:encoded>


		
		<pubDate>Thu, 15 Jan 2009 11:59:00 +0100</pubDate>
	<feedburner:origLink>http://www.your-mix.net/blog/developpement/utiliser-un-cdn</feedburner:origLink></item>
<item>
		<title>Faire moins de requêtes HTTP</title>
		<link>http://feedproxy.google.com/~r/ym-blog/~3/lTiNhVG6zNo/faire-moins-de-requetes-http</link>
		<guid isPermaLink="false">http://www.your-mix.net/blog/developpement/faire-moins-de-requetes-http</guid>
		<dc:date>2009-01-13T10:58:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Sebastien P.</dc:creator>

<category domain="http://your-mix.net/blog/developpement/">Développement</category>


		<description>"Précédemment dans la série des performances sur le Web" : je vous avais expliqué en détails comment vous servir de YSlow, outil nécessaire à tout bon développeur soucieux des performances de ses pages Web. J'espère que vous avez pu jouer un peu avec et déjà essayer d'obtenir des notes pour quelques pages. Quoi qu'il en soit, YSlow se base sur 13 règles d'optimisation lors de l'analyse de chaque page passée au crible afin de décerner des notes ; comme prévu, je vais aujourd'hui me concentrer sur la règle (...)

-
&lt;a href="http://www.your-mix.net/blog/developpement/" rel="directory"&gt;Développement&lt;/a&gt;


		</description>


 <content:encoded><![CDATA[<div class='rss_chapo'><p class="spip">"<a href='http://www.your-mix.net/blog/developpement/yslow-analyse-et-note-vos-pages/' class='spip_out'>Précédemment</a> <i class="spip">dans la série des performances sur le Web</i>" : je vous avais expliqué en détails comment vous servir de <a href='http://developer.yahoo.com/yslow/' class='spip_out'>YSlow</a>, outil nécessaire à tout bon développeur soucieux des performances de ses pages Web. J'espère que vous avez pu jouer un peu avec et déjà essayer d'obtenir des notes pour quelques pages. Quoi qu'il en soit, YSlow se base sur <a href='http://developer.yahoo.com/performance/rules.html' class='spip_out'>13 règles d'optimisation</a> lors de l'analyse de chaque page passée au crible afin de décerner des notes ; comme prévu, <strong class="spip">je vais aujourd'hui me concentrer sur la règle numéro 1 : réduire le nombre de vos requêtes HTTP</strong> (<a href='http://developer.yahoo.com/performance/rules.html#num_http' class='spip_out'>minimize HTTP requests</a> sur la page dédiée Yahoo).</p></div>
		<div class='rss_texte'><p class="spip">Le nombre de requêtes HTTP correspond au nombre de composants que vous chargez avec le document (x)HTML. Il s'agit des fichiers CSS, JavaScript, des images (images de fond et icônes), du Flash si vous en avez, etc. Par conséquent, c'est très simple, <strong class="spip">plus vous avez de composants</strong> plus votre page est riche mais <strong class="spip">plus vous êtes pénalisés</strong>.</p> <p class="spip">Dans le temps du <strong class="spip">bas débit</strong>, quand on surfait sur le Web avec 56kbps comme limite de réception maximale, les Webmestres (pour être générique) concevaient et développaient des pages mal faites à base de tableaux à outrance mais on n'y retrouvait ni JavaScript (ou très peu), ni CSS (ou très peu), presque pas de Flash (beaucoup de gif animés par contre) et une attention toute particulière était apportée au poids et à la taille des photos car sinon j'imagine que chacun pouvait aller se chercher un café après avoir cliqué sur un lien en attendant que la page ne s'affiche (j'exagère à peine). Certes de nos jours le <strong class="spip">haut débit</strong> permet de faire passer plus d'informations plus rapidement, certes les sites que nous visitons sont dans l'ensemble mieux codés mais les Webmestres ont une forte tendance à abuser de ce haut débit et de ce fait bourrent leurs pages de JavaScript (parce que c'est la mode), apportent un peu moins d'attention à compresser et réduire leurs images, etc. J'espère que vous n'êtes pas dans ce cas parce que <strong class="spip">globalement le débit, la qualité et l'accessibilité ont augmenté mais du point de vue des performances ce n'est pas mieux qu'une dizaine d'années auparavant</strong>.</p> <p class="spip">J'ai parlé de faire passer plus d'informations plus rapidement, dans l'idéal c'est ce que l'on devrait faire : <strong class="spip">favoriser le fond plutôt que la forme</strong> ou du moins trouver un juste milieu. Vos visiteurs viennent - il me semble - pour du contenu plus que pour votre beau Web design ou vos événements JavaScript évolués. Bien sûr tout ceci joue un rôle important et même si, pour réduire le nombre de vos requêtes HTTP, <strong class="spip">un premier conseil est de simplifier vos pages</strong> (prenez exemple sur <a href='http://www.google.fr/' class='spip_out'>Google</a> ou <a href='http://www.feedburner.com/fb/a/home' class='spip_out'>FeebBurner</a>, ils sont "beaux" et font très professionnel tout en étant simples et Google se trouve bien en-dessous des 500ms), on n'a pas toujours l'envie ou la possibilité de procéder à une telle simplification pouvant dénaturer l'image et/ou le(s) message(s) que l'on souhaite faire passer. Dans ce cas on peut au moins faire en sorte que le contenu informatif s'affiche avant tout le reste pour que le visiteur ait moins l'impression d'attendre (qu'apporte le fait d'avoir sous les yeux tout un design qui se construit au fur et à mesure alors que ce que l'on souhaite lire n'est pas encore affiché ? Là aussi j'exagère à peine). On peut aussi commencer (oui c'est un - bon - début mais ce n'est qu'un début) par <strong class="spip">faire moins de requêtes HTTP</strong>. Je vous entends déjà penser tout fort "Sebastien <strong class="spip">tu viens de nous dire que ceci revient à simplifier nos pages</strong>", eh bien figurez-vous que l'<strong class="spip">on peut tout à fait faire autrement</strong> !</p> <p class="spip">Avant de vous donner mes petits secrets, <strong class="spip">je dois</strong> tout de même <strong class="spip">vous expliquer un peu pourquoi faire moins de requêtes HTTP permet à vos pages de charger plus vite donc pourquoi en faire trop est pénalisant</strong>. Concrètement, pour chaque composant d'une page, le navigateur Internet (peu importe qu'il soit Firefox, Opera, Safari, Internet Explorer ou autre) envoie au serveur (là où vos fichiers sont stockés) une requête soit l'ordre de servir/renvoyer le composant en question. Entre le départ de cet ordre (de votre ordinateur) et le temps qu'il arrive au serveur s'écoule un certain temps variable en fonction de beaucoup de paramètres tels que l'état de votre ligne, son débit, votre situation géographique (éloignement du serveur), etc. Une fois l'ordre arrivé au serveur, il se passe encore un certain temps avant qu'il ne soit exécuté (on appelle ça le temps de réponse). Ensuite, l'ordre est donc exécuté, le composant fait le chemin jusqu'à vous (la même chose en sens inverse) et aux caractéristiques de la ligne vient alors s'ajouter le poids du composant qui fait que cette dernière étape sera plus ou moins longue. En résumé, pour chaque composant est fait ce que l'on appelle un aller-retour serveur. Tous ces transits via le réseau (ne pas oublier qu'Internet n'est qu'un nombre incalculable d'ordinateurs inter-connectés) sont affectés par des données presque incontrôlables, <strong class="spip">en faire moins permet logiquement de grignoter plusieurs centaines de millisecondes sur le temps total d'affichage de vos pages</strong>. <strong class="spip">De même, chaque aller-retour serveur lui coûte en ressources</strong> et en <a href='http://fr.wikipedia.org/wiki/Bande_passante' class='spip_out'>bande passante</a>, imaginez que vous ayez 500 000 visiteurs uniques par jour ... or c'est bien ce que vous voulez non ?</p> <p class="spip">Première recommandation : <strong class="spip">si vous avez plusieurs fichiers JavaScript, regroupez-les en un seul</strong> à chaque fois que vous le pouvez, <strong class="spip">de même pour vos fichiers CSS</strong>. Il y a toujours des cas où il n'est pas évident de tout regrouper mais en général c'est possible et il s'avère que c'est la recommandation la plus simple de toutes celles qui suivront alors allez-y les yeux fermés, c'est toujours 2 aller-retour serveur économisés pour 3 fichiers JavaScript par exemple (et en avoir 3 est plutôt courant de nos jours). Seconde recommandation : <strong class="spip">pour ce qui est des images</strong>, du moins les images de fond définies dans vos CSS, je vous conseille vivement de <strong class="spip">créer ce que l'on appelle des "sprites"</strong>. Il s'agit là encore de regrouper toutes vos images de fond - chaque fois que c'est possible - en une seule qui sera positionnée dans vos balises grâce à la propriété CSS <em class="code">background-position :[décallage en x]px [décallage en y]px ;</em> Si il est difficile de regrouper toutes les images, il est tout à fait possible de le faire suivant leur thème ; par exemple, voici <a href='http://static.your-mix.net/img/sprites/spriteBase_241208.png' class='spip_out'>le sprite général</a> <strong class="spip">Your-Mix</strong>, <a href='http://static.your-mix.net/img/sprites/spriteIcones_060109.png' class='spip_out'>le sprite des icônes</a> et enfin <a href='http://static.your-mix.net/img/sprites/spriteFonds_231208.png' class='spip_out'>le sprite des fonds</a> répétés sur l'axe des abscisses. Si l'on fait le total, au lieu de faire 69 requêtes HTTP pour des images, il n'en est fait que 3. De plus, <strong class="spip">une grosse image</strong> telle que le sprite général <strong class="spip">pèse moins lourd que la somme de toutes les petites images la composant séparément</strong> (60ko environ contre 120ko environ) mais je vous l'accorde, parfois on va faire charger des icônes inutilisées sur certaines pages ... c'est tout l'intérêt de cette méthode couplée au cache client, j'en reparlerai très bientôt. Pour utiliser les sprites en CSS, on appellera l'image une seule fois comme ceci : <em class="code"><!-- htmlA --><code class='spip_code' dir='ltr'>#bandeauHeader,#barreRecherche,#bandeauFooter{background-image:url(http://static.your-mix.net/img/sprites/spriteFonds_231208.png);background-repeat:repeat-x;}</code><!-- htmlB --></em> puis on se positionnera dans les blocs de cette manière : <em class="code"><!-- htmlA --><code class='spip_code' dir='ltr'>#bandeauFooter{background-position:0px -310px;}</code><!-- htmlB --></em> Une dernière chose (je sais c'est long), <strong class="spip">pour créer vos sprites</strong>, vous pouvez utiliser ce bon vieux Photoshop (et je vous le conseille !) mais sachez qu'<strong class="spip">il existe des outils en ligne</strong> tels que <a href='http://spritegen.website-performance.org/' class='spip_out'>Website Performance CSS Sprite Generator</a> ou <a href='http://www.csssprites.com/' class='spip_out'>CSS Sprite Generator</a>.</p> <p class="spip">Des questions ?</p></div>
		
		<img src="http://feeds.feedburner.com/~r/ym-blog/~4/lTiNhVG6zNo" height="1" width="1"/>]]></content:encoded>


		
		<pubDate>Tue, 13 Jan 2009 11:58:00 +0100</pubDate>
	<feedburner:origLink>http://www.your-mix.net/blog/developpement/faire-moins-de-requetes-http</feedburner:origLink></item>



</channel>

</rss>
