Der folgende Beitrag ist ein Gastbeitrag von Sarah Drasner (@sarah_edo). Sarah forscht und hält Vorträge über Animationen. Ich habe die Gelegenheit ergriffen, sie hier einige dieser Forschungsergebnisse teilen zu lassen, diesmal mit Fokus auf SVG-Animationen und die verschiedenen technologischen Entscheidungen, die Sie treffen können.
Nachdem ich nun einige Monate mit verschiedenen SVG-Animations-Techniken gearbeitet habe, kann ich Ihnen einen grundlegenden Überblick geben, damit Sie sie selbst vergleichen können. Es gibt gute Gründe, jede dieser Methoden zu verwenden. Hoffentlich kann dieser Beitrag Sie zum richtigen Werkzeug für die jeweilige Aufgabe führen.
Wir werden einen grundlegenden Funktionsvergleich durchgehen. Dann werden wir uns ansehen, wie gut sie funktionieren. Zwei verschiedene Benchmarks sind enthalten. Einer stammt aus Aufzeichnungen der Chrome DevTools-Timeline, der andere misst visuelle Aufzeichnungen vom Bildschirm.
Während HTML-Elemente, die mit CSS gestylt sind, bei Animationen tendenziell besser abschneiden, hat SVG den Vorteil, dass es alles zeichnen kann, während es auflösungsunabhängig ist. In den Benchmarks arbeiten wir speziell mit SVG-Bildern.
Wir werden diese SVG-Animationstechniken vergleichen
Es gibt unzählige weitere, die wir nicht abdecken, darunter Snap.svg und das ältere Raphaël.
Es ist erwähnenswert, dass CSS und SMIL native Animationsfunktionen im Browser haben, während GSAP und Velocity JavaScript-Bibliotheken sind, die eine oder mehrere der Rendering-Ebenen manipulieren, um Animationen zu erstellen.
Überblicksvergleiche
CSS
Vorteile
- Sie bieten eine gute Leistung, insbesondere wenn sie hardwarebeschleunigt sind, aber vielleicht nicht so gut, wie die DevTools-Timeline berichtet. Darauf werden wir später eingehen.
- Die Integration in bestehende Benutzeroberflächen ist einfach, da Sie keine weiteren Ressourcen laden müssen.
- CSS ist perfekt für kleine Interaktionen wie Hover-Zustände.
- Es gibt einige gute Ressourcen für fein abgestimmte Cubic-Bezier-Easing-Kurven, die es einfach machen, das potenzielle Ergebnis während der Entwicklung zu visualisieren.
Fallstricke
- Es gibt einige Kompatibilitätsprobleme mit älteren Versionen. @keyframes funktionieren nicht in IE9 oder älter.
- Sie können Benutzerinteraktionen nur über Pseudo-Zustände wie
:hoverund:focuserstellen; JavaScript ist für Ereignisse wie Klickinteraktionen erforderlich. - Das Verketten mehrerer Animationen erfolgt über Verzögerungen, was für einfachere Animationen gut funktioniert. Bei längeren Animationen macht dies den Workflow sehr kompliziert. Es ist schwierig, Zeitpläne anzupassen, insbesondere wenn Sie die ersten Frames manipulieren müssen.
- Physik kann umständlich sein. Komplexe Aufgaben wie Reibung oder ein sich progressiv verlangsamender hüpfender Ball sind im besten Fall extrem komplex und im schlimmsten Fall keine Option.
-
Prozentbasierte Zeitsteuerung ist schwieriger zu manipulieren als ihr JavaScript-Gegenstück, da sie eine Abstraktionsebene hinzufügt.

Vielleicht wollten Sie etwas immer 1 Sekunde in einer Animation machen. Das ist der Keyframe bei 33,33%, wenn die Animationsdauer 3s beträgt, ändert sich aber vollständig, wenn sich diese Animationsdauer ändert. transform-originfür SVG ist nicht konsistent- Das Stapeln von Transformationen nacheinander ist nicht intuitiv, da es auf die letzte Platzierung des Elements reagiert.
- Es zeigt kein konsistentes Verhalten von Browser zu Browser.
Velocity.js
Vorteile
- Einfache Syntax. Wenn Sie bestehende jQuery-Animationen haben, können Sie sie leicht auf Velocity umstellen, da es die gleiche Syntax hat. Wenn Sie an
$.animategewöhnt sind, ist$.velocityeinfach zu handhaben. - Es gibt viele vorgefertigte Easing-Funktionen, und Federphysik ist verfügbar. Für weitere Verfeinerungen gibt es auch Step-Easing, bei dem Sie ein Array übergeben können.
- Die Syntax ist prägnanter als CSS oder SMIL.
- Sie können mehrere Animationen mit einer einzigen Codezeile versetzt starten, insbesondere wenn Sie das verfügbare UI-Plugin verwenden.
- Tiefere Browserunterstützung als CSS.
Fallstricke
- Die Leistung ist *wesentlich* besser als bei bestehendem jQuery
.animate(), aber nicht so gut wie bei CSS, SMIL oder GSAP. - Bietet Abwärtskompatibilität bis IE8, aber nicht so weit zurück wie GSAP.
GreenSock (GSAP)
Vorteile
- Einfach zu bedienen und die kompakteste Syntax.
- Die Zeitleiste von GSAP ermöglicht es Ihnen, sequenzierte Animationen einfach zu steuern und zu manipulieren. Dies macht die Arbeit mit längeren Animationen erheblich einfacher als mit fast jeder anderen Technik. (Sie können mehrere Tweens zur gleichen Zeit einstellen, Szenen erstellen und sich vorwärts und rückwärts bewegen, mit unterschiedlichen Zeitplänen - im Grunde Ihre Animationen animieren).
- Automatisch hardwarebeschleunigt. Die Leistung ist extrem gut - so gut wie natives Rendering.
- Das Anwenden von Physik ist einfach. Sie haben einen Ease-Visualizer, der ziemlich hilfreich ist.
- Bietet eine Lösung für einige bekannte
transform-originProbleme. - Bietet Unterstützung bis IE6. Bessere Unterstützung als CSS, SMIL oder Velocity.
- GreenSock verfügt über einen robusten Funktionsumfang. Wenn Sie etwas tun müssen, hat GSAP es wahrscheinlich bedacht. Um eine Vorstellung davon zu bekommen, was ich meine, schauen Sie sich diese robuste Plugin-Seite an: https://greensock.com/plugins/ die meisten davon sind in der TweenMax-Version enthalten (obwohl sie für Dateigrößenbedenken eine schlanke, gestrippte TweenLite-Version haben). Es gibt einige spezialisierte Funktionen wie das Animieren entlang eines Pfades (wie SMIL mit
<animateMotion>), Drag & Drop-Interaktionen und sogar die Arbeit mit Canvas. - Sie haben ein jQuery-Plugin, das das bestehende jQuery
.animate()überschreibt und die Leistung ohne zusätzlichen Code verbessert.
Fallstricke
- Ihr Code ist Open Source, aber Sie benötigen möglicherweise eine Lizenz für die kommerzielle Nutzung in bestimmten Situationen.
SMIL
Vorteile
- Hat eine unkomplizierte deklarative Syntax.
- Sie können Pfade und Formen mit der gleichen Syntax, mit der sie geschrieben wurden, morphen, was sie sehr intuitiv macht. Dies ist schön für Dinge wie Logos oder morphing Button-Icons.
- Sie können entlang eines Pfades animieren.
- Die Leistung ist sehr gut, möglicherweise besser als bei CSS, Velocity und GSAP in Bezug auf die visuelle Darstellung.
- Es gibt eine nicht auf Verzögerung basierende Verkettung, wie z. B. das Beginnen einer Animation, wenn eine andere endet.
- Einfach zu bestehender SVG-Syntax hinzuzufügen und keine externen Ressourcen laden zu müssen.
Fallstricke
- Es gibt Spekulationen darüber, ob die Unterstützung für SMIL fortgesetzt wird. Chrome führt es möglicherweise in die Web Animations API ein (zusammen mit allem anderen), aber wenn dies nicht geschieht, wird es möglicherweise nicht gut gepflegt, da es derzeit untergenutzt ist.
- Verkettete Animationen sind ziemlich begrenzt.
- Derzeit gibt es keine Unterstützung für IE.
Falls die Browserunterstützung für IE ein Hauptanliegen ist, hier ist eine sehr einfache Aufschlüsselung

Benchmark-Übersicht
Es gibt eine Reihe von Überlegungen bei der Erstellung eines ausgewogenen Benchmarks für Animationsansätze. Es musste ein sehr einfaches SVG sein – ich habe ein Rechteck mit einer Kontur verwendet. Außerdem musste es schleifen, damit Leistungsunterschiede im Laufe der Zeit beobachtet werden konnten. Der Benchmark-Code ist auf GitHub und auch in dieser Sammlung auf CodePen zu finden.
Bevor Sie mit der Animation eines SVG mit einer beliebigen Technik beginnen, ist es am besten, das SVG zu optimieren, genau wie bei jedem anderen Bild. Ein paar gute Optionen sind der In-Browser- SVG-Editor oder der Node-basierte SVGO.
Dies ist die hardwarebeschleunigte CSS-Version
Sehen Sie den Pen Benchmarking SVG Animation – CSS hardware accelerated von Sarah Drasner (@sdras) auf CodePen.
Es gibt zwei verschiedene Benchmarks: einen basierend auf den Aufzeichnungen der Chrome DevTools-Timeline und einen basierend auf visuellen Aufzeichnungen vom Bildschirm. Dieser duale Ansatz ist notwendig, da Chrome möglicherweise nicht alle Verarbeitungsschritte in der Timeline genau wiedergibt. Jack Doyle von GSAP zeigt in diesem Video gut die mögliche Untererfassung auf.
Da die Art und Weise, wie Animationen beeinflusst werden, stark von der Interpretation des Publikums abhängt, habe ich eine visuelle Aufzeichnung des „Ruckelns“ (Jank) aufgenommen, das beim Ausführen jeder Technik auftreten kann, zusammen mit den Chrome DevTools Timeline-Benchmarks. Jank ist das Ausmaß des visuellen Stotterns, das bei der Erstellung einer Animation oder eines Scroll-Events auftritt, mit dem Ziel, flüssige Animationen zu erzielen. Wenn Sie mehr darüber lesen möchten, ist JankFree eine großartige Ressource für Tools und Tipps zur Optimierung Ihres Codes.
Nicht alle Demos sind gleich – Hardwarebeschleunigung und CPU
Es ist wichtig, bei diesen Vergleichen zu erkennen, dass das reine Erstellen der Animation mit jeder Methode nicht die ganze Geschichte erzählt. Bei jeder Technik gibt es Möglichkeiten, die Animation hardwarezubeschleunigen, um die Leistung zu steigern. In dieser Demo ist jede Technik nativ für den jeweiligen Animationstyp beschleunigt. Es ist beispielsweise möglich, SMIL zu optimieren, indem dem Element eine eigene Ebene im Compositor mit CSS zugewiesen wird (z. B. transform: translateZ(0)). Stattdessen habe ich jedoch gezeigt, wie dies direkt in SMIL geschieht. Um die Leistungsdifferenz zu demonstrieren, habe ich auch ein nicht hardwarebeschleunigtes Beispiel für CSS und SMIL beibehalten.
Alle aus einer Bibliothek erstellten Codes wurden vor dem Test von den Autoren der Bibliothek geprüft und genehmigt.
Wie man mit CSS hardwarebeschleunigt
- Setzen von Transformationen auf null und dann Bewegen mit Transformationen.
- Sie lagern sie auf die GPU (Graphics Processing Unit) aus. Die meisten modernen Browser verfügen über Hardwarebeschleunigung, nutzen diese aber erst, wenn sie dazu aufgefordert werden.
- Weitere GPU-Beschleunigung:
backface-visibility: hidden;undperspective: 1000;– verhindert das Flackern der Animation. - Isolieren Sie die Ebene, die Sie verschieben oder anpassen müssen.
- Verschieben mit Transformationen.
Wie man mit SMIL hardwarebeschleunigt
- Verwenden Sie
<animateTransform>anstelle von<animate>und setzen Sie x-, y-, z-Werte (mit 0 für z). - Ähnlich wie bei CSS verschiebt dies das Element in eine eigene Ebene. Das Verschieben mit Transformationen ist besser als mit Rändern oder Top/Left, da es nicht neu gezeichnet werden muss.
Wie man mit Velocity hardwarebeschleunigt
- Verschieben mit
translateXundtranslateY. Setzen Sie das Element auftranslateZ: 0;. - Vermeiden Sie Layout-Thrashing, indem Sie Variablen für Elemente deklarieren, die Sie mehrmals animieren, um mehrfache Lookups zu vermeiden (hier nicht anwendbar, aber erwähnenswert).
Wie man mit GSAP hardwarebeschleunigt
- In der Demo haben wir das Element auf
force3D: "true"gesetzt, aber GSAP liefert dies jetzt automatisch mit. Das bedeutet, dass Sie nichttranslateZ: 0;verwenden müssen, um hardwarezubeschleunigen, es ist bereits enthalten. - Das Bewegen von Objekten mit X und Y ist besser als mit Rändern.
- TweenLite ist die leichtgewichtigere Version von GSAP und es wird empfohlen, diese für kleinere Animationen zu verwenden. TweenMax bietet Unterstützung für Schleifen, daher verwenden wir sie hier.
Ein Wort zur Vorsicht: Die gleichzeitige Hardwarebeschleunigung zu vieler Ebenen kann sich negativ auswirken. Jede Ebene ist eine gemappte GPU-Textur – eine übermäßige Anzahl erschöpft schnell die verfügbaren Ressourcen. Daher ist es wichtig, die Hardwarebeschleunigung umsichtig einzusetzen.
Benchmarks
Hier sind die Ergebnisse der Timeline-Benchmarks: (die kleineren Balken deuten auf eine bessere Leistung hin.) Achten Sie besonders auf „Painting“, da dies das kostspieligste der Ereignisse ist. Jeder Benchmark wurde 5 Mal ausgeführt, um Konsistenz zu gewährleisten, und dann gemittelt. Hier ist eine Version von CSS enthalten, die hardwarebeschleunigt (HA) ist, und auch, wo sie es nicht ist (naiv), um zu veranschaulichen, wie stark die Leistung beeinflusst werden kann. Diese Tests wurden auf Chrome Version 40.0.2214.91 (64-Bit) durchgeführt – der neuesten stabilen Version zum Zeitpunkt der Veröffentlichung des Artikels. Bitte beachten Sie, dass die Versionsnummer die Timeline-Berichterstattung ändern kann.


Wichtige Hinweise
Opazität und Transformation scheinen insgesamt besser zu funktionieren, und die Timeline berichtet, dass sie bei hardwarebeschleunigtem CSS *wesentlich* besser sind.

Aufgrund der oben genannten Möglichkeit der Untererfassung für CSS-Animationen ist es wichtig, die Dinge nicht nur anhand der Timeline zu bewerten, sondern auch visuell, da dies die Art und Weise ist, wie das Publikum die Animation bewerten wird.
Visuelle Benchmarks
Um die ganze Geschichte zu sehen, habe ich auch einige Benchmarks basierend auf dem visuellen Geschehen durchgeführt. Dazu habe ich einen Screencast der ersten vollständigen Iteration der Schleife in jeder Technik aufgenommen und dann ein Tool namens Physmo verwendet, um jede Bewegung des SVG-Elements zu plotten. Ich habe einen Vergleich jeder Zeit aufgezeichnet, in der sich die Änderungsrate visuell nicht mehr als 2 Frames fortbewegte. Dies zeigt die Zeitspanne, in der die Animation angeblich angehalten würde, also das Ruckeln. Hier ist, wie jede Technik abgeschnitten hat.

Wie Sie sehen können, hat optimiertes CSS, genau wie Jacks Demonstration gezeigt hat, in Bezug auf die visuelle Darstellung nicht jede andere Technik übertroffen. SMIL hatte die konstanteste Änderungsrate, gefolgt von GSAP. GSAP, CSS und Velocity schnitten in einem relativ ähnlichen Bereich ab im Vergleich zu dem, was die Timeline berichtete, die besagte, dass sie weit auseinander lagen.
Bitte beachten Sie, dass die Screencast-Technologie die Ergebnisse hier möglicherweise beeinflusst. Ich ermutige Sie, mit den von mir erstellten Demos zu spielen oder, besser noch, eigene Vergleiche zu schreiben, um zu sehen, wie die Techniken abschneiden.
Benchmarks variieren je nach Kontext. Die Arbeit mit einem anderen Satz von Parametern, insbesondere beim Laden anderer Ressourcen, könnte diese Ergebnisse beeinflussen. Ein fortlaufender Dialog über die Leistung unter verschiedenen Umständen ist entscheidend für die Verbesserung von Animationstechnologien.
Komplexere Animationen
Das ist alles gut und schön für kurze Animationen, aber wie sieht es aus, wenn man eine längere, komplexere Animation erstellt? GSAP ermöglicht es Ihnen, auf einer einstellbaren Timeline oder vielen Timelines zu arbeiten – von denen jede die Zeitachse anpassen, die Reihenfolge ändern und sogar überlappen können. CSS erlaubt es Ihnen nicht, verschiedene Transformationen gleichzeitig zu überlappen, was für sehr realistische Bewegungen eine große Rolle spielt. Wenn Sie darüber nachdenken, wie sich jemand bewegt oder wie Objekte miteinander interagieren, gibt es nur sehr selten Momente, in denen alles in einer linearen Kette ohne Überlappung funktioniert.
Bei CSS-Animationen können Sie Ereignisse mit Verzögerungen verketten, aber was passiert, wenn Sie einen Teil davon anpassen möchten und dieser entsprechende Teile hat? Sie müssen dann Ihren Weg durch den gesamten Erstellungsprozess zurückverfolgen und die Mathematik für alles, was folgt, neu berechnen. GSAPs Timeline bietet Ihnen viel mehr Kontrolle für die Manipulation dieser. Sie ermöglichen auch Dinge wie Physik, die für realistische Animationen entscheidend sein können.
SMIL eignet sich hervorragend für Dinge wie das Morphen von SVGs ineinander, was keine der anderen Techniken in gleichem Umfang bietet. Es ist jedoch noch unklar, ob die Spezifikation im Laufe der Zeit gepflegt wird, und da Sie bestehende Punkte verwenden müssen, macht es weniger Sinn, diese Technik für viele verschiedene Elemente gleichzeitig zu verwenden.
CSS ist wunderbar für Dinge wie Übergänge von Seitenelementen. Dinge, die Sie häufiger auf einer Unternehmenswebsite sehen, bei denen das Ziel nicht darin besteht, Animationen zu präsentieren, sondern eher kleinere Effekte, um Interesse zu wecken oder Änderungen hervorzuheben. Wenn Sie ein kleines bisschen Interaktion benötigen, können Hover-Effekte und leichtgewichtige Scrolling-Bibliotheken wie Waypoints ein einfacher Weg sein, dies zu tun.
Animationsbibliotheken wie GSAP und Velocity eignen sich hervorragend für die Produktion, da der Aufwand und die erforderliche Code-Menge viel geringer sind. Velocity erreicht möglicherweise nicht die gleiche Leistung wie die anderen, aber die einfache Tatsache, dass Sie Ihren bestehenden jQuery-Code mit einem Wort in etwas Leistungsfähigeres ändern können, ist ein großer Vorteil. Velocity bietet auch Physik, was CSS nicht kann. GSAP geht noch einen Schritt weiter: Sie können bestehendes jQuery übernehmen und einfach das GSAP jQuery-Plugin hinzufügen. Es überschreibt Ihr bestehendes jQuery und macht alles leistungsfähiger, ohne dass Sie den Code ändern müssen. GSAP bietet auch Physik, Bewegung entlang eines Pfades, was auch immer Sie brauchen.
Aufgrund einiger ernsthafter Leistungsmängel sollte jQuery allein nicht mehr als geeignete Methode zur Animation von Dingen betrachtet werden.
Schlussfolgerungen
Empfehlungen für die Verwendung
- Verwenden Sie CSS-Animationen für kleine Übergänge oder einfache Animationen. Sie müssen keine weitere Ressource laden, und kleine Transformationen beim Hovern können ein Segen für Interaktion und Benutzererlebnis sein. Insbesondere wenn Sie keine Physik oder viele verschachtelte SVG-Transformationen benötigen, was nicht immer notwendig ist.
- Verwenden Sie SMIL für das Morphen von SVGs ineinander, wie bei Logos usw., und wenn das animierte Element in IE zu einem statischen Bild zurückfallen kann.
- Verwenden Sie Velocity für einen Leistungsschub bei bestehenden jQuery-Animationen, ohne viel Code ändern zu müssen.
- Verwenden Sie GSAP für hoch performante Animationen oder längerfristige Animationen mit mehreren Szenen. Es löst große Probleme mit der browserübergreifenden Konsistenz für SVG-Transformationsursprünge. GSAP ist sehr robust mit einem breiten Funktionsumfang, aber Sie können kleinere Versionen ohne viele Schnörkel verwenden und nur das laden, was notwendig ist.
Jeder hat seine eigenen Vorlieben, und es ist unmöglich, vollständig unparteiisch zu sein. Es ist wichtig, bei der Auswahl von Werkzeugen bewusst vorzugehen, da sie alle spezifische Kompromisse haben und der Kontext in einer Entwicklungsumgebung zählt. Dieser Beitrag dient als allgemeiner Vergleich, um Entwicklern bei der Auswahl der am besten geeigneten Technik für ihre Ziele zu helfen.
Fantastischer Artikel, Sarah!
Ein paar Anmerkungen
Sie können Formen auch mit JavaScript morphen – somit ist dies keine SMIL-exklusive Funktion.
Auch das Animieren entlang eines Pfades wird keine SMIL-Vorteil bleiben, da CSS jetzt ein Motion Path Modul hat, das hoffentlich noch in diesem Jahr implementiert wird.
CSS-Transformationen sind bei SVGs nicht hardwarebeschleunigt – zumindest nicht in Webkit-basierten Browsern. Firefox bietet in dieser Hinsicht eine bessere Leistung, soweit ich weiß.
Sehr gut gemacht, Sarah. Die Benchmarks sind unglaublich nützlich und aufschlussreich.
Prost!
Danke, Sara! Ich bin ein großer Fan Ihrer Arbeit.
Erstens, zum Morphen von Formen – wahr – ich habe den Beitrag oben bearbeitet.
Das CSS Motion Path Modul ist sehr interessant – wissen Sie, wann es herauskommen wird und ob es Auswirkungen auf die SMIL-Unterstützung für Bewegungen entlang eines Pfades (oder allgemein) in Zukunft haben wird?
Zuletzt schien die Anwendung von Null-Z-Transformationen auf das gesamte SVG-Element einen Effekt in den Timeline-Benchmarks zu haben – ich habe keinen visuellen Vergleich von CSS naiv und CSS HA durchgeführt, was nützlich sein könnte. Ich würde gerne mehr über Ihre Ergebnisse lesen, ich bin sicher, Sie haben großartige Informationen, die ich vielleicht verpasst habe. Wenn Sie sie weitergeben möchten, wäre das sehr hilfreich!
Danke, Sara, ich schätze es.
Als ich das letzte Mal mit Dirk, dem Editor der Motion Path-Spezifikation, sprach, sagte er, dass wir sie in diesem Jahr in Browsern sehen sollten – aber das war vor ein paar Monaten, also hoffe ich, dass dies immer noch gilt.
Ich bin mir nicht sicher, wie sich dies auf SMIL auswirken wird. Ich weiß, dass es die Web Animations API beeinflusst hat, da das Objekt zur Erstellung von Bewegungen entlang eines Pfades aus der API entfernt wurde, zugunsten der CSS-Spezifikation.
Ich liebe SMIL, aber Gerüchten zufolge wird es aus Blink entfernt, IE erwägt keine Anstrengungen mehr darin – die Web Animations API hat hier Priorität, und Firefox hat einige Fehler. Daher würde ich es persönlich nur für einfache Animationen verwenden, die für das von mir verwendete Bild nicht entscheidend sind.
Wiederum, wirklich gut geschriebene und informative Arbeit, Sarah. =)
Das sind alles wirklich nützliche Informationen. Und danke, Sara!
Tolle Zusammenfassung verschiedener Techniken. Danke!
Hallo Sarah, ich habe diese Zusammenfassung wirklich genossen. Ein paar Dinge, die ich erwähnen wollte
Wir unterstützen in Chrome keine Komposition in SVG (soweit ich weiß). Zum Beispiel, in Ihrem SMIL-Demo, wenn Sie zu DevTools gehen und auf die Registerkarte Rendering klicken, können Sie "Composited layer borders" aktivieren und Sie werden sehen, dass die Box keine orangefarbene Umrandung erhält wie jedes andere hervorgehobene Element. Wenn Sie "Paint rectangles" aktivieren, sehen Sie, dass sie hellgrün wird, was darauf hinweist, dass sie jedes Frame neu gezeichnet wurde.
Wenn Sie ein vollständiges Bild von Eigenschaften erhalten möchten, die sich auf Layout, Paint und Composite auswirken, habe ich CSS Triggers für all den Spaß erstellt.
Benchmarks sind meiner Meinung nach so schwierig, weil sie, wenn sie einfach sind, nicht unbedingt unter Hauptthread-Überlastung leiden (was normalerweise Probleme bei Animationen verursacht, die nicht vollständig vom Compositor gesteuert werden, wie z. B. eine Keyframe-Transformationsanimation), aber wenn sie zu komplex sind, konzentrieren sie sich sehr auf einen Anwendungsfall und es ist schwer, aussagekräftige Vergleiche zu ziehen.
Ich bin wirklich überrascht, dass die GSAP- und Velocity-Werte so stark abweichen. Ich hätte erwartet, dass sie ungefähr die gleichen DOM-Manipulationen durchführen und ähnliche Strafen für Stil, Layout, Paint und Composite verursachen.
Ich liebe es, dass Sie einige Benchmarks durchgeführt haben, und ich hoffe, dass andere dasselbe tun werden, nicht nur für SVG, sondern für alle möglichen Dinge! :)
Absolut, Paul. Der Hauptzweck der Benchmarks ist es, mehr davon zu fördern – ich höre und sehe immer wieder Leute fragen, warum etwas, das in JavaScript geschrieben wurde, nicht in CSS und umgekehrt gemacht wurde, daher denke ich, es ist hilfreich, sich die verschiedenen Vorteile und Fallstricke von Methode zu Methode genauer anzusehen, da sie alle etwas zu bieten haben.
Im letzten Absatz versuche ich, den Kontext ein wenig zu berücksichtigen – es stimmt, dass das, womit Sie in Ihrer eigenen Entwicklungsumgebung arbeiten, sich auch auf die Leistung auswirkt. Die Idee ist, den Leuten zu helfen, ein wenig zielgerichtet in ihren Entscheidungen zu sein und hoffentlich von nur einer Arbeitsweise abzuweichen.
Ihre CSS Triggers-Seite ist großartig! Ich werde heute den ganzen Tag damit spielen. Danke für Ihre Einblicke.
Tolle Informationen. Ich würde die Benchmarks (insbesondere die Berechnung der Screencase-Ruckler) wirklich gerne auf anderen Browsern sehen, um zu sehen, ob dieselben Muster gelten.
Die SVG-Animationsleistung von Firefox hat sich im vergangenen Jahr erheblich verbessert, aber ich weiß nicht, ob die Verbesserung nur die insgesamt schnellere SVG-Darstellung widerspiegelt oder ob sie durch spezifische Optimierungen deklarativer Animationen verursacht wird. Auf der anderen Seite hinkt Safari wahrscheinlich in Bezug auf Leistungsoptimierung hinter Chrome zurück.
Schließlich eine wichtige Klarstellung
Internet Explorer unterstützt derzeit keine CSS-Animationen/Übergänge, wenn sie auf SVG-Stileigenschaften angewendet werden. Ebenso wenig unterstützen sie CSS-Transformationen von SVG-Elementen. Daher ist die CSS-Animation von SVG ziemlich begrenzt, selbst in IE 10 und 11. Sie können `font-size` animieren, aber das ist alles.
Hallo Amelia,
Ich denke, es ist eine großartige Idee, visuelle Benchmarks von Browser zu Browser durchzuführen – das werde ich wahrscheinlich als Nächstes tun. (Obwohl, wenn andere neugierig sind und es auch angehen wollen, je mehr Informationen, desto besser)
Guter Punkt bezüglich IE – der von mir gezeigte Browservergleich war nicht spezifisch für SVG, sondern nur für die Animationstechniken selbst, und Sie haben absolut Recht, dass das verwirrend ist – ich werde eine Bearbeitung vornehmen, um das klarzustellen.
Danke für Ihre Einsichten, ich habe auch Ihren SVG-Artikel hier sehr genossen.
Hallo! Autor von Velocity.js hier.
Ich schätze umfassende Analysen wie diese, die über reine Spekulation hinausgehen und tatsächlich tiefgehende Einblicke geben.
Ich habe Velocity nicht über den Workflow hinaus für SVG-Animationen optimiert; es überrascht mich nicht, dass seine SVG-Animationsleistung von GSAP abweicht. Velocity hat sich seit seinem Ziel, die gängigsten UI-Animationsanwendungsfälle drastisch zu verbessern, auf Standard-HTML-Elemente konzentriert (im Gegensatz zur grafischen SVG-Animation).
Ich werde die Leistung jedoch drastisch anpassen, da es einige leicht zu erreichende Verbesserungen gibt, die ich an einem bevorstehenden Wochenende umsetzen kann.
Es ist bedauerlich, dass die Verbesserungen später nicht in diesem Artikel reflektiert werden, aber so ist das Leben :-)
Hallo Julian,
Danke für Ihr fortlaufendes Feedback zu den Benchmarks. Ich bin natürlich glücklich, sie mit Ihren Verbesserungen erneut durchzuführen, wie ich es bereits getan habe – lassen Sie mich einfach wissen, wenn es fertig ist, und ich kann einen Nachtrag zum Artikel hinzufügen. :)
Benchmarks für Front-End werden immer ein bisschen ein sich bewegendes Ziel sein. Dinge werden ständig aktualisiert, was tatsächlich ein Segen für uns alle ist. Ich freue mich darauf, diese Konversation fortzusetzen und auch andere Benchmarks einzubeziehen.
Danke für Ihre harte Arbeit an Leistungsverbesserungen für unsere Community.
Könnten Sie vielleicht Benchmarks gegen JQuerys reguläres Animate durchführen?
Ja, das ist ein guter Punkt. Es gibt viel Literatur über den Leistungsschub, den man mit einer dieser Techniken erzielen kann, aber ich kann ihn aufnehmen, nur um das genau zu zeigen. Ich werde auch etwas für jQuery schreiben und den Artikel aktualisieren. Ebenso können Sie selbst einen Pull Request an das Repo senden oder einen der Pens in der Codepen-Sammlung forken. Der gesamte Code ist Open Source, damit er verbessert werden kann. Danke!
Sie sagen, GSAP sei „Open Source“, aber das scheint es nicht zu sein. Es ist in vielen Situationen kostenlos nutzbar und erfordert in anderen eine Zahlung (wenn Sie den Zugang zu Ihrer Website verkaufen, die es nutzt). Aber diese Art von „kostenlos“ ist nicht Open Source.
GSAP ist in der Tat Open Source in dem Sinne, dass der Quellcode kostenlos heruntergeladen werden kann und auf GitHub liegt, offen für jedermann einzusehen. Es ist auch für fast jede Nutzungsart völlig kostenlos. Aber ich verstehe Ihren Punkt vollkommen. „Open Source“ bedeutet für verschiedene Leute unterschiedliche Dinge. GSAPs Lizenzmodell zielt darauf ab, es extrem zugänglich zu machen (auch für die meisten kommerziellen Projekte kostenlos), während es vor der häufigsten Ursache für das Scheitern der meisten Open-Source-Projekte schützt: Stagnation. Carl und ich arbeiten seit Jahren Vollzeit daran, es zu unterstützen und zu verfeinern. So voreingenommen ich auch sein mag (und das bin ich absolut), ich würde argumentieren, dass GSAPs Lizenz ein Merkmal und keine Belastung ist. Der Beweis liegt im Pudding. Es ist jedoch nicht für jedermann. Ihre Klarstellung ist absolut valide. Danke für das Angebot.
Jack, Sie haben mehrmals auf die Gefahr der „Stagnation“ für Open-Source-Projekte hingewiesen, aber ich muss sagen, dass diese Ansicht selbstgefällig erscheint. Apache, Jquery, Firefox, PHP usw. – sind diese stagniert? Was ist mit dem proprietären IE6, ActiveScript und Flash?
Ihr GSAP-Produkt sieht ziemlich gut aus, aber es ist nach keiner mir bekannten Definition Open Source. Ich darf den Code nicht forken, oder? Offensichtlich ist die Lizenz Ihre Wahl, aber ich bin nicht davon überzeugt, dass Ihre Wahl es letztendlich „stagnationsfrei“ machen wird. Und wenn Sie stagnieren (Pleite gehen, das Interesse verlieren, sich in eine Richtung orientieren, die einige Ihrer Benutzer nicht interessiert), was bleibt mir dann? Anstatt Ihre Sachen zu hacken, um sie nicht stagnieren zu lassen, müsste ich etwas anderes finden.
Toller Beitrag. Mir war nicht bewusst, dass CSS bis jetzt untererfasst.
Warum decken Sie Snap.svg nicht erneut ab? Es ist einer der größten Akteure und zu wichtig, um weggelassen zu werden.
Hallo Hawk Phil,
Snap.svg ist in der Tat wichtig. Bisher habe ich nicht genug damit gearbeitet, um mir ein Urteil darüber zu bilden, daher wird es vorerst weggelassen. Ich werde wahrscheinlich in den kommenden Monaten eine andere Art von Benchmark durchführen und es wird dann enthalten sein. Wenn Sie es jedoch in dieser Runde hinzufügen möchten, können Sie eine PR einreichen oder einen der Pens forken – der Code ist genau aus diesem Grund Open Source, und ich würde gerne Tests zu Ihrem Beitrag durchführen. Danke!