Optimiser rapidement son jQuery 1.x

Quand vous avez peu de temps pour diminuer le temps d’exécution d’un gros bloc de jQuery, le plus rapide est d’optimiser le code pour respecter les bonnes pratiques.

Les optimisations suivantes sont valides pour jQuery 1.x vu que la page était initialement avec cette version.

[][1]

Selecteur

Facilitez le parcours du DOM, identifier la zone où chercher puis les éléments à trouver.

// mal
$(".allp");
// bien
$("#container p.allp");
//mieux (les deux notations sont équivalentes)
$("#container").find("p.allp");
$("p.allp", "#container");

// non optimisé
$( "div#container .allp" );
// optimisé
$( "#container p.allp" );

Chaining

Enchainez les actions sur le même selecteur quand c’est possible.

// mal
$("#object").addClass("myClass");
$("#object").css("color","#f00");
$("#object").height(806);

// bien
$("#object").addClass("myClass").css("color", "#f00").height(806);

Caching

Stockez vos éléments dans une variable avant de faire vos opérations dessus.

// bien
var myElements = $("#container").find("li");
$("#hideElements").click(function() {
   myElements.fadeOut();
});
$("#showElements").click(function() {
   myElements.fadeIn();
});

Event delegation

Attachez la gestion d’événement sur le container et ciblez les éléments déclencheurs.

// mal
$('#container').find('td.trigger').click(function() {
   $(this).toggleClass('bang');
});

// bien
$('#container').on('click','td.trigger',function() {
   $(this).toggleClass('bang');
});

http://learn.jquery.com/events/event-delegation/

Manipulation du DOM

Assemblez dans une boucle mais ajoutez hors de celle-ci

// mal
$.each(array, function(count, item) {
   var newElement = buildNewElement(item);
   $('#Elements').append(newElement);
});

// bien
var tmp = '';
$.each(array, function(count, item) {
   tmp += buildNewElement(item);
});
$('#Elements').append(tmp);</pre>

# Boucle {#boucle}

  1. Préférez le for au each

  2. Mettez en cache la taille de la collection

<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-js" data-lang="js"><span style="color:#75715e">// mal
</span><span style="color:#75715e"></span><span style="color:#a6e22e">$</span>.<span style="color:#a6e22e">each</span> (<span style="color:#a6e22e">array</span>, <span style="color:#66d9ef">function</span> (<span style="color:#a6e22e">i</span>) {
   <span style="color:#a6e22e">doSomething</span>(<span style="color:#a6e22e">i</span>);
});

<span style="color:#75715e">// bien
</span><span style="color:#75715e"></span><span style="color:#66d9ef">var</span> <span style="color:#a6e22e">arrLength</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">array</span>.<span style="color:#a6e22e">length</span>;
<span style="color:#66d9ef">for</span> ( <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">i</span> <span style="color:#f92672">=</span> <span style="color:#ae81ff">0</span>; <span style="color:#a6e22e">i</span> <span style="color:#f92672">&lt;</span> <span style="color:#a6e22e">arrLength</span> ; <span style="color:#a6e22e">i</span><span style="color:#f92672">++</span> ) {
   <span style="color:#a6e22e">doSomething</span>(<span style="color:#a6e22e">i</span>);
}
</code></pre></div>

# Manipulation de CSS {#manipulation-de-css}

Utilisez AddClass plutôt que css() pour plusieurs éléments.

Nous sommes daccord que cela ne vaut pas une optimisation en bonne et dûe forme.

Mais si comme dans mon cas, votre code initial est loin dêtre propre, vous serez surpris du gain inhérent à règles.

 [1]: /wp-content/uploads/2015/02/fastersnail.png