Ein Reflow (auch Layout oder Re-Layout genannt) tritt auf, wenn der Browser die Position, Größe und das Layout von Elementen auf der Seite neu berechnet. Dieser Vorgang findet jedes Mal statt, wenn sich das Layout der Seite ändert, beispielsweise wenn Elemente hinzugefügt, entfernt, in der Größe geändert oder ihre Sichtbarkeit geändert werden. Es ist ein komplexerer und zeitaufwändigerer Vorgang
<div id="box" style="width: 100px; height: 100px; background-color: blue;"></div> <script> const box = document.getElementById('box'); // Triggering a reflow by changing width and height box.style.width = '200px'; box.style.height = '200px'; // Triggering a repaint by changing the background color box.style.backgroundColor = 'red'; </script>
Wenn Sie etwas ändern, das sich auf das Layout der Seite auswirkt, muss der Browser Folgendes tun:
Wenn viele Elemente von einer einzigen Änderung betroffen sind, kann der Reflow kostspielig sein und die Leistung Ihrer Website beeinträchtigen.
Ein Neuzeichnen (oder Neuzeichnen) erfolgt, wenn sich die visuellen Eigenschaften eines Elements ändern, das Layout jedoch nicht. Es ist kostengünstiger als ein Reflow, da nur das Erscheinungsbild der Elemente aktualisiert werden muss, ohne dass ihre Position oder ihr Layout neu berechnet werden müssen. Neuanstriche erfolgen, nachdem das Layout neu berechnet wurde (in Fällen, in denen beides erforderlich ist) oder wenn Eigenschaften, die sich nicht auf das Layout auswirken, wie Farbe oder Sichtbarkeit geändert werden.
<div id="box" style="width: 100px; height: 100px; background-color: blue;"></div> <script> // Triggering a repaint by changing the background color box.style.backgroundColor = 'red'; </script>
Ein Repaint erfordert keine Neuberechnung des Layouts, ist also schneller als ein Reflow, erfordert aber dennoch das Neuzeichnen von Teilen der Seite, was einige Zeit in Anspruch nimmt.
DOM-Manipulation minimieren: Verwenden Sie Techniken wie Batch-DOM-Aktualisierungen (wie bereits erwähnt) oder DocumentFragment, um mehrere Änderungen gleichzeitig vorzunehmen, anstatt eins nach dem anderen.
Layout-Thrashing vermeiden: Wenn Sie eine Layout-Eigenschaft (z. B. offsetHeight) lesen und sofort im selben Zyklus schreiben (das Layout ändern), wird ein Reflow erzwungen, der als Layout-Thrashing bezeichnet wird. Um dies zu vermeiden, trennen Sie das Lesen und Schreiben von DOM-Eigenschaften in verschiedenen Schritten.
<div id="box" style="width: 100px; height: 100px; background-color: blue;"></div> <script> const box = document.getElementById('box'); // Triggering a reflow by changing width and height box.style.width = '200px'; box.style.height = '200px'; // Triggering a repaint by changing the background color box.style.backgroundColor = 'red'; </script>
CSS-Klassen verwenden: Anstatt einzelne Stile zu ändern, verwenden Sie CSS-Klassen, um Änderungen vorzunehmen. Der Browser verwaltet den Klassenwechsel effizienter.
<div id="box" style="width: 100px; height: 100px; background-color: blue;"></div> <script> // Triggering a repaint by changing the background color box.style.backgroundColor = 'red'; </script>
Reduzieren Sie die Komplexität von CSS: Vermeiden Sie tief verschachtelte Elemente und übermäßig komplexe CSS-Regeln, die Reflows auslösen können.
Verwenden Sie „visibility: versteckt“ statt „display: none“, wenn Sie ein Element einfach ausblenden möchten, ohne das Layout zu beeinträchtigen. „display: none“ löst einen Reflow aus, während „sichtbarkeit: versteckt“ nur ein Repaint auslöst.
Das obige ist der detaillierte Inhalt vonReflows und Repaints in Javascript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!