<?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>The Tech Guy FR &#187; jQuery</title>
	<atom:link href="http://blog.juliencrouzet.fr/tag/jquery/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.juliencrouzet.fr</link>
	<description>Le blog de Julien CROUZET</description>
	<lastBuildDate>Thu, 01 Jul 2010 19:38:12 +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>jQuery 1.3 &#8230; Champagne !</title>
		<link>http://blog.juliencrouzet.fr/121/jquery-13-champagne/</link>
		<comments>http://blog.juliencrouzet.fr/121/jquery-13-champagne/#comments</comments>
		<pubDate>Thu, 15 Jan 2009 10:10:39 +0000</pubDate>
		<dc:creator>c2c</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://blog.juliencrouzet.fr/?p=121</guid>
		<description><![CDATA[
Warning: call_user_func_array() expects parameter 1 to be a valid callback, first array member is not a valid class name or object in /home/www/blog.juliencrouzet.fr/wp-includes/plugin.php on line 166

Call Stack:
    0.0001     623456   1. {main}() /home/www/blog.juliencrouzet.fr/index.php:0
    0.0002     628984   2. require('/home/www/blog.juliencrouzet.fr/wp-blog-header.php') /home/www/blog.juliencrouzet.fr/index.php:17
    0.2026   37717056   3. require_once('/home/www/blog.juliencrouzet.fr/wp-includes/template-loader.php') /home/www/blog.juliencrouzet.fr/wp-blog-header.php:16
    0.2035   37719976   4. do_feed() /home/www/blog.juliencrouzet.fr/wp-includes/template-loader.php:14
    0.2035   37720256   5. do_action() /home/www/blog.juliencrouzet.fr/wp-includes/functions.php:1721
    0.2035   37722280   6. call_user_func_array() /home/www/blog.juliencrouzet.fr/wp-includes/plugin.php:395
    0.2035   37722336   7. do_feed_rss2() /home/www/blog.juliencrouzet.fr/wp-includes/plugin.php:0
    0.2035   37722528   8. load_template() /home/www/blog.juliencrouzet.fr/wp-includes/functions.php:1753
    0.2036   37784696   9. require_once('/home/www/blog.juliencrouzet.fr/wp-includes/feed-rss2.php') /home/www/blog.juliencrouzet.fr/wp-includes/theme.php:1087
    0.2086   37866864  10. the_excerpt_rss() /home/www/blog.juliencrouzet.fr/wp-includes/feed-rss2.php:46
    0.2103   37870368  11. apply_filters() /home/www/blog.juliencrouzet.fr/wp-includes/feed.php:177
    0.2105   37872960  12. call_user_func_array() /home/www/blog.juliencrouzet.fr/wp-includes/plugin.php:166

]]></description>
			<content:encoded><![CDATA[<div id="attachment_112" class="wp-caption aligncenter" style="width: 241px"><img class="size-full wp-image-112 " title="jquery_logo" src="http://blog.juliencrouzet.fr/wp-content/uploads/2008/12/jquery_logo.gif" alt="jquery_logo" width="231" height="85" /><p class="wp-caption-text">jQuery 1.3 sort, enfin <img src='http://blog.juliencrouzet.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p></div>
<p>Youpi, houra et autre bravos &#8230; <a href="http://docs.jquery.com/Release:jQuery_1.3">jQuery 1.3</a> est enfin sortie des cartons !</p>
<p>Ce n&#8217;est pas juste une version de plus, c&#8217;est (a mon humble avis) la release qui va faire de jQuery THE librairie Javascript.</p>
<ul>
<li><a href="http://sizzlejs.com/">Sizzle</a>, le moteur de sélecteur CSS dont j&#8217;avais <a href="http://blog.juliencrouzet.fr/2008/12/19/optimiser-l-utilisation-de-jquery/">déjà parlé</a> est enfin en place, avec des performances bluffantes ;</li>
<li>jQuery devient la première librairie JS qui ne fait pas de <a href="http://www.howtocreate.co.uk/tutorials/jsexamples/sniffer.html">Browser Sniffing</a>, et il <a href="http://www.jibbering.com/faq/faq_notes/not_browser_detect.html">était temps</a> ;</li>
<li>Une grosse réécriture de l&#8217;HTML Injection, avec aussi, un gain de performance étonnant ;</li>
<li>Pleins d&#8217;autres choses !</li>
</ul>
<p>Re youpi ! Re bravo !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.juliencrouzet.fr/121/jquery-13-champagne/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Optimiser l&#039;utilisation de jQuery</title>
		<link>http://blog.juliencrouzet.fr/84/optimiser-l-utilisation-de-jquery/</link>
		<comments>http://blog.juliencrouzet.fr/84/optimiser-l-utilisation-de-jquery/#comments</comments>
		<pubDate>Thu, 18 Dec 2008 23:16:07 +0000</pubDate>
		<dc:creator>c2c</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://blog.juliencrouzet.fr/?p=84</guid>
		<description><![CDATA[
Warning: call_user_func_array() expects parameter 1 to be a valid callback, first array member is not a valid class name or object in /home/www/blog.juliencrouzet.fr/wp-includes/plugin.php on line 166

Call Stack:
    0.0001     623456   1. {main}() /home/www/blog.juliencrouzet.fr/index.php:0
    0.0002     628984   2. require('/home/www/blog.juliencrouzet.fr/wp-blog-header.php') /home/www/blog.juliencrouzet.fr/index.php:17
    0.2026   37717056   3. require_once('/home/www/blog.juliencrouzet.fr/wp-includes/template-loader.php') /home/www/blog.juliencrouzet.fr/wp-blog-header.php:16
    0.2035   37719976   4. do_feed() /home/www/blog.juliencrouzet.fr/wp-includes/template-loader.php:14
    0.2035   37720256   5. do_action() /home/www/blog.juliencrouzet.fr/wp-includes/functions.php:1721
    0.2035   37722280   6. call_user_func_array() /home/www/blog.juliencrouzet.fr/wp-includes/plugin.php:395
    0.2035   37722336   7. do_feed_rss2() /home/www/blog.juliencrouzet.fr/wp-includes/plugin.php:0
    0.2035   37722528   8. load_template() /home/www/blog.juliencrouzet.fr/wp-includes/functions.php:1753
    0.2036   37784696   9. require_once('/home/www/blog.juliencrouzet.fr/wp-includes/feed-rss2.php') /home/www/blog.juliencrouzet.fr/wp-includes/theme.php:1087
    0.2150   37872064  10. the_excerpt_rss() /home/www/blog.juliencrouzet.fr/wp-includes/feed-rss2.php:46
    0.2225   37874696  11. apply_filters() /home/www/blog.juliencrouzet.fr/wp-includes/feed.php:177
    0.2228   37877128  12. call_user_func_array() /home/www/blog.juliencrouzet.fr/wp-includes/plugin.php:166

]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.juliencrouzet.fr/wp-content/uploads/2008/12/jquery_logo.gif" alt="jquery_logo" title="jquery_logo" width="231" height="85" class="aligncenter size-full wp-image-112" /><br />
<a href="http://jquery.com/">jQuery </a>est aujourd&#8217;hui un incontournable et semble avoir pris le dessus sur <a href="http://www.prototypejs.org">Prototype</a>, <a href="http://dojotoolkit.org">Dojo</a>, etc.  et ne cesse de s&#8217;améliorer, notamment grâce à <a href="http://github.com/jeresig/sizzle/tree/master">Sizzle</a>, le nouveau moteur de sélecteur CSS. Cependant comme toute librairie son efficacité dépend en premier lieu de la manière dont on l&#8217;utilise.</p>
<p>Voici donc un petit panaché d&#8217;astuces d&#8217;optimisation de jQuery, un peuplus poussées que de <a href="http://code.google.com/p/minify">combiner et minifier</a> les sources.<br />
<span id="more-84"></span></p>
<h3>Payez-vous le meilleur des CDN !</h3>
<p>Grâce à <a href="http://code.google.com/intl/fr/apis/ajaxlibs/">Google AJAX API</a>, vous allez pouvoir utiliser le plus puissant, le plus rapide et le plus stable des <a href="http://fr.wikipedia.org/wiki/Content_Delivery_Network">CDN</a>, j&#8217;ai nommé <a href="http://www.google.fr">Google</a> !</p>
<p>Les avantages sont énormes :</p>
<ul>
<li>Vous réduisez le délai de connexion et de téléchargement de vous utilisateurs : Google a forcément des serveurs près de chez eux, voir dans leur garage <img src='http://blog.juliencrouzet.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ;</li>
<li>Vous réduisez la charge de votre serveur : Une requête en moins sur votre serveur, c&#8217;est plein de ressources laissées libres ;</li>
<li>Vous réduisez le temps de chargement : Vous êtes probablement pas le premier site consulté utilisant Google AJAX API, jQuery est probablement déjà dans le cache de votre utilisateur ;</li>
<li>Vous réduisez vos frais de bande passante : jQuery, c&#8217;est quand même 94Ko de code javascript. Sur un million de visiteurs, c&#8217;est presque 100Go économisé.</li>
</ul>
<p>L&#8217;intégration est super simple, après avoir inclut le fichier source :</p>
<pre lang="HTML"><script src="http://www.google.com/jsapi" type="text/javascript"></script></pre>
<p>Il ne reste plus qu&#8217;a loader jQuery (avec la version voulue, c&#8217;est mieux) :</p>
<pre lang="javascript">google.load('jquery', '1.2.6');</pre>
<h3>Utiliser des ID le plus souvent possible</h3>
<p>Spécifier ses éléments dans le sélecteur en précisant leur ID est beaucoup plus rapide. L&#8217;explication est logique :</p>
<ul>
<li>Quand il peut, jQuery se base sur <a href="https://developer.mozilla.org/en/DOM/document.getElementById"><span style="font-family: arial; font-size: x-small;"><span class="titre_ref1"><strong>getElementById()</strong></span></span></a>, qui (<a href="http://www.javascriptjedi.com/getElementById/"><span style="text-decoration: line-through;">théoriquement</span></a>) est optimisé ;</li>
<li>En cas de parcours du DOM, il s&#8217;arrête, quoi qu&#8217;il arrive sur le premier élément trouvé, ID devant être unique.</li>
</ul>
<p>Un petit test sous firebug sur la home page du blog nous en dit long :</p>
<pre lang="javascript">console.time('Selector on id');
for (var i = 0; i < 10000; i++) {
	jQuery('#imonline');
}
console.timeEnd('Selector on id');

	 // Selector on id: 236ms

console.time('Selector on class');
for (var i = 0; i < 10000; i++) {
	jQuery('div.sidebarboxbottom');
}
console.timeEnd('Selector on class');
	// Selector on class: 5266ms</pre>
<h3>Contextualiser les sélecteurs</h3>
<p>Par défaut, lorsque l'on définit un sélecteur, typiquement <em>$('div.cssClass')</em>, jQuery va traverser <strong>TOUT</strong> le DOM à la recherche des éléments respectant ce sélecteur. Or, il arrive souvent que notre recherche ne soit pertinente qu'à un certain niveau du DOM, par exemple, à l'intérieur d'un <em>&lt;div&gt;</em> et l'on a souvent l'habitude (parce que la lisibilité est accrue et que c'est plus rapide à taper) de garder le parcours entier du DOM avec l'écritude $('div.cssClass').</p>
<p>Cependant, grâce au <a href="http://docs.jquery.com/How_jQuery_Works#Chainability_.28The_Magic_of_jQuery.29">concept d'enchaînement</a> de jQuery, on peut contextualiser un sélecteur dans un ou plusieurs éléments donnés. Cela permet non seulement d'éviter des erreurs lorsque la conception d'un page change et surtout d'optimiser le code, jQuery ayant moins d'éléments à traverser.</p>
<p>Exemple :</p>
<pre lang="javascript">/**
 * Ne recherche des input que dans des forms (évidemment)
 */
$('form').find('input');
/**
 * Écriture alternative, recherche les li qu'a l'intérieur d'un ul nommé
 */
$('ul#myList', $('li'));</pre>
<h3>Réduire au maximum les opérations de sélécteur (surtout celles qui sont inutiles)</h3>
<p>Le résultat d'un selecteur n'est pas forcément un donnée volatile à chainer, type <em>$('div#errorBox').hide().remove();</em> Cette écriture est certes très pratique mais nous perdons le résultat de <em>$('div#errorBox')</em>. Cette erreur de conception typique vient du nommage de la fonction $ qui, certes, rend le code beaucoup plus lisible, mais induit le codeur en erreur ; lui faisant penser que <em>$('div#errorBox')</em> est une variable et non un appel de fonction.</p>
<p>Un développeur doit toujours se demander lors de l'utilisation du sélecteur $ si ce resultat va être utilisé à nouveau après cette ligne ou pas.</p>
<p>Exemple :</p>
<pre lang="javascript">/**
 * jQuery va retraverser le DOM 100 fois à la recherche de ul#list
 */
for (var i = 0; i < 100; i++) {
	$('ul#list').append('
<li>Numéro ' + i + '</li>

');
}
/**
 * jQuery va retraverser le DOM une seule fois à la recherche de ul#list
 */
var	list = $('ul#list');
for (var i = 0; i < 100; i++) {
	list.append('
<li>Numéro ' + i + '</li>

');
}</pre>
<p>Inutile de dire que dans ce cas, le gain de ressource est énorme !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.juliencrouzet.fr/84/optimiser-l-utilisation-de-jquery/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
