Maison interface Web tutoriel CSS Redraws et reflows fréquents : pourquoi faut-il les éviter ?

Redraws et reflows fréquents : pourquoi faut-il les éviter ?

Jan 26, 2024 am 08:50 AM

Redraws et reflows fréquents : pourquoi faut-il les éviter ?

Redessiner et refusionner : pourquoi éviter que cela n'arrive trop souvent ?

Dans le développement front-end, on entend souvent deux concepts : redraw et reflow. Ils font référence aux deux processus clés lorsque le navigateur affiche la page. Le redessin fait référence au processus lorsque l'apparence d'un élément change et que l'affichage doit être mis à jour ; la redistribution fait référence au processus lorsque les propriétés géométriques de l'élément changent et que la disposition doit être recalculée et redessinée.

Le redessinage et la redistribution sont des opérations très gourmandes en performances. Des occurrences fréquentes entraîneront une dégradation des performances des pages, voire provoqueront des blocages et un chargement lent des pages. Par conséquent, nous devons faire de notre mieux pour éviter les redessins et les redistributions fréquents pendant le développement. Examinons ensuite quelques situations courantes qui conduisent à des redessins et des redistributions, et comment les éviter.

  1. Évitez de modifier fréquemment les styles des éléments DOM

Lorsque nous modifions fréquemment les styles des éléments DOM, le navigateur déclenchera fréquemment des redessins et des redistributions. Par conséquent, lors de la modification du style des éléments DOM, il est préférable de fusionner les opérations de modification et d'implémenter le changement de style en modifiant le nom de classe de l'élément, ce qui peut réduire le nombre de redessins et de redistributions.

// 不推荐写法
var element = document.getElementById('example');
element.style.width = '100px';
element.style.height = '100px';
element.style.backgroundColor = 'red';

// 推荐写法
var element = document.getElementById('example');
element.classList.add('active');
Copier après la connexion
  1. Utilisez l'attribut de transformation au lieu des attributs haut/gauche

Lorsque vous utilisez les attributs haut/gauche pour modifier la position d'un élément, le redessin et la redistribution seront déclenchés. L'utilisation de l'attribut transform (tel que translateX/translateY) pour modifier la position de l'élément ne déclenchera pas la redistribution, mais déclenchera uniquement le redessin. Par conséquent, il est préférable d’utiliser l’attribut transform lorsque vous devez modifier la position d’un élément.

// 不推荐写法
var element = document.getElementById('example');
element.style.left = '100px';
element.style.top = '100px';

// 推荐写法
var element = document.getElementById('example');
element.style.transform = 'translate(100px, 100px)';
Copier après la connexion
  1. Évitez de lire fréquemment les attributs de taille des éléments

Chaque fois que vous lisez les attributs de taille d'un élément (tels que offsetWidth, offsetHeight), la redistribution sera déclenchée, et la lecture des valeurs de ces attributs est relativement opération consommatrice de performances. Par conséquent, nous devrions essayer d’éviter de lire fréquemment les propriétés de taille des éléments. Nous pouvons mettre ces valeurs en cache ou les obtenir toutes en même temps si nécessaire.

// 不推荐写法
var element = document.getElementById('example');
var width = element.offsetWidth;
var height = element.offsetHeight;

// 推荐写法
var element = document.getElementById('example');
var rect = element.getBoundingClientRect();
var width = rect.width;
var height = rect.height;
Copier après la connexion
  1. Utilisez documentFragment pour optimiser les insertions de plusieurs nœuds

L'insertion de nœuds est une opération qui déclenchera la redistribution. Si vous devez insérer des nœuds plusieurs fois, il est préférable d'utiliser documentFragment pour optimiser, d'ajouter plusieurs nœuds à documentFragment, puis. à refaire Inséré en permanence dans le DOM.

// 不推荐写法
for (var i = 0; i < 10; i++) {
  var element = document.createElement('div');
  document.body.appendChild(element);
}

// 推荐写法
var fragment = document.createDocumentFragment();
for (var i = 0; i < 10; i++) {
  var element = document.createElement('div');
  fragment.appendChild(element);
}
document.body.appendChild(fragment);
Copier après la connexion

Grâce à l'optimisation des aspects ci-dessus, nous pouvons réduire efficacement le nombre de redessins et de refusions, et améliorer les performances et l'expérience utilisateur de la page. Dans le développement réel, nous pouvons également utiliser certains outils et bibliothèques pour nous aider à détecter et optimiser les problèmes de redessin et de redistribution, tels que Chrome DevTools et les outils d'analyse des performances.

Pour résumer, le redessinage et la redistribution sont des facteurs importants qui affectent les performances des pages, et ils doivent être évités aussi fréquemment que possible lors du développement front-end. En fusionnant les modifications de style, en utilisant les attributs de transformation, en évitant la lecture fréquente des attributs de taille et en utilisant documentFragment pour optimiser plusieurs insertions de nœuds, nous pouvons optimiser efficacement les performances de la page et améliorer l'expérience utilisateur.

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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Travailler avec GraphQL Caching Travailler avec GraphQL Caching Mar 19, 2025 am 09:36 AM

Si vous avez récemment commencé à travailler avec GraphQL ou examiné ses avantages et ses inconvénients, vous avez sans aucun doute entendu des choses comme "GraphQL ne prend pas en charge la mise en cache" ou

Construire une application Ethereum à l'aide de Redwood.js et de la faune Construire une application Ethereum à l'aide de Redwood.js et de la faune Mar 28, 2025 am 09:18 AM

Avec la récente montée du prix du bitcoin sur 20k $ USD, et pour lui, récemment en train de briser 30k, je pensais que cela valait la peine de reprendre une profonde plongeon dans la création d'Ethereum

Vue 3 Vue 3 Apr 02, 2025 pm 06:32 PM

Il est sorti! Félicitations à l'équipe Vue pour l'avoir fait, je sais que ce fut un effort massif et une longue période à venir. Tous les nouveaux documents aussi.

Pouvez-vous obtenir des valeurs de propriété CSS valides du navigateur? Pouvez-vous obtenir des valeurs de propriété CSS valides du navigateur? Apr 02, 2025 pm 06:17 PM

J'ai eu quelqu'un qui écrivait avec cette question très légitime. Lea vient de bloguer sur la façon dont vous pouvez obtenir les propriétés CSS valides elles-mêmes du navigateur. C'est comme ça.

Un peu sur CI / CD Un peu sur CI / CD Apr 02, 2025 pm 06:21 PM

Je dirais que "Site Web" correspond mieux que "Application mobile" mais j'aime ce cadrage de Max Lynch:

Comparaison des navigateurs pour une conception réactive Comparaison des navigateurs pour une conception réactive Apr 02, 2025 pm 06:25 PM

Il existe un certain nombre de ces applications de bureau où l'objectif montre votre site à différentes dimensions en même temps. Vous pouvez donc, par exemple, écrire

Cartes empilées avec un positionnement collant et une pincée de sass Cartes empilées avec un positionnement collant et une pincée de sass Apr 03, 2025 am 10:30 AM

L'autre jour, j'ai repéré ce morceau particulièrement charmant sur le site Web de Corey Ginnivan où une collection de cartes se cassent les uns sur les autres pendant que vous faites défiler.

Utilisation de Markdown et de la localisation dans l'éditeur de blocs WordPress Utilisation de Markdown et de la localisation dans l'éditeur de blocs WordPress Apr 02, 2025 am 04:27 AM

Si nous devons afficher la documentation à l'utilisateur directement dans l'éditeur WordPress, quelle est la meilleure façon de le faire?

See all articles