Introduktion AsyncDisplayKit: för smidig och lyhörd apps på iOS – Facebook Engineering

har du någonsin märkt apps stamning när du bläddrar och dra runt? Knackade på en knapp och såg hela gränssnittet frysa när det försöker reagera? iOS är känt för sin användarupplevelse quality bar, men det kan vara svårt att träffa den baren, särskilt på äldre iPhones och iPads. Polerade appar använder vanligtvis bitvisa prestandaoptimeringar för att hålla sina gränssnitt Flytande och behandla olika källor till långsamhet som olika problem. Idag öppnar vi asyncdisplaykit, ett ramverk som erbjuder ett holistiskt sätt att hålla din app smidig och lyhörd.

fallet för AsyncDisplayKit

iOS — användargränssnittsfunktionalitet — ritning till skärmen, svar på beröringshändelser, kör fysiksimuleringar för tröghetsrullning och så vidare-är flaskhalsad av huvudtråden. För att en app ska behålla guldstandarden på 60 bilder per sekund kan den bara använda huvudgängan för millisekunder åt gången. Men endast UIKit-vyer som uiimageview och UITextView kan ta tiotals till hundratals millisekunder i storlek och visa sig själva. Och medan huvudtråden avkodar en bild eller återger text, kan den inte svara på användarinmatning eller fortsätta med rullning.

eftersom användning av lager UIKit-vyer kan orsaka avmattningar tenderar prestandaappar att ha lösningar för enskilda UIKit-komponenter. Istället för att låta UIImageView göra dyrt arbete själv, kan de manuellt använda Kärngrafik för att dekomprimera JPEG och PNG i bakgrunden; istället för att använda UITextView kan de arbeta med Kärntext direkt. Detta tillvägagångssätt är effektivt, men har begränsningar — individuella lösningar tenderar att bete sig annorlunda, vilket gör det svårt att resonera om förbättringar på högre nivå och applikationsbeteende.

AsyncDisplayKit bygger på UIKit och Core Animation för att erbjuda en allmän lösning. Dess bild-och textvyer kan användas utan att blockera huvudtråden och erbjuda en drop-in-lösning för denna gemensamma uppgift. Ännu viktigare är att den stöder asynkront att skapa och göra komplexa visningshierarkier på samma sätt.

introduktion av noden

noden AsyncDisplayKit är en trådsäker abstraktion över UIView, som i sin tur är en abstraktion över CALayer:

Om du vet hur du använder vyer, vet du hur du använder noder. ASImageNode och Text Kit-drivna ASTextNode kan användas precis som deras UIKit motsvarigheter. Till skillnad från UIKit — visningshierarkier kan nodhierarkier för hela skärminnehåll initieras och läggas ut på bakgrundstrådar-och noder gör det enkelt att dra nytta av multicore-CPU: erna i alla nuvarande iOS-enheter.

noder har många fördelar jämfört med vyer. Du kan till exempel ofta förbättra prestanda genom att ersätta vyer med lager. Tyvärr kräver det den tråkiga processen att portera visningsbaserad kod till det olika API: et och riskerar oundvikligen regressioner. Med noder är det lika enkelt som:

om du senare behöver byta från lager tillbaka till vyer är det en radändring! Detta är en transformationsskillnad. Istället för att vara försiktig med layer-backed UI-kod kan du använda den som standard när du inte behöver beröringshantering.

komma igång

AsyncDisplayKit är robust och redo att användas i dina appar. Vi byggde ursprungligen det för att göra Papers mycket taktila användargränssnitt möjligt, och det går hand i hand med Pop-animationsmotorn, men det är lika kraftfullt med UIKit Dynamics och konventionella appdesigner. Vi kan inte vänta med att se vad du skapar med det.

kolla in guiden eller nslondon-samtalet för att lära dig mer. AsyncDisplayKit finns på GitHub.

Lämna ett svar

Din e-postadress kommer inte publiceras.