Kurzfassung
Ab Chrome 53 werden alle Inhalte neu gerastert, wenn sich die Skalierung der Transformation ändert und die CSS-Eigenschaft will-change: transform
nicht vorhanden ist. Anders ausgedrückt: will-change: transform
bedeutet „Bitte animieren Sie es schnell“.
Dies gilt nur für Transformationen, die durch Scriptmanipulation erfolgen, und gilt nicht für CSS-Animationen oder Webanimationen.
Das bedeutet, dass deine Website vermutlich besser aussehen wird. Ohne einige einfache Änderungen, die im Folgenden beschrieben werden, kann es allerdings auch etwas länger dauern.
Auswirkungen für Webentwickler
Durch diese Änderung wird unter will-change: transform
erzwungen, dass der Inhalt in eine feste Bitmap gerastert wird, die sich bei Transformationsupdates dann nie ändert. Auf diese Weise können Entwickler die Geschwindigkeit von Transformationsanimationen auf dieser Bitmap erhöhen und sie beispielsweise verschieben, drehen oder skalieren.
Wir unterscheiden nicht zwischen Skalierungs- und Übersetzungstransformationen.
Empfohlene Maßnahmen
Fügen Sie will-change: transform
auf Elemente ein, wenn Sie sehr schnelle Animationsgeschwindigkeiten (mit anderen Worten: 60 fps) benötigen und es ist zu erwarten, dass das Rastern des Elements in hoher Qualität in jedem Frame nicht schnell genug ist. Andernfalls solltest du will-change: transform
nicht verwenden.
Zur Optimierung der Leistung und Qualität können Sie will-change:
transform
zu Beginn von Animationen hinzufügen und am Ende wieder entfernen. Beachten Sie jedoch, dass das Hinzufügen oder Entfernen von will-change: transform
häufig hohe einmalige Leistungskosten verursacht.
Weitere Hinweise zur Implementierung
Wenn Sie will-change: transform
entfernen, werden Inhalte in einem gestochen scharfen Maßstab neu gerastert, jedoch nur im nächsten Animationsframe (über requestAnimationFrame)
). Wenn Sie also eine Ebene mit will-change: transform
haben und einfach ein neues Raster auslösen und dann mit der Animation fortfahren möchten, müssen Sie „will-change:transform“ entfernen und die Ebene dann in einem requestAnimationFrame() c
allback wieder hinzufügen.
Wenn Sie während einer Animation Rastern im aktuellen Maßstab durchführen möchten, wenden Sie die obige Technik an, um sie in einem Frame zu entfernen und will-change:
transform
in einem nachfolgenden Frame wieder hinzuzufügen.
Dies kann dazu führen, dass die Inhalte ihre zusammengesetzte Ebene verlieren und die obige Empfehlung etwas teuer ist. Wenn dies ein Problem ist, empfehlen wir, auch transform: translateZ(0)
in den Inhalt aufzunehmen, damit er während dieses Vorgangs in einer zusammengesetzten Ebene verbleibt.
Zusammenfassung der Auswirkungen
Diese Änderung hat Auswirkungen auf die Qualität der gerenderten Inhalte, die Leistung und die Kontrolle durch Entwickler.
- Qualität der gerenderten Inhalte: Die gerenderte Ausgabe von Elementen, die den Transformationsumfang animieren, ist standardmäßig immer scharf.
- Leistung: Das Animieren der Transformation, wenn
will-change: transform
vorhanden ist, ist schnell. - Steuerungsmöglichkeiten für Entwickler: Entwickler können zwischen Qualität und Geschwindigkeit für Frames pro Element und pro Animation wählen, indem sie
will-change: transform
hinzufügen oder entfernen.
Weitere Informationen finden Sie oben im Verweis auf das Designdokument.
Beispiele
In diesem Beispiel wird das Element mit der ID remainsBlurry
nach dieser Änderung verschwommen angezeigt, das Element mit der ID noLongerBlurry
wird jedoch scharf. Das liegt daran, dass erstere eine CSS-Eigenschaft will-
change: transform
enthält.
Beispiele für Animationen im Transformationsmaßstab aus echten Anwendungen
- Von diesem Programmfehler: Zooming tiger
- Google Maps auf Mobilgeräten (maps.google.com): Karte zoomen
- Google Maps Lite auf dem Computer
- Karte der Plätze in Ticketmaster