Einführung in AsyncDisplayKit: Für reibungslose und reaktionsschnelle Apps unter iOS – Facebook Engineering

Haben Sie jemals bemerkt, dass Apps beim Scrollen und Wischen stottern? Tippte auf eine Schaltfläche und beobachtete die gesamte Schnittstelle einfrieren, wie es zu reagieren versucht? iOS ist bekannt für seine User Experience Qualität Bar bekannt, aber diese Bar treffen kann schwierig sein,, vor allem auf älteren iPhones und iPads. Polierte Apps verwenden in der Regel stückweise Leistungsoptimierungen, um ihre Schnittstellen flüssig zu halten und verschiedene Quellen der Langsamkeit als unterschiedliche Probleme zu behandeln. Heute sind wir Open-Sourcing AsyncDisplayKit, ein Framework, das eine ganzheitliche Möglichkeit bietet, Ihre App reibungslos und reaktionsschnell zu halten.

Der Fall für AsyncDisplayKit

Die Funktionalität der iOS—Benutzeroberfläche — Zeichnen auf den Bildschirm, Reagieren auf Berührungsereignisse, Ausführen von Physiksimulationen für inertiales Scrollen usw. – wird vom Hauptthread blockiert. Damit eine App den Goldstandard von 60 Bildern pro Sekunde beibehält, kann sie den Hauptthread jeweils nur für Millisekunden verwenden. UIKit-Ansichten nur für Hauptthreads wie UIImageView und UITextView können jedoch Dutzende bis Hunderte von Millisekunden benötigen, um sich selbst zu skalieren und anzuzeigen. Und während der Hauptthread ein Bild dekodiert oder Text rendert, kann er nicht auf Benutzereingaben reagieren oder mit dem Scrollen Schritt halten.

Da die Verwendung von Standard-UIKit-Ansichten zu Verlangsamungen führen kann, verfügen performante Apps in der Regel über Problemumgehungen für einzelne UIKit-Komponenten. Anstatt UIImageView die Arbeit selbst ausführen zu lassen, verwenden sie möglicherweise Core Graphics manuell, um JPEGs und PNGs im Hintergrund zu dekomprimieren; anstatt UITextView zu verwenden, arbeiten sie möglicherweise direkt mit Core Text . Dieser Ansatz ist effektiv, hat jedoch Einschränkungen — einzelne Problemumgehungen neigen dazu, sich unterschiedlich zu verhalten, was es schwierig macht, über Verbesserungen auf höherer Ebene und das Anwendungsverhalten nachzudenken.

AsyncDisplayKit baut auf UIKit und Core Animation auf, um eine allgemeine Lösung anzubieten. Die Bild- und Textansichten können verwendet werden, ohne den Hauptthread zu blockieren, und bieten eine Drop-In-Lösung für diese häufige Aufgabe. Noch wichtiger ist, dass es das asynchrone Erstellen und Rendern komplexer Ansichtshierarchien auf die gleiche Weise unterstützt.

Einführung in den Knoten

Der AsyncDisplayKit-Knoten ist eine threadsichere Abstraktion über UIView, die wiederum eine Abstraktion über CALayer ist:

Wenn Sie wissen, wie man Ansichten verwendet, wissen Sie, wie man Knoten verwendet. ASImageNode und das Text-Kit-basierte ASTextNode können wie ihre UIKit-Gegenstücke verwendet werden. Im Gegensatz zu UIKit-Ansichtshierarchien können Knotenhierarchien für ganze Bildschirme mit Inhalten initialisiert und in Hintergrundthreads angelegt werden — und Knoten machen es einfach, die Vorteile der Multicore-CPUs in allen aktuellen iOS-Geräten zu nutzen.

Knoten haben viele Vorteile gegenüber Ansichten. Beispielsweise können Sie die Leistung häufig verbessern, indem Sie Ansichten durch Ebenen ersetzen. Leider erfordert dies den langwierigen Prozess der Portierung von ansichtsbasiertem Code auf die verschiedenen APIs und birgt unweigerlich das Risiko von Regressionen. Mit Knoten ist es so einfach wie:

Wenn Sie später von Ebenen zurück zu Ansichten wechseln müssen, ist dies eine einzeilige Änderung! Dies ist ein transformativer Unterschied. Anstatt auf Layer-gestützten UI-Code zu achten, können Sie ihn standardmäßig verwenden, wenn Sie keine Berührungsbehandlung benötigen.

Erste Schritte

AsyncDisplayKit ist robust und bereit für den Einsatz in Ihren Apps. Wir haben es ursprünglich entwickelt, um die hochgradig taktile Benutzeroberfläche von Paper zu ermöglichen, und es geht Hand in Hand mit der Pop-Animations-Engine, aber es ist genauso leistungsstark mit UIKit Dynamics und herkömmlichen App-Designs. Wir können es kaum erwarten zu sehen, was Sie damit schaffen werden.

Schauen Sie sich den Leitfaden oder den NSLondon Talk an, um mehr zu erfahren. AsyncDisplayKit ist auf GitHub verfügbar.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.