Przedstawiamy AsyncDisplayKit: płynne i responsywne aplikacje na iOS – Inżynieria Facebooka

Czy zauważyłeś, że aplikacje jąkają się podczas przewijania i przesuwania? Nacisnął przycisk i patrzył, jak cały interfejs zawiesza się, gdy próbuje zareagować? iOS jest dobrze znany ze swojego paska jakości doświadczenia użytkownika, ale spotkanie z tym paskiem może być trudne, zwłaszcza na starszych iPhone ‘ ach i iPadach. Dopracowane aplikacje zazwyczaj wykorzystują fragmentaryczne optymalizacje wydajności, aby utrzymać płynność interfejsów, traktując różne źródła spowolnienia jako różne problemy. Dziś udostępniamy asyncdisplaykit, framework, który oferuje holistyczny sposób, aby Twoja aplikacja była płynna i responsywna.

sprawa dla asyncdisplaykit

funkcjonalność interfejsu użytkownika iOS — rysowanie na ekranie, reagowanie na zdarzenia dotykowe, uruchamianie symulacji fizyki w celu przewijania inercyjnego i tak dalej — jest wąskim gardłem głównego wątku. Aby aplikacja utrzymywała złoty standard 60 klatek na sekundę, może używać głównego wątku tylko przez milisekundy naraz. Ale widoki UIKit, takie jak UIImageView i UITextView, tylko w głównym wątku, mogą zająć dziesiątki do setek milisekund, aby je powiększyć i wyświetlić. Podczas gdy głównym wątkiem jest dekodowanie obrazu lub renderowanie tekstu, nie może on reagować na dane wejściowe użytkownika ani nadążać za przewijaniem.

ponieważ używanie standardowych widoków UIKit może powodować spowolnienie, wydajne aplikacje mają zwykle obejścia dla poszczególnych komponentów UIKit. Zamiast pozwolić UIImageView na samodzielne wykonywanie kosztownej pracy, mogą ręcznie użyć Grafiki rdzeniowej do dekompresji plików JPEG i PNG w tle; zamiast używać UITextView, mogą pracować bezpośrednio z tekstem rdzeniowym. Takie podejście jest skuteczne — ale ma ograniczenia-poszczególne obejścia zachowują się inaczej, co utrudnia rozumowanie o ulepszeniach wyższego poziomu i zachowaniu aplikacji.

AsyncDisplayKit opiera się na UIKit i Core Animation, aby zaoferować ogólne rozwiązanie. Jego widoki obrazu i tekstu mogą być używane bez blokowania głównego wątku, oferując rozwiązanie drop-in dla tego wspólnego zadania. Co ważniejsze, obsługuje asynchronicznie tworzenie i renderowanie złożonych hierarchii widoków w ten sam sposób.

wprowadzenie węzła

węzeł AsyncDisplayKit jest abstrakcją bezpieczną dla wątków nad UIView, która z kolei jest abstrakcją nad Calayerem:

Jeśli wiesz, jak używać widoków, wiesz, jak używać węzłów. Asimagenode i Text Kit-powered ASTextNode mogą być używane podobnie jak ich odpowiedniki UIKit. W przeciwieństwie do hierarchii widoku UIKit, hierarchie węzłów dla całej zawartości ekranu mogą być inicjowane i układane w wątkach tła – a węzły ułatwiają korzystanie z wielordzeniowych procesorów na wszystkich obecnych urządzeniach z systemem iOS.

węzły mają wiele zalet w stosunku do widoków. Na przykład często można poprawić wydajność, zastępując widoki warstwami. Niestety, wymaga to żmudnego procesu przenoszenia kodu opartego na widoku do różnych API i nieuchronnie grozi regresją. W przypadku węzłów jest to tak proste, jak:

Jeśli później musisz przełączyć się z warstw z powrotem do widoków, jest to zmiana jednowierszowa! Jest to różnica transformacyjna. Zamiast uważać na kod interfejsu użytkownika z warstwami, możesz go używać domyślnie, gdy nie potrzebujesz obsługi dotykowej.

rozpoczęcie pracy

AsyncDisplayKit jest solidny i gotowy do użycia w twoich aplikacjach. Pierwotnie stworzyliśmy go, aby umożliwić bardzo dotykowy interfejs użytkownika Paper i idzie w parze z silnikiem animacji Pop, ale jest tak samo potężny, jak dynamika UIKit i konwencjonalne projekty aplikacji. Nie możemy się doczekać, aby zobaczyć, co z nim stworzysz.

zapoznaj się z przewodnikiem lub nslondon talk, aby dowiedzieć się więcej. AsyncDisplayKit jest dostępny na GitHub.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.