Maison  >  Article  >  interface Web  >  Comment résoudre l'accumulation de rendu jquery

Comment résoudre l'accumulation de rendu jquery

WBOY
WBOYoriginal
2023-05-12 09:54:07546parcourir

Dans le développement Web, jQuery est l'une des bibliothèques JavaScript les plus couramment utilisées. Elle s'engage à rendre le code JavaScript plus concis, facile à utiliser et maintenable. En utilisant jQuery, vous pouvez facilement gérer des tâches telles que les opérations DOM, la liaison d'événements, les effets d'animation et l'interaction des données Ajax. Cependant, dans le développement réel, nous rencontrons parfois le besoin de générer, de restituer des données et d'implémenter une accumulation dynamique dans la page. Cet article se concentrera sur la façon d'utiliser jQuery pour résoudre le problème d'accumulation de rendu.

Description du problème

Supposons que nous ayons une liste qui doit être affichée dynamiquement, dans laquelle chaque élément aura un numéro, et ce numéro doit être continuellement accumulé. Si nous utilisons simplement JavaScript pour l'implémenter, nous rencontrerons un inconvénient : chaque fois que les données sont mises à jour, la liste entière doit être restituée, ce qui rend l'effet visuel de la page pas assez fluide et l'expérience utilisateur médiocre.

L'exemple de code est le suivant :

<ul id="list">
    <li>1</li>
    <li>2</li>
    <li>3</li>
</ul>
let data = [1, 2, 3];

function render() {
  let list = $('#list');
  list.empty();

  for (let i = 0; i < data.length; i++) {
    let num = data[i];
    let li = $('<li></li>');
    li.text(num);
    list.append(li);
  }
}

function update() {
  for (let i = 0; i < data.length; i++) {
    data[i]++;
  }
  render();
}

setInterval(update, 1000);

Dans cet exemple de code, nous définissons une liste de données data, où chaque élément représente le nombre qui doit être affiché. La fonction render() génère le code HTML correspondant basé sur les données data et l'insère dans la page. La fonction update() met à jour les données à intervalles réguliers et restitue la liste entière. Bien que ce code soit simple à implémenter, chaque mise à jour nécessite de restituer la liste entière, ce qui entraînera une perte de performances importante. data,其中每个元素代表需要展示的数字。render()函数会根据data数据生成相应的HTML代码,并将其插入到页面中。update()函数则是每隔一定的时间更新一次数据并重新渲染整个列表。虽然该代码实现起来简单,但每次更新都需要重新渲染整个列表,会造成较大的性能损失。

解决方案

为了解决上述问题,我们需要找到一种方法,使得每次数据更新后,能够高效地渲染出新的HTML代码,并将其插入到页面中而不影响其他部分。jQuery中常用的方法有两种:

方法一:修改DOM元素

该方法的基本思路是在DOM元素上记录每个数字对应的位置,并通过索引对其进行更新,而不需要重新渲染整个列表。

示例代码如下:

<ul id="list">
    <li data-index="0">1</li>
    <li data-index="1">2</li>
    <li data-index="2">3</li>
</ul>
let data = [1, 2, 3];

function render() {
  for (let i = 0; i < data.length; i++) {
    let num = data[i];
    let li = $('#list li[data-index="' + i + '"]');
    li.text(num);
  }
}

function update() {
  for (let i = 0; i < data.length; i++) {
    data[i]++;
  }
  render();
}

setInterval(update, 1000);

在该示例代码中,我们为每个li元素增加了一个data-index属性,用于记录该数字对应的位置。在render()函数中,我们根据data-index属性找到对应的元素,并更新其显示的数字。

方法二:使用文本节点

该方法的基本思路是使用文本节点直接更新数字,并插入到DOM元素中,比直接操作DOM元素更加高效。

示例代码如下:

<ul id="list">
    <li></li>
    <li></li>
    <li></li>
</ul>
let data = [1, 2, 3];

function render() {
  let list = $('#list');
  list.empty();

  for (let i = 0; i < data.length; i++) {
    let numNode = document.createTextNode(data[i]);
    let li = $('<li></li>');
    li.append(numNode);
    list.append(li);
  }
}

function update() {
  for (let i = 0; i < data.length; i++) {
    data[i]++;
  }
  render();
}

setInterval(update, 1000);

在该示例代码中,我们先创建了一个空的li元素,并使用document.createTextNode()方法创建一个文本节点。然后,我们使用jQuery的append()方法将文本节点插入到li元素中,最后将li

Solution

Afin de résoudre le problème ci-dessus, nous devons trouver un moyen de restituer efficacement le nouveau code HTML après chaque mise à jour des données et de l'insérer dans la page sans affecter les autres parties. Il existe deux méthodes couramment utilisées dans jQuery :

Méthode 1 : Modifier les éléments DOM

L'idée de base de cette méthode est d'enregistrer la position correspondant à chaque numéro sur l'élément DOM et de la mettre à jour via le index sans avoir besoin de restituer la liste entière. 🎜🎜L'exemple de code est le suivant : 🎜rrreeerrreee🎜Dans cet exemple de code, nous ajoutons un attribut data-index à chaque élément li pour enregistrer le numéro correspondant au numéro . Emplacement. Dans la fonction render(), on retrouve l'élément correspondant en fonction de l'attribut data-index et on met à jour le numéro affiché. 🎜

Méthode 2 : Utiliser des nœuds de texte

🎜L'idée de base de cette méthode est d'utiliser des nœuds de texte pour mettre à jour directement les nombres et les insérer dans les éléments DOM, ce qui est plus efficace que d'exploiter directement les éléments DOM. 🎜🎜L'exemple de code est le suivant : 🎜rrreeerrreee🎜Dans cet exemple de code, nous créons d'abord un élément li vide et utilisons la méthode document.createTextNode() pour créer un nœud de texte. Ensuite, nous utilisons la méthode append() de jQuery pour insérer le nœud de texte dans l'élément li, et enfin insérons l'élément li dans la page. 🎜🎜Résumé🎜🎜Dans cet article, nous avons présenté deux méthodes pour résoudre le problème d'accumulation de rendu à l'aide de jQuery. En utilisant ces méthodes, vous pouvez éviter le problème d'efficacité lié au rendu de la liste entière à chaque fois que les données sont mises à jour, et améliorer la vitesse de réponse de la page et l'expérience utilisateur. Bien entendu, dans le cadre d’un développement spécifique, nous devons choisir la méthode de mise en œuvre la plus appropriée en fonction de la situation réelle. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn