Partage
  • Partager sur Facebook
  • Partager sur Twitter

Jquery très lent

    5 décembre 2017 à 16:01:18

    Bonjour,

    Il se trouve que j'ai un gros soucis avec jquery pour générer du DOM;

    Voici mon code qui pose problème:

    $('.cabinet_info.change_on_click').each(function(){
    $(this).find('input:first').hide().before('<span>'+$(this).find('input:first').val() +'</span>');
    });

    j'applique ce code à un tableau de 1184 éléments et il s'effectue en 22 secondes.

    J'ai fait plusieurs testes pour comprendre ce qu'il se passe;

    Si la fonction 'each' est vide le code s’effectue en moins de 1 seconde.

    Si la fonction 'each' contient seulement '$(this).hide()' le code s'effectue en 6 secondes.

    Il semblerai que le each soit rapide mais le $(this) très lent.

    Est ce que ce sont des performances normales de jquery ? Si non je ne vois pas comment l'optimiser... 

    • Partager sur Facebook
    • Partager sur Twitter
      5 décembre 2017 à 16:41:28

      Rien à voir avec jQuery. Quand tu utilises each, tu boucles de façon synchrone. je suppose que hide() fait un display: none; donc ça déclenche un recalcul de la taille du tableau un grand nombre de fois. Idem pour ton before : tu génères du DOM un grand nombre de fois (ce qui déjà est lent) et tu recalcules la taille du tableau autant de fois.

      À ta place, je génèrerais un nouveau tableau d'un coup, ou je ferais un système de pagination. C'est pas normal de traiter un millier d'entrées à la fois.

      -
      Edité par tabouretBleu 5 décembre 2017 à 16:42:02

      • Partager sur Facebook
      • Partager sur Twitter
        6 décembre 2017 à 10:03:36

        J'ai plusieurs idées en tête pour régler le problème comme utiliser des sélecteurs js plus performants.

        Mais pour le jquery ça veux dire que ce n'est pas une erreur de ma part et c'est la réel vitesse de traitement ?

        • Partager sur Facebook
        • Partager sur Twitter
          6 décembre 2017 à 10:50:22

          C'est une erreur de ta part d'écrire un tel script, mais c'est la réelle vitesse de traitement.

          Utiliser d'autres sélecteurs n'aura qu'un impact mineur sur la vitesse. Je t'ai dit ce qui était lent dans ton script. Si tu as besoin d'une preuve, ouvre ton outil de développement, il doit y avoir un onglet Performances, ou tu peux l'afficher en allant dans les paramètres s'il est masqué.

          • Partager sur Facebook
          • Partager sur Twitter
            8 décembre 2017 à 10:21:44

            J'ai finalement rendu ma fonction moins modulable en créant les éléments en dure dans le html, c'est quazi instantané.

            Merci pour ton aide :)

            -
            Edité par DariusKohen 8 décembre 2017 à 10:22:11

            • Partager sur Facebook
            • Partager sur Twitter

            Jquery très lent

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown