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.

FasterSnail

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);

Boucle

  1. Préférez le for au each

  2. Mettez en cache la taille de la collection

// mal
$.each (array, function (i) {
   doSomething(i);
});

// bien
var arrLength = array.length;
for ( var i = 0; i < arrLength ; i++ ) {
   doSomething(i);
}

Manipulation de CSS

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

Nous sommes d’accord 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.