Anzeige
Anzeige
UX & Design

Mehr Performance für deine Website mit CSS3, dank Hardware-Acceleration

Wir zeigen euch, wie ihr die Hardware-Acceleration mit CSS3 aktivieren könnt um eure Web-Projekte, zum Beispiel auf Smartphones, schneller laufen zu lassen.

Von Mario Janschitz
3 Min.
Artikel merken
Anzeige
Anzeige

Der Sinn hinter Hardware-Acceleration mit CSS3

„Native Applikationen sind performanter als Web-Apps!“ – das haben wir alle schon mal gehört aber was heißt das genau? Native Applikationen können auf die GPU des Gerätes zugreifen, und Web-Apps werden im Browser dargestellt, der somit auch das Rendering von diesen Webseiten übernimmt. Das führt zum Beispiel dazu, dass eine Animation die top– und left-Attribute nutzt, allgemein nicht so flüssig läuft wie eine Animation, die das -vendor-transform:translate3d-Attribut aus CSS3 verwendet – natürlich haben wir auch hier wieder das Problem mit den Browsern, deswegen auch das „-vendor“-Prefix.

Anzeige
Anzeige

Der Grund für die bessere beziehungweise flüssigere Animation ist, dass Attribute wie margin, padding, left, right und so weiter, innerhalb des Browsers, „Frame-by-Frame“ berechnet werden müssen. Ganz besonders problematisch äußert sich diese Vorgehensweise bei mehreren, gleichzieitg animierten, Elementen – wenn wir also Hardware-Acceleration einsetzen, dann wälzen wir die Arbeitslast vom Browser an den Grafikprozessor (GPU) ab.

css3-acceleration

Mit CSS3 und aktivierter Hardware-Acceleration könnt ihr die Performance eurer Animationen erhöhen. (Grafik: t3n)

Hardware-Acceleration mit CSS3

Animationen, „Transitions“ und „Transforms“ werden per se nicht automatisch mit der GPU gerendert, sondern durch den Browser. Es wäre jetzt natürlich schön, wenn wir als Entwickler ein Attribut hätten, mit dem wir ein Rendering auch für Webprojekte im CSS aktivieren könnten. Ähnlich dem font-smoothing: antialiased mit dem wir das Rendering von Schrift und Texten steuern können. Das gibt es aber so nicht, alles was wir derzeit haben ist die Möglichkeit über einen „Hack“ – aber dazu später mehr. Nichts desto trotz könnt ihr mit der „Hardware-Acceleration“ bessere Performance, in fast allen Desktop-Browsern erreichen – sogar in einigen mobilen Browsern.

Anzeige
Anzeige

Derzeit unterstützten Firefox, Safari, Chrome, Opera und IE9+ diese Funktionalität, allerdings setzt eine Beschleunigung beim Rendering durch die GPU spezielle Befehle, innerhalb der CSS-Datei, voraus um auf ein DOM-Element angewandt werden zu können. 3D-Transformationen lösen immer eine „Hardware-Acceleration“ aus vorausgesetzt ihr nutzt, zum Beispiel, diesen Befehl:

Anzeige
Anzeige
transform: rotate3d( 0, 0, 0, 45deg );

anstelle von

transform: rotate( 45deg );

Manchmal kommt es bei dieser Methode zu sogenannten „Flickering“ während der Animation. Abhilfe schaffen hierbei diese zwei Attribute:

Anzeige
Anzeige
backface-visibility: hidden;
perspective: 1000;

Wobei backface-visibility definiert, ob ein Element sichtbar sein sollte, obwohl es nicht am Bildschirm angezeigt wird. Mit perspective könnt ihr die Entfernung zwischen dem Element und dem Viewport auf der Z-Achse in Pixeln angeben.

Beachtet aber, dass es sich hierbei um nicht standardisierte CSS-Attribute handelt. Und wie schon Dean Jackson (Apple) bereits 2010 sagte:

„Jede Transformation die eine 3D-Operation ausführt, wird eine Hardware-Beschleunigung bewirken, auch wenn die eigentliche Transformation sich im 2D-Raum bewegt, oder wenn die 3D-Transformation nichts tut (zum Beispiel bei translate3d(0,0,0)). Allerdings ist das nur derzeitiges Verhalten und dieses könnte sich in der Zukunft ändern (deswegen dokumentieren wir diese Funktion nicht oder fordern zur Anwendung auf). Aber diese Funktion ist sehr hilfreich und in einigen Situationen, kann sie die Rendering-Leistung siginifikant erhöhen.“

Mobile-Browser und CSS3-Hardware-Acceleration

Jetzt ist es natürlich auch sinnvoll, die Hardware-Beschleunigung dort einzusetzen, wo sie am Meisten benötigt wird: bei Mobiltelefonen. Leider unterstützen anscheinend nur die WebKit-Browser ein Rendering über die GPU des Gerätes. Wie gesagt, handelt es sich hierbei um einen nicht standardisierten „Draft“ – aber was tut man als Entwickler nicht alles um Kundenwünsche wie: „Das muss dynamischer sein“ oder „Mein iPhone kann den Effekt X, wieso soll das nicht auf meiner Website funktionieren?“ zu erfüllen.

Anzeige
Anzeige

Warum also CSS3 und kein JavaScript?

Weil CSS3, im direkten Vergleich, immer noch schneller ist – CSS3 wird nativ im Browser gerendert. Ja, der Nachteil wird zum Vorteil. Rich Bradshaw hat das auch in seiner Artikelserie zum Thema Animation mit CSS3 und Hardware-Acceleration anschaulich zur Schau gestellt. Mehr zu diesem Thema findet ihr übrigens hier. Das soll aber nicht heißen, dass ihr auf JavaScript verzichten sollt. Letztendlich kommt es, wie immer, auf das spezifische Projekt, an.

Fazit

Angesichts der Tatsache, dass sich das Web ständig weiterentwickelt: Die neueren Versionen von Google Chrome setzen teilweise schon automatisch auf ein GPU-Rendering bei opacity und auch bei 2D-Transformationen, kann man sich als Entwickler nicht immer auf diese nicht-standadisierten Methoden verlassen, weil nicht gewährleistet werden kann, ob ein zukünftiger Browser in Kombination mit einem Gerät ein Attribut unterstütz oder nicht – und ob es dabei nicht zu Darstellungsfehlern kommen könnte. Als Entwickler hat man auch die Aufgabe, diese Informationen an den Kunden weiterzugeben, damit Ärger auf beiden Seiten erspart bleibt.

Setzt ihr die „Hardware-Acceleration“ von CSS3 ein?

Mehr zu diesem Thema
Fast fertig!

Bitte klicke auf den Link in der Bestätigungsmail, um deine Anmeldung abzuschließen.

Du willst noch weitere Infos zum Newsletter? Jetzt mehr erfahren

Anzeige
Anzeige
4 Kommentare
Bitte beachte unsere Community-Richtlinien

Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.

Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.

Dein t3n-Team

George Ringer

Modernizr.csstransforms3d bzw. .csstransforms3d .ichbineindiv mit Fallback sind hier das Zauberwort.

Antworten
piranhaklaus

„wenn wir also Hardware-Acceleration einsetzen, dann wälzen wir die Arbeitslast vom Browser an den Grafikprozessor (GPU) ab.“

Was ist denn der Browser für eine Hardware-Komponente?
Insgesamt leider etwas schwammig geschrieben. Z.b. handelt es sich auch nicht wirklich um einen CSS-Hack, wenn man ausschließlich korrekt geschriebene Befehle verwendet.

Antworten

Melde dich mit deinem t3n Account an oder fülle die unteren Felder aus.

Bitte schalte deinen Adblocker für t3n.de aus!
Hallo und herzlich willkommen bei t3n!

Bitte schalte deinen Adblocker für t3n.de aus, um diesen Artikel zu lesen.

Wir sind ein unabhängiger Publisher mit einem Team von mehr als 75 fantastischen Menschen, aber ohne riesigen Konzern im Rücken. Banner und ähnliche Werbemittel sind für unsere Finanzierung sehr wichtig.

Schon jetzt und im Namen der gesamten t3n-Crew: vielen Dank für deine Unterstützung! 🙌

Deine t3n-Crew

Anleitung zur Deaktivierung
Artikel merken

Bitte melde dich an, um diesen Artikel in deiner persönlichen Merkliste auf t3n zu speichern.

Jetzt registrieren und merken

Du hast schon einen t3n-Account? Hier anmelden

oder
Auf Mastodon teilen

Gib die URL deiner Mastodon-Instanz ein, um den Artikel zu teilen.

Anzeige
Anzeige