Introducerea AsyncDisplayKit: pentru aplicații netede și receptive pe iOS – Facebook Engineering

ați observat vreodată aplicații balbismul în timp ce derulați și glisați în jurul? A apăsat un buton și a urmărit întreaga interfață înghețând în timp ce încearcă să reacționeze? iOS este binecunoscut pentru bara de calitate a experienței utilizatorului, dar întâlnirea cu acea bară poate fi dificilă, în special pe iPhone-urile și iPad-urile mai vechi. Aplicațiile lustruite folosesc de obicei optimizări de performanță fragmentate pentru a-și menține interfețele fluide, tratând diferite surse de încetinire ca probleme diferite. Astăzi suntem open-sourcing AsyncDisplayKit, un cadru care oferă o modalitate holistică de a vă menține aplicația lină și receptivă.

cazul pentru AsyncDisplayKit

funcționalitatea interfeței cu utilizatorul iOS — desenarea pe ecran, răspunsul la evenimentele tactile, rularea simulărilor fizice pentru derularea inerțială și așa mai departe — este blocată de firul principal. Pentru ca o aplicație să mențină standardul de aur de 60 de cadre pe secundă, poate utiliza firul principal doar pentru milisecunde la un moment dat. Dar vizualizările UIkit numai cu fir principal, cum ar fi UIImageView și UITextView, pot dura zeci până la sute de milisecunde la dimensiune și afișare. Și în timp ce firul principal decodează o imagine sau redă text, acesta nu poate răspunde la introducerea utilizatorului sau nu poate ține pasul cu derularea.

deoarece utilizarea vizualizărilor UIkit stoc poate provoca încetiniri, aplicațiile performante tind să aibă soluții pentru componentele UIkit individuale. În loc de a lăsa UIImageView face munca scump în sine, s-ar putea folosi manual grafica de bază pentru a decomprima JPEG și PNG-uri în fundal; în loc să utilizeze UITextView, acestea ar putea lucra direct cu textul de bază. Această abordare este eficientă, dar are limitări — soluțiile individuale tind să se comporte diferit, ceea ce face dificilă raționarea cu privire la îmbunătățirile de nivel superior și comportamentul aplicației.AsyncDisplayKit se bazează pe UIkit și Core Animation pentru a oferi o soluție generală. Vizualizările sale de imagine și text pot fi utilizate fără a bloca firul principal, oferind o soluție drop-in pentru această sarcină comună. Mai important, acceptă crearea și redarea asincronă a ierarhiilor complexe de vizualizare în același mod.

introducerea nodului

nodul AsyncDisplayKit este o abstracție fără fir peste UIView, care este la rândul său o abstracție peste CALayer:

dacă știți cum să utilizați vizualizări, știți cum să utilizați noduri. Asimenode și text Kit-alimentat ASTextNode poate fi folosit la fel ca omologii lor UIKit. Spre deosebire de ierarhiile de vizualizare UIKit, ierarhiile nodurilor pentru ecrane întregi de conținut pot fi inițializate și așezate pe fire de fundal — iar nodurile facilitează utilizarea procesoarelor multicore în toate dispozitivele iOS actuale.

nodurile au multe avantaje față de vizualizări. De exemplu, puteți îmbunătăți adesea performanța înlocuind vizualizările cu straturi. Din păcate, acest lucru necesită procesul obositor de portare a codului bazat pe Vizualizare către diferitele API și riscă inevitabil regresii. Cu noduri, este la fel de ușor ca:

dacă mai târziu trebuie să treceți de la straturi înapoi la vizualizări, este o schimbare de o singură linie! Aceasta este o diferență transformațională. În loc să fiți precauți cu codul UI susținut de straturi, îl puteți utiliza în mod implicit ori de câte ori nu aveți nevoie de manipulare tactilă.

Noțiuni de bază

AsyncDisplayKit este robust și gata de utilizare în aplicațiile. Am construit-o inițial pentru a face posibilă interfața cu utilizatorul extrem de tactilă a Paper și merge mână în mână cu motorul de animație Pop, dar este la fel de puternic cu dinamica UIKit și designul convențional al aplicațiilor. Abia așteptăm să vedem ce vei crea cu el.

consultați Ghidul sau discuția NSLondon pentru a afla mai multe. AsyncDisplayKit este disponibil pe GitHub.

Lasă un răspuns

Adresa ta de email nu va fi publicată.