Présentation d’AsyncDisplayKit: Pour des applications fluides et réactives sur iOS – Ingénierie Facebook

Avez-vous déjà remarqué que les applications bégayaient lorsque vous faites défiler et balayez? Appuyez sur un bouton et regardez toute l’interface se figer alors qu’elle essaie de réagir? iOS est bien connu pour sa barre de qualité d’expérience utilisateur, mais il peut être difficile de respecter cette barre, en particulier sur les anciens iPhones et iPads. Les applications polies utilisent généralement des optimisations de performances fragmentaires pour garder leurs interfaces fluides, traitant différentes sources de lenteur comme différents problèmes. Aujourd’hui, nous sommes open-sourcing AsyncDisplayKit, un framework qui offre un moyen holistique de garder votre application fluide et réactive.

La fonctionnalité de l’interface utilisateur iOS — dessiner à l’écran, répondre aux événements tactiles, exécuter des simulations physiques pour le défilement inertiel, etc. — est bloquée par le thread principal. Pour qu’une application maintienne l’étalon-or de 60 images par seconde, elle ne peut utiliser le thread principal que pendant des millisecondes à la fois. Mais les vues UIKit du thread principal comme UIImageView et UITextView peuvent prendre des dizaines à des centaines de millisecondes pour se dimensionner et s’afficher. Et pendant que le fil principal décodeune image ou rend du texte, il ne peut pas répondre aux entrées de l’utilisateur ni suivre le défilement.

Étant donné que l’utilisation de vues UIKit de stock peut entraîner des ralentissements, les applications performantes ont tendance à avoir des solutions de contournement pour les composants UIKit individuels. Au lieu de laisser UIImageView effectuer lui-même un travail coûteux, ils peuvent utiliser manuellement des graphiques de base pour décompresser les fichiers JPEG et PNG en arrière-plan; au lieu d’utiliser UITextView, ils peuvent travailler directement avec le texte principal. Cette approche est efficace, mais a des limites — les solutions de contournement individuelles ont tendance à se comporter différemment, ce qui rend difficile la raison des améliorations de niveau supérieur et du comportement des applications.

AsyncDisplayKit s’appuie sur UIKit et Core Animation pour offrir une solution générale. Ses vues d’image et de texte peuvent être utilisées sans bloquer le thread principal, offrant une solution directe pour cette tâche commune. Plus important encore, il prend en charge la création et le rendu asynchrones de hiérarchies de vues complexes de la même manière.

Introduction du nœud

Le nœud AsyncDisplayKit est une abstraction thread-safe sur UIView, qui est à son tour une abstraction sur CALayer :

Si vous savez utiliser les vues, vous savez utiliser les nœuds. ASImageNode et l’ASTextNode alimenté par un kit de texte peuvent être utilisés comme leurs homologues UIKit. Contrairement aux hiérarchies de vues UIKit, les hiérarchies de nœuds pour des écrans entiers de contenu peuvent être initialisées et disposées sur des threads d’arrière—plan – et les nœuds permettent de tirer facilement parti des processeurs multicœurs de tous les appareils iOS actuels.

Les nœuds présentent de nombreux avantages par rapport aux vues. Par exemple, vous pouvez souvent améliorer les performances en remplaçant les vues par des calques. Malheureusement, cela nécessite le processus fastidieux de portage du code basé sur la vue vers les différentes API et risque inévitablement des régressions. Avec les nœuds, c’est aussi simple que:

Si vous devez plus tard passer des calques aux vues, c’est un changement d’une ligne ! C’est une différence transformationnelle. Au lieu de vous méfier du code d’interface utilisateur soutenu par une couche, vous pouvez l’utiliser par défaut chaque fois que vous n’avez pas besoin de manipulation tactile.

Mise en route

AsyncDisplayKit est robuste et prêt à l’emploi dans vos applications. Nous l’avons construit à l’origine pour rendre possible l’interface utilisateur hautement tactile de Paper, et cela va de pair avec le moteur d’animation Pop, mais il est tout aussi puissant avec la dynamique UIKit et les conceptions d’applications conventionnelles. Nous avons hâte de voir ce que vous allez créer avec.

Consultez le guide ou la conférence NSLondon pour en savoir plus. AsyncDisplayKit est disponible sur GitHub.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.