Heim Web-Frontend CSS-Tutorial Häufige Neuzeichnungen und Reflows: Warum sollten sie vermieden werden?

Häufige Neuzeichnungen und Reflows: Warum sollten sie vermieden werden?

Jan 26, 2024 am 08:50 AM

Häufige Neuzeichnungen und Reflows: Warum sollten sie vermieden werden?

Neu zeichnen und umfließen: Warum sollten Sie vermeiden, dass es zu oft passiert?

In der Frontend-Entwicklung hören wir oft zwei Konzepte: Redraw und Reflow. Sie beziehen sich auf die beiden Schlüsselprozesse beim Rendern der Seite durch den Browser. Unter „Neuzeichnen“ versteht man den Vorgang, bei dem sich das Erscheinungsbild eines Elements ändert und die Anzeige aktualisiert werden muss. Unter „Neuzeichnen“ versteht man den Vorgang, bei dem sich die geometrischen Eigenschaften des Elements ändern und das Layout neu berechnet und neu gezeichnet werden muss.

Neuzeichnen und Umfließen sind sehr leistungsintensive Vorgänge, die zu einer Verschlechterung der Seitenleistung und sogar zum Einfrieren und langsamen Laden der Seite führen. Daher sollten wir unser Bestes geben, um häufiges Neuzeichnen und Reflow während der Entwicklung zu vermeiden. Schauen wir uns als Nächstes einige häufige Situationen an, die zu Neuzeichnungen und Reflows führen, und wie man sie vermeidet.

  1. Vermeiden Sie häufige Änderungen an den Stilen von DOM-Elementen.

Wenn wir die Stile von DOM-Elementen häufig ändern, löst der Browser häufig Neuzeichnungen und Umflüsse aus. Daher ist es beim Ändern des Stils von DOM-Elementen am besten, die Änderungsvorgänge zusammenzuführen und den Stilwechsel durch Ändern des Klassennamens des Elements zu implementieren, wodurch die Anzahl der Neuzeichnungen und Reflows verringert werden kann.

// 不推荐写法
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');
Nach dem Login kopieren
  1. Verwenden Sie das Transformationsattribut anstelle der Top-/Links-Attribute

Wenn Sie die Top-/Links-Attribute verwenden, um die Position eines Elements zu ändern, werden Neuzeichnen und Umfließen ausgelöst. Die Verwendung des Transformationsattributs (z. B. translatorX/translateY) zum Ändern der Position des Elements löst keinen Reflow aus, sondern nur ein Neuzeichnen. Daher ist es am besten, das Transformationsattribut zu verwenden, wenn Sie die Position eines Elements ändern müssen.

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

// 推荐写法
var element = document.getElementById('example');
element.style.transform = 'translate(100px, 100px)';
Nach dem Login kopieren
  1. Vermeiden Sie das häufige Lesen der Größenattribute von Elementen.

Jedes Mal, wenn Sie die Größenattribute eines Elements lesen (z. B. offsetWidth, offsetHeight), wird ein Reflow ausgelöst, und das Lesen der Werte dieser Attribute ist relativ leistungsintensiver Betrieb. Daher sollten wir versuchen, das häufige Auslesen der Größeneigenschaften von Elementen zu vermeiden. Wir können diese Werte zwischenspeichern oder bei Bedarf alle auf einmal abrufen.

// 不推荐写法
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;
Nach dem Login kopieren
  1. Verwenden Sie documentFragment, um das Einfügen mehrerer Knoten zu optimieren.

Das Einfügen von Knoten ist ein Vorgang, der einen Reflow auslöst. Wenn Sie Knoten mehrmals einfügen müssen, verwenden Sie am besten documentFragment zum Optimieren, fügen Sie dem documentFragment mehrere Knoten hinzu und Dann machen Sie es noch einmal. Dauerhaft in das DOM eingefügt.

// 不推荐写法
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);
Nach dem Login kopieren

Durch die Optimierung der oben genannten Aspekte können wir die Anzahl der Neuzeichnungen und Reflows effektiv reduzieren und die Leistung und Benutzererfahrung der Seite verbessern. In der tatsächlichen Entwicklung können wir auch einige Tools und Bibliotheken verwenden, die uns beim Erkennen und Optimieren von Redraw- und Reflow-Problemen helfen, z. B. Chrome DevTools und Leistungsanalysetools.

Zusammenfassend lässt sich sagen, dass Neuzeichnen und Umfließen wichtige Faktoren sind, die sich auf die Seitenleistung auswirken und bei der Frontend-Entwicklung so häufig wie möglich vermieden werden sollten. Durch das Zusammenführen von Stiländerungen, die Verwendung von Transformationsattributen, das Vermeiden des häufigen Lesens von Größenattributen und die Verwendung von documentFragment zur Optimierung mehrerer Knoteneinfügungen können wir die Seitenleistung effektiv optimieren und die Benutzererfahrung verbessern.

Das obige ist der detaillierte Inhalt vonHäufige Neuzeichnungen und Reflows: Warum sollten sie vermieden werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hinzufügen von Kastenschatten zu WordPress -Blöcken und -Elementen Hinzufügen von Kastenschatten zu WordPress -Blöcken und -Elementen Mar 09, 2025 pm 12:53 PM

Hinzufügen von Kastenschatten zu WordPress -Blöcken und -Elementen

Erstellen Sie ein JavaScript -Kontaktformular mit dem Smart Forms Framework Erstellen Sie ein JavaScript -Kontaktformular mit dem Smart Forms Framework Mar 07, 2025 am 11:33 AM

Erstellen Sie ein JavaScript -Kontaktformular mit dem Smart Forms Framework

Erstellen Sie einen Inline -Texteditor mit dem inhaltlichen Attribut Erstellen Sie einen Inline -Texteditor mit dem inhaltlichen Attribut Mar 02, 2025 am 09:03 AM

Erstellen Sie einen Inline -Texteditor mit dem inhaltlichen Attribut

Arbeiten mit GraphQL Caching Arbeiten mit GraphQL Caching Mar 19, 2025 am 09:36 AM

Arbeiten mit GraphQL Caching

Machen Sie Ihren ersten Seltsamen -Sufle -Übergang Machen Sie Ihren ersten Seltsamen -Sufle -Übergang Mar 15, 2025 am 11:08 AM

Machen Sie Ihren ersten Seltsamen -Sufle -Übergang

Entmystifizierende Bildschirmleser: Zugrunde Formen und Best Practices Entmystifizierende Bildschirmleser: Zugrunde Formen und Best Practices Mar 08, 2025 am 09:45 AM

Entmystifizierende Bildschirmleser: Zugrunde Formen und Best Practices

Vergleich der 5 besten PHP -Formbauer (und 3 kostenlose Skripte) Vergleich der 5 besten PHP -Formbauer (und 3 kostenlose Skripte) Mar 04, 2025 am 10:22 AM

Vergleich der 5 besten PHP -Formbauer (und 3 kostenlose Skripte)

Datei hochladen mit Multer in node.js und ausdrücken Datei hochladen mit Multer in node.js und ausdrücken Mar 02, 2025 am 09:15 AM

Datei hochladen mit Multer in node.js und ausdrücken

See all articles