Použití nástrojů Xcode Instruments ke zlepšení výkonu aplikací
Xcode Instruments je vývojářský nástroj, který je zdarma dodáván s Xcode. Obsahuje mnoho užitečných nástrojů pro kontrolu a vylepšení aplikace. Přestože má co nabídnout, je to často oblast, která je trochu méně známá.
V tomto příspěvku na blogu vám ukážu, jak jsem pomocí Xcode Instruments zlepšil výkon v klíčové části aplikace Collect by WeTransfer. Abyste si mohli udělat představu o výsledcích, je zde výsledek před a po, ve kterém byla část za „Importem fotografií“ drasticky vylepšena:
Jak vidíte, vyskakovací okno pro import se ve staré verzi zobrazuje mnohem déle, zatímco finální sdílený list se také hodně zpožďuje.
Čím lepší je tato část ve vaší aplikaci, tím lépe vaše aplikace funguje.
Čas se do toho ponořit a podívat se, jak jsme tento tok vylepšili!
Co je Xcode Instruments?
Xcode Instruments lze nejlépe popsat jako výkonný a flexibilní nástroj pro analýzu a testování výkonu. Je součástí sady nástrojů Xcode, která zahrnuje také nástroje jako Create ML a Accessibility Inspector.
Přístroje lze použít k:
- Sledování problémů ve zdrojovém kódu
- Analýze výkonu aplikace
- Zjištění problémů s pamětí
A mnoho dalšího!
Jak se dostanu k nástrojům Xcode?
Přístup k nástrojům získáte pomocí Product ➔ Profile
z nabídky Xcode, jejíž zkratka je ⌘ + I
. Tím se obnoví váš produkt a otevře se přehled nástrojů Xcode.
Měl bych vědět, jak používat jednotlivé nástroje?
Přehled, který zobrazuje 17 různých nástrojů, může být docela ohromující. Každý z nich může být velmi cenný, ale rozhodně není potřeba pro každou aplikaci. Některé z nich, jako například nástroj Herní výkon, jsou cenné pouze v případě, že vyvíjíte hry.
Stojí však za to ponořit se do dostupných nástrojů a vědět, které jsou k dispozici. Může se stát, že narazíte na problém, který lze dokonale vyřešit některým z dostupných nástrojů.
Můžu používat nástroje v simulátoru?
Ačkoli většinu nástrojů lze spustit v simulátoru, ne vždy se to doporučuje. Fyzické zařízení ukáže realističtější výsledky, a proto se doporučuje jeho použití.
Použití časového profilu nástrojů Xcode ke zkoumání a zlepšení výkonu
Přístroj Time Profiler poskytuje přehled o procesorech systému a o tom, jak efektivně je využíváno více jader a vláken. Čím lepší je tato část v aplikaci, tím lepší je výkon aplikace.
V příkladu výkonu aplikace Collect jsme měli za cíl zrychlit tok přidávání obsahu do naší aplikace. Nástroj Time Profiler je naším výchozím bodem pro získání informací o tom, kterou část kódu lze optimalizovat.
Vytvoření nového záznamu pomocí nástroje Time Profiler
Po výběru nástroje Time Profiler můžeme spustit nový záznam stisknutím červeného tlačítka vlevo nahoře nebo pomocí ⌘ + R
. Tím se spustí aplikace ve vybraném zařízení, po jejímž spuštění můžete spustit svůj tok.
Po dokončení toku, který chcete vylepšit, můžete zastavit nahrávání a ponořit se do výsledků. Nejprve chceme vědět, jak se používá hlavní vlákno. Uživatelské rozhraní se zablokuje, když na hlavním vlákně probíhá mnoho práce, což je přesně problém, se kterým se potýkáme v naší aplikaci Collect.
Použití filtrů pro vytvoření přehledu vláken
Pásu filtrů lze použít k zúžení přehledu a získání lepšího přehledu o používaných vláknech výběrem karty Vlákna. Posouvání dolů ukazuje, že naše hlavní vlákno je hodně využíváno, zatímco ostatní vlákna nejsou tak vytížená:
Určení, kterou část kódu lze optimalizovat
Použitím ⌘ + D
se otevře oblast Detail, pokud ještě není vidět. Zde se zobrazí názvy symbolů pro zvýrazněné období. V předchozím příkladu můžete vidět, že špičky v grafu jsou zvýrazněny modře. Totéž můžete udělat pomocí kliknutí a přetažení na část, kterou chcete prozkoumat.
Při pohledu na názvy symbolů v oblasti detailů to zpočátku vypadá dost nepoužitelně:
Přestože nám pravá strana oblasti detailů ukazuje nejtěžší stopu zásobníku, můžeme použít vstupní filtr Strom volání, abychom získali ještě lepší přehled. Tím také zlepšíme zobrazení Nejtěžší stopy zásobníku tím, že skryjeme některé symboly.
Začneme volbou Skrýt systémové knihovny, která nás zbaví všech symbolů nižší úrovně, které nemáme pod kontrolou a které ani tak nemůžeme optimalizovat. Jak vidíte, přehled Nejtěžší stopa zásobníku je nyní již mnohem čistší.
Další na řadě je filtr Invertovat strom volání, který zviditelní metody nejvyšší úrovně, aniž bychom museli proklikávat každý strom volání. V kombinaci s tříděním podle sloupce Weight (váha) přesně vidíme, které metody by se měly optimalizovat.
Je celkem jasné, že náš kód PHImageManager
si vede nejhůře, protože z celkových 11,16 sekundy mu to trvá 3,36 sekundy. Ukázalo se, že to můžeme poměrně snadno přesunout do vlákna na pozadí a odlehčit hlavnímu vláknu pro tuto část.
Další věc, které jsme si všimli, je BucketHeaderView
, který neustále přepočítává svou výšku, ačkoli jsme s ním v testovaném toku nic nedělali. Ukázalo se, že jsme to skutečně nemuseli dělat.
Ověření výsledků
Po vylepšení kódu je čas znovu spustit nástroj Time Profiler a ověřit výsledky, abychom se ujistili, že byl skutečně vylepšen.
Přestože jsme zlepšení sami viděli již v dříve sdíleném videu před a po, můžeme nyní také vidět, že stejný tok již neobsahuje PHImageManager
jako nejtěžší stopu zásobníku. To potvrzuje, že naše změna kódu zafungovala.
Hlavička se již také nepřepočítává a výkon našeho toku se zlepšil.
Závěr
Nástroje Xcode obsahují mnoho cenných nástrojů pro zlepšení výkonu vaší aplikace. Pomocí nástroje Time Profiler se můžete ponořit do určitého toku, vylepšit kus kódu a hned poté jej ověřit.
Ponořte se do dostupných nástrojů, abyste věděli, které jsou kdy užitečné, a začněte svou aplikaci vylepšovat. Pokud vás zlepšování zajímá ještě víc, možná si budete chtít přečíst i můj příspěvek na blogu o zlepšování výkonu sestavení!
.