Eine der möglichen Möglichkeiten, die CPU-Belastung zu reduzieren, ist die Verwendung einer sogenannten CPU null transform hack, die oft als eine Art Silberkugel bezeichnet wird . In vielen Fällen wird die Renderleistung in WebKit- und Blink-Browsern wie Chrome, Opera und Safari drastisch verbessert.
Verwendung des "Null Transform Hack" (ein Hardware-Compositing-Modus)
Der Null-Transformations-Hack macht im Grunde zwei Dinge:
- Es schaltet den Hardware-Compositing-Modus ein (vorausgesetzt, er wird für die Plattform unterstützt).
- Es wird eine neue Schicht mit eigener Trägeroberfläche erstellt
Um einen Browser zu "erzwingen", fügen Sie dem Element einfach eine dieser CSS-Eigenschaften hinzu:
transform: translateZ(0);
/* or its friend: */
transform: translate3d(0, 0, 0);
Wenn Sie mit 3D-Transformationen arbeiten, sollten Sie auch über diese Eigenschaften verfügen , um die Leistung zu verbessern :
backface-visibility: hidden;
perspective: 1000;
Vorbehalte des "Null Transform Hack"
Das Aktivieren einer Hardwarebeschleunigung in CSS3 für viele Objekte kann die Leistung beeinträchtigen!
Anscheinend erzeugt jede Null-3D-Transformation eine neue Ebene. Die Erstellung von Force-Hacking-Ebenen ist jedoch möglicherweise nicht immer die Lösung für bestimmte Leistungsengpässe auf einer Seite. Layer-Erstellungstechniken können die Seitengeschwindigkeit erhöhen, sind jedoch mit Kosten verbunden: Sie belegen Speicherplatz im System-RAM und auf der GPU. Selbst wenn die GPU gute Arbeit leistet, kann die Übertragung vieler Objekte ein Problem darstellen, sodass sich die Verwendung der GPU-Beschleunigung möglicherweise nicht lohnt. Das Zitat von W3C :
Das Einrichten des Elements in einer neuen Ebene ist jedoch eine relativ teure Operation, die den Start einer Transformationsanimation um einen merklichen Sekundenbruchteil verzögern kann.
Das Verschieben einiger großer Objekte hat eine höhere Leistung als das Verschieben vieler kleiner Objekte bei Verwendung der 3D-Beschleunigung. So müssen sie mit Bedacht verwendet werden , und Sie müssen sicherstellen , dass die Hardware-Beschleunigung der Operation wirklich die Leistung Ihrer Seite helfen wird, und dass eine Performance - Engpass nicht durch eine andere Operation auf Ihrer Seite verursacht wird.
Darüber hinaus wurde eine GPU speziell für die Durchführung komplexer mathematischer / geometrischer Berechnungen entwickelt, und das Auslagern von Vorgängen auf die GPU kann zu einem massiven Stromverbrauch führen . Wenn Hardware aktiviert wird, wird natürlich auch der Akku des Zielgeräts aktiviert.
Der moderne Weg: das will-changeAnwesen
Der Fortschritt steht nicht an einer Stelle ... W3C hat die will-changeCSS-Eigenschaft eingeführt. Um es kurz zu machen: Mit der will-changeEigenschaft können Sie den Browser im Voraus darüber informieren, welche Art von Änderungen Sie wahrscheinlich an einem Element vornehmen, damit er die entsprechenden Optimierungen vornehmen kann, bevor sie benötigt werden.
Folgendes sagen sie im Entwurf :
Mit will-changeder in dieser Spezifikation definierten Eigenschaft kann ein Autor im Voraus festlegen, welche Eigenschaften sich in Zukunft voraussichtlich ändern werden, sodass die UA einige Zeit vor ihrer Verwendung die entsprechenden Optimierungen vornehmen kann. Auf diese Weise wird die Seite bei der eigentlichen Änderung schnell aktualisiert.
Wenn Sie will-changedem Browser einen Hinweis auf eine bevorstehende Umwandlung geben, können Sie diese Regel einfach zu dem Element hinzufügen, dessen Umwandlung Sie erwarten:
will-change: transform;
Bei der Entwicklung für Mobilgeräte müssen Entwickler beim Schreiben mobiler Webanwendungen die zahlreichen Geräteeinschränkungen berücksichtigen. Browser werden schlauer, und manchmal ist es besser, die Entscheidung der Plattform selbst zu überlassen, anstatt die Beschleunigung zu überlappen und das Verhalten auf hackige Weise zu erzwingen.