Optimisation JQuery et DOM

Bonjour,

Ce billet pour parler d’un problème rencontré trop souvent dans un code JavaScript lors du développement d’une application web avec JQuery.

Le problème

Mon client me dit que le temps de chargement d’un page est trop long, et me demande si je peux le diminuer.

L’analyse

Je regarde la page en question, et découvre du code JavaScript dont j’ai extrait les lignes suivantes :

for (var i = 1 ; i <= 1000 ; i++)
        $('#test').Append('<h1>Test' + i + '</h1>');

Je note un 1er problème :

A chaque passage dans la boucle, je parcours le DOM avec le code #(‘test’)

Nous pouvons optimiser ce code de la manière suivante :

var test = $('#test');
for (var i = 1 ; i <= 1000 ; i++)
        test.Append('<h1>Test' + i + '</h1>') ;

Ce code est plus optimisé puisque j’évite de parcourir le DOM en sauvegardant le résultat de la requête JQuery dans une variable que je réutilise. De cette manière, je ne parcours le DOM qu’une seule fois.

Je note toutefois un 2ème problème dans ce code :

A chaque passage dans la boucle, j’ajoute une chaine dans le DOM. Je pourrais concaténer les chaines HTML en amont, ce qui donnerait :

var chaine = '';
for (var i = 1 ; i <= 3 ; i++)
        chaine += '<h1>Test ' + i + '</h1>';
var test = $('#test');
test.Append(chaine);

Ce code est plus optimisé puisque j’évite de manipuler le DOM plus que nécessaire.

Conclusion

Lors du développement d’une application JavaScript, une app SharePoint par exemple, 2 points d’attention doivent retenir votre attention :

  • Minimiser le parcours du DOM
  • Eviter la manipulation excessive du DOM

Il y a d’autres points importants pour l’optimisation de son code, points sur lesquels je reviendrai dans de futurs posts, mais nous avons ici une 1ère base.

One thought on “Optimisation JQuery et DOM

  1. Cher Nicolas,

    Effectuer 3 passages dans la boucle au lieu de 100, ça c’est une belle optimisation !
    Tu as gardé cet esprit d’efficacité de ton époque C-Log, bravo.
    Cordialement,
    Jean-Jacques Snella

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

seventy + = seventy eight