<?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; body</title>
	<atom:link href="http://performance.survol.fr/avec/body/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>Styles avec et sans Javascript</title>
		<link>http://performance.survol.fr/2008/08/styles-avec-et-sans-javascript/</link>
		<comments>http://performance.survol.fr/2008/08/styles-avec-et-sans-javascript/#comments</comments>
		<pubDate>Fri, 08 Aug 2008 10:00:52 +0000</pubDate>
		<dc:creator>Éric</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[body]]></category>
		<category><![CDATA[className]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[documentElement]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[style]]></category>

		<guid isPermaLink="false">http://performance.survol.fr/?p=105</guid>
		<description><![CDATA[Charger le javascript le plus tard possible, ou au moins de manière asynchrone, implique que le visiteur risque de voir la page avant l&#8217;exécution du dit javascript. Si le javascript enrichit ou modifie la page, le visiteur aura la désagréable surprise &#8230; <a href="http://performance.survol.fr/2008/08/styles-avec-et-sans-javascript/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Charger le javascript <a href="http://performance.survol.fr/2008/04/javascript-a-sa-place/">le plus tard possible</a>, ou au moins <a href="http://performance.survol.fr/2008/08/javascript-non-bloquant/">de manière asynchrone</a>, implique que le visiteur risque de voir la page avant l&#8217;exécution du dit javascript. Si le javascript enrichit ou modifie la page, le visiteur aura la désagréable surprise de voir la page se modifier sous ses yeux.</p>
<p>Dans un des premiers billets je vous proposais d&#8217;<a href="http://performance.survol.fr/2008/04/attendre-le-javascript/">ajouter une classe <code>js</code> à la balise <code>&lt;body&gt;</code></a>. L&#8217;idée est de différencier dès le début du rendu si la page est destinée à un affichage avec ou sans javascript.<span id="more-105"></span></p>
<h3>Ajouter une classe au <code>&lt;body&gt;</code></h3>
<p>Pour l&#8217;exemple je vous proposais le code suivant juste après l&#8217;ouverture de <code>&lt;body&gt;</code> :</p>
<pre>&lt;script type="application/javascript"&gt;
document.body.className = "js " + document.body.className ;
&lt;/script&gt;</pre>
<p>J&#8217;ai un problème avec ça. On m&#8217;a fait la remarque que parfois les noeuds <acronym title="document object model">DOM</acronym> souhaités ne sont pas disponibles quand le javascript s&#8217;exécute. Le fait que la balise d&#8217;ouverture soit déjà passée n&#8217;offrirait pas de garantie à ce niveau. J&#8217;ai quand même un doute pour le document.body. Personnellement je ne l&#8217;ai pas encore vue en défaut.</p>
<p>Amis lecteurs, êtes-vous capables de me trouver un contre-exemple où le <code>document.body</code> n&#8217;est pas disponible et utilisable dès l&#8217;ouverture la balise correspondante ? Vous avez le droit à n&#8217;importe quel <a href="http://developer.yahoo.com/yui/articles/gbs/">navigateur grade A</a> pour vos tests, et de monter tous les scénarios tordus que vous voulez. Même un résultat aléatoire me convient. L&#8217;idée c&#8217;est de prouver que cela peut arriver, et éventuellement de cerner les situations où c&#8217;est le cas.</p>
<h3>Ou sur le <code>&lt;html&gt;</code></h3>
<p>Le cas échéant il y a une seconde technique, qui est d&#8217;utiliser document.documentElement, qui logiquement fait référence au noeud <code>&lt;html&gt;</code>. Là on a la certitude de pouvoir y accéder en javascript. Les navigateurs acceptent tous de jouer avec document.documentElement.className donc cela pourrait être une solution. Le second avantage c&#8217;est que je peux lancer ma ligne de script dès le début du <code>&lt;head&gt;</code>, je n&#8217;ai plus besoin d&#8217;attendre le corps de la page pour cela.</p>
<pre>&lt;script type="application/javascript"&gt;
document.documentElement.className = "js " + document.documentElement.className ;
&lt;/script&gt;</pre>
<p>Le défaut que je vois est théorique ce coup ci. <a href="http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-one-html.html#ID-58190037">Les spécifications DOM HTML</a> indiquent bien la présence d&#8217;un attribut className pour <code>&lt;html&gt;</code>. Cet attribut javascript sert à accéder et modifier l&#8217;attribut class de la balise. Or là il y a une incohérence puisque dans les spécifications HTML 4 et XHTML 1, la balise <code>&lt;html&gt;</code> n&#8217;a pas d&#8217;attribut class. Mon javascript est fonctionnel et respecte ses propres spécifications, mais je lui fais faire quelque chose que je sais aller à l&#8217;encontre des recommandations du format HTML.</p>
<p>En pratique cette seconde technique fonctionne et nos navigateurs laxistes acceptent tous de mettre des classes à <code>&lt;html&gt;</code>, que ce soit statiquement dans le code HTML ou dynamiquement via javascript. Maintenant si je pouvais éviter cela serait quand même mieux. À défaut j&#8217;attendrais HTML 5, où l&#8217;attribut class est explicitement autorisé sur <code>&lt;html&gt;</code>.</p>
<h3>Sur ce qui doit être recommandé</h3>
<p>Ces deux techniques ont un gros potentiel, mais j&#8217;attend votre aide pour savoir lequel je dois conseiller. Si je n&#8217;ai pas de contre-exemple pour la première solution, alors restons avec. Sinon l&#8217;utilisation de <code>document.documentElement</code> peut être un bon compromis.</p>
]]></content:encoded>
			<wfw:commentRss>http://performance.survol.fr/2008/08/styles-avec-et-sans-javascript/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
