Comment éviter les opérations fréquentes de redistribution et de repeinture
La redistribution et le repeint sont deux opérations importantes lorsque le navigateur affiche la page. Reflow fait référence au navigateur qui recalcule la position et la taille des éléments en fonction des modifications apportées à l'arborescence DOM, tandis que redessiner redessine la page en fonction des résultats du calcul. Ces deux opérations consomment beaucoup de ressources informatiques et entraînent une dégradation des performances des pages. Par conséquent, il est essentiel d’éviter les opérations fréquentes de redistribution et de redessinage pour optimiser les performances des pages Web.
Cet article présentera quelques méthodes efficaces pour éviter les opérations de redistribution et de redessinage fréquentes, et fournira des exemples de code spécifiques.
Exemple de code :
// 不推荐的方式 element.style.left = '100px'; element.style.top = '200px'; element.style.width = '300px'; element.style.height = '400px'; // 推荐的方式 element.style.transform = 'translate(100px, 200px) scale(1.5)';
Exemple de code :
// 不推荐的方式 for (let i = 0; i < elements.length; i++) { const element = elements[i]; console.log(element.offsetWidth); } // 推荐的方式 const length = elements.length; for (let i = 0; i < length; i++) { const element = elements[i]; console.log(element.offsetWidth); }
Exemple de code :
// 创建虚拟DOM const virtualDOM = document.createElement('div'); virtualDOM.style.width = '200px'; virtualDOM.style.height = '300px'; // 批量批处理 for (let i = 0; i < 1000; i++) { const element = document.createElement('span'); element.innerText = 'Hello Virtual DOM'; virtualDOM.appendChild(element); } // 一次性更新真实DOM document.body.appendChild(virtualDOM);
Exemple de code :
// 节流方式 function throttle(fn, delay) { let timer = null; return function() { if (!timer) { timer = setTimeout(() => { timer = null; fn.apply(this, arguments); }, delay); } }; } // 防抖方式 function debounce(fn, delay) { let timer = null; return function() { clearTimeout(timer); timer = setTimeout(() => { fn.apply(this, arguments); }, delay); }; } // 使用节流方式绑定事件 element.addEventListener('scroll', throttle(function() { // 处理滚动事件 }, 200)); // 使用防抖方式绑定事件 element.addEventListener('resize', debounce(function() { // 处理调整窗口大小事件 }, 200));
Grâce aux méthodes ci-dessus, nous pouvons efficacement éviter les opérations de redistribution et de redessinage fréquentes, et améliorer les performances et l'expérience utilisateur de la page. Au cours du processus de développement, il convient de prêter attention à l'utilisation rationnelle de l'attribut de transformation CSS, en réduisant l'accès aux attributs de mise en page, en utilisant le DOM virtuel pour le traitement par lots, en utilisant la technologie de limitation et d'anti-secousse, etc. Optimiser soigneusement l'opération de rendu de la page peut offrir aux utilisateurs une expérience de navigation plus rapide et plus fluide.
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!