Wenn wir die Seite durch bestimmte Verhaltensweisen (Klicken, Bewegen oder Scrollen) dazu veranlassen, einen großen Bereich zu zeichnen, ist der Browser oft unvorbereitet und kann die CPU nur passiv zum Berechnen und Neuzeichnen nutzen Beim Zeichnen war es schwierig, mit dem Rendern umzugehen, da es im Voraus keine Vorbereitung gab, sodass der Rahmen herunterfiel und hängenblieb. Das CSS-Attribut will-change bietet Webentwicklern die Möglichkeit, dem Browser mitzuteilen, welche Änderungen am Element vorgenommen werden, sodass der Browser im Voraus entsprechende Optimierungsvorbereitungen treffen kann, bevor sich die Attribute des Elements tatsächlich ändern. Diese Art der Optimierung kann einen Teil der komplexen Berechnungsarbeit im Voraus vorbereiten und die Seitenreaktion schneller und empfindlicher machen. In diesem Artikel wird die CSS-Eigenschaft will-change vorgestellt
GPU ist ein Grafikprozessor, der auf die Verarbeitung und Zeichnung grafikbezogener Hardware spezialisiert ist. Die GPU ist speziell für die Durchführung komplexer mathematischer und geometrischer Berechnungen konzipiert, wodurch die CPU von Grafikverarbeitungsaufgaben befreit wird und in der Lage ist, andere Systemaufgaben auszuführen.
Die sogenannte Hardwarebeschleunigung bedeutet, dass im Computer sehr viel Rechenleistung erforderlich ist Die Arbeit wird spezieller Hardware zugewiesen, um die Arbeitslast der CPU zu reduzieren
CSS-Animationen, Transformationen und Verläufe lösen nicht automatisch eine GPU-Beschleunigung aus, sondern nutzen die etwas langsamere Software-Rendering-Engine des Browsers. In den Welten transition
, transform
und animation
sollten Prozesse auf die GPU verlagert werden, um die Geschwindigkeit zu erhöhen. Nur die 3D-Verformung hat eine eigene Ebene, während die 2D-Verformung keine eigene Ebene hat.
【Hack】
Verwenden Sie die Methode translateZ()
oder translate3d()
, um dem zu täuschenden Element eine unveränderte 3D-Verformung hinzuzufügen Durchsuchen Der Prozessor löst eine Hardwarebeschleunigung aus. Der Preis besteht jedoch darin, dass diese Situation RAM- und GPU-Speicherplatz beansprucht, indem Elemente auf einer eigenen Ebene überlagert werden und die Zeit für die Speicherplatzfreigabe nicht bestimmt werden kann
wird sich ändern
Funktion: Benachrichtigen Sie den Browser im Voraus darüber, welche Animation das Element ausführen wird, sodass der Browser im Voraus entsprechende Optimierungseinstellungen vorbereiten kann
Wert: auto |. <animateable-feature>
Anfangswert: auto
Anwendbar auf: alle Elemente
Vererbung: Keine
Kompatibilität: IE13+, chrome49+, safari9.1 +, IOS9.3+, Android52+
auto bedeutet, dass es keine spezifische Spezifikation gibt, welche Attribute sich ändern werden. Der Browser muss selbst erraten und dann einige herkömmliche Methoden verwenden, die von Browsern häufig zur Optimierung verwendet werden >
kann wie folgt lauten: Wert: <animateable-feature>
Zeigt an, dass der Entwickler hofft, die Position der Bildlaufleiste in naher Zukunft zu ändern oder zu animieren scroll-position
Zeigt an, dass der Entwickler hofft, in naher Zukunft etwas am Elementinhalt zu ändern. contents
zeigt an, dass der Entwickler hofft, den angegebenen Eigenschaftsnamen in naher Zukunft zu ändern oder zu animieren. Wenn der Attributname eine Abkürzung ist, stellt er alle entsprechenden Abkürzungen oder Attribute voller Länge dar <custom-ident>
.will-change { will-change: transform; transition: transform 0.3s; } .will-change:hover { transform: scale(1.5); }
.will-change-parent:hover .will-change { will-change: transform; } .will-change { transition: transform 0.3s; } .will-change:hover { transform: scale(1.5); }
.sidebar { will-change: transform; }
-Attribut will-change
var el = document.getElementById('element'); // 当鼠标移动到该元素上时给该元素设置 will-change 属性 el.addEventListener('mouseenter', hintBrowser); // 当 CSS 动画结束后清除 will-change 属性 el.addEventListener('animationEnd', removeHint); function hintBrowser() { // 填写在CSS动画中发生改变的CSS属性名 this.style.willChange = 'transform, opacity'; } function removeHint() { this.style.willChange = 'auto'; }
.slide { will-change: transform; }
zu ändern
3. Wenden Sie die Will-Change-Optimierung nicht vorzeitig an: Wenn die Seite keine Leistungsprobleme aufweist, fügen Sie nicht das Will-Change-Attribut hinzu, um ein wenig Geschwindigkeit herauszuholen. Die ursprüngliche Entwurfsabsicht von will-change besteht darin, als letztes Mittel zur Optimierung bestehende Leistungsprobleme zu lösen. Es sollte nicht zur Vermeidung von Leistungsproblemen verwendet werden. Übermäßiger Einsatz von will-change kann zu einer großen Speichernutzung und einem komplexeren Rendervorgang führen, da der Browser versucht, sich auf mögliche Änderungen vorzubereiten. Dies führt zu schwerwiegenderen Leistungsproblemen
4. Geben Sie ihm genügend Arbeitszeit: Dieses Attribut wird verwendet, um Seitenentwicklern zu ermöglichen, den Browser darüber zu informieren, welche Attribute sich ändern können. Der Browser kann dann vorab einige Optimierungsarbeiten durchführen, bevor die Änderung eintritt. Daher ist es sehr wichtig, dem Browser etwas Zeit zu geben, um diese Optimierungen tatsächlich durchzuführen. Wenn Sie es verwenden, müssen Sie versuchen, einige Möglichkeiten zu finden, um die möglichen Änderungen des Elements zu einem bestimmten Zeitpunkt im Voraus zu erkennen, und ihm dann das Will-Change-Attribut hinzufügen
Weitere CSS-Attribute zur Optimierung der Seitendarstellung Bei Artikeln zum Thema „Will-Change“ achten Sie bitte auf die chinesische PHP-Website!