Nur-Kompositor-Eigenschaften beibehalten und Anzahl der Ebenen verwalten

Beim Compositing werden die gezeichneten Teile der Seite zusammengesetzt, um sie auf dem Bildschirm anzuzeigen.

Paul Lewis

Beim Compositing werden die gezeichneten Teile der Seite zusammengesetzt, um sie auf dem Bildschirm anzuzeigen.

In diesem Bereich gibt es zwei wichtige Faktoren, die sich auf die Seitenleistung auswirken: die Anzahl der zu verwaltenden Kompositionsebenen und die Eigenschaften, die Sie für Animationen verwenden.

Zusammenfassung

  • Verwenden Sie für Ihre Animationen nur Transformationen und Deckkraftänderungen.
  • Bewegliche Elemente mit will-change oder translateZ hervorheben
  • Verwenden Sie nicht zu viele Angebotsregeln. Ebenen erfordern Arbeitsspeicher und Verwaltung.

Transformationen und Deckkraftänderungen für Animationen verwenden

Die leistungsstärkste Version der Pixel-Pipeline verzichtet sowohl auf Layout als auch auf Paint und erfordert nur Änderungen am Compositing:

Die Pixelpipeline ohne Layout oder Paint.

Dazu müssen Sie nur Eigenschaften ändern, die vom Renderer allein verarbeitet werden können. Derzeit gibt es nur zwei Properties, für die das zutrifft: transform und opacity:

Die Eigenschaften, die Sie animieren können, ohne das Layout oder die Malerei auszulösen.

Bei der Verwendung von transform und opacity ist zu beachten, dass sich das Element, für das Sie diese Eigenschaften ändern, in einer eigenen Compositor-Ebene befinden muss. Um eine Ebene zu erstellen, müssen Sie das Element entsprechend hochstufen. Das wird im nächsten Schritt erläutert.

Elemente hervorheben, die Sie animieren möchten

Wie bereits im Abschnitt Komplexität der Malerei vereinfachen und Malbereiche reduzieren erwähnt, sollten Sie Elemente, die Sie animieren möchten, in eine eigene Ebene verschieben (in einem angemessenen Rahmen, übertreiben Sie es nicht!):

.moving-element {
  will-change: transform;
}

Alternative für ältere Browser oder solche, die „will-change“ nicht unterstützen:

.moving-element {
  transform: translateZ(0);
}

Ebenen verwalten und Ebenenexplosionen vermeiden

Da Ebenen oft die Leistung verbessern, ist es verlockend, alle Elemente auf der Seite mit folgendem Code zu versehen:

* {
  will-change: transform;
  transform: translateZ(0);
}

Das bedeutet, dass Sie jedes einzelne Element auf der Seite bewerben möchten. Das Problem dabei ist, dass jede Ebene, die Sie erstellen, Speicher und Verwaltung erfordert, was nicht kostenlos ist. Auf Geräten mit begrenztem Arbeitsspeicher kann die Auswirkung auf die Leistung den Vorteil der Erstellung einer Ebene bei weitem überwiegen. Die Texturen jeder Ebene müssen auf die GPU hochgeladen werden. Daher gibt es weitere Einschränkungen in Bezug auf die Bandbreite zwischen CPU und GPU sowie den für Texturen auf der GPU verfügbaren Arbeitsspeicher.

Mit den Chrome-Entwicklertools die Ebenen in Ihrer App analysieren

Die Ein/Aus-Schaltfläche für den Paint-Profiler in den Chrome-Entwicklertools.

Wenn Sie die Ebenen in Ihrer Anwendung und die Gründe für die Ebenen eines Elements verstehen möchten, müssen Sie den Paint-Profiler in der Zeitachse von Chrome DevTools aktivieren:

Wenn diese Option aktiviert ist, sollten Sie eine Aufnahme machen. Nach Abschluss der Aufzeichnung können Sie auf einzelne Frames klicken, die sich zwischen den Balken für Frames pro Sekunde und den Details befinden:

Ein Frame, den der Entwickler analysieren möchte.

Wenn Sie darauf klicken, wird in den Details eine neue Option angezeigt: ein Ebenen-Tab.

Die Schaltfläche für den Ebenen-Tab in den Chrome-Entwicklertools.

Dadurch wird eine neue Ansicht geöffnet, in der Sie alle Ebenen in diesem Frame schwenken, scannen und heranzoomen können. Außerdem werden die Gründe für die Erstellung der einzelnen Ebenen angezeigt.

Die Ebenenansicht in den Chrome-Entwicklertools

In dieser Ansicht können Sie die Anzahl der Ebenen im Blick behalten. Wenn Sie bei leistungskritischen Aktionen wie Scrollen oder Übergängen viel Zeit für das Compositing benötigen (Sie sollten etwa 4–5 ms anstreben), können Sie anhand der hier aufgeführten Informationen sehen, wie viele Ebenen Sie haben, warum sie erstellt wurden, und die Anzahl der Ebenen in Ihrer App verwalten.