Articles

Az Xcode Instruments használata az alkalmazások teljesítményének javítására

Az Xcode Instruments egy fejlesztői eszköz, amely ingyenesen jár az Xcode-hoz. Rengeteg hasznos eszközzel rendelkezik az alkalmazás vizsgálatához és javításához. Bár sok mindent kínál, gyakran ez egy olyan terület, amely kicsit kevésbé ismert.

Ebben a blogbejegyzésben megmutatom, hogyan javítottam a Collect by WeTransfer alkalmazás egy kulcsfontosságú részének teljesítményét az Xcode Instruments használatával. Hogy képet kapjon az eredményekről, ez az előtte-utána eredmény, amelyben a “Fotók importálása” utáni rész drasztikusan javult:

ViRE – Visual Regular Expressions (Mac & iPad)A ViRE egy Visual Regular Expressions eszköz: Olvasható Regex – Code Complete / Cheat Sheet – Unit Tests – Powerful Replace System – Step-by-Step Search & Replace – Regex Visual Scheme – Regex History / Playground. A ViRE elérhető Mac & iPad-en.

Amint láthatod, az importáló felugró ablak sokkal hosszabb időt mutat a régi verzióban, míg a végleges megosztási lap is sokat késik.

Minél jobb ez a rész az alkalmazásodban, annál jobban teljesít az alkalmazásod.

Ideje belemerülni, és megnézni, hogyan javítottuk ezt a folyamatot!

Mi az Xcode Instruments?

Az Xcode Instruments-t leginkább egy hatékony és rugalmas teljesítményelemző és tesztelő eszközként lehet leírni. Az Xcode eszközkészlet része, amely olyan eszközöket is tartalmaz, mint a Create ML és a Accessibility Inspector.

A Instruments használható:

  • A forráskódban lévő problémák felkutatására
  • Az alkalmazás teljesítményének elemzésére
  • Memóriaproblémák felderítésére

És még sok másra!

Hogyan érhetem el az Xcode Instruments-t?

Az eszközöket az Xcode menü Product ➔ Profile parancsával érheti el, amelynek gyorsbillentyűkezelője a ⌘ + I. Ez újraépíti a terméket, és megnyitja az Xcode Instruments áttekintését.

Xcode Instruments Overview
Xcode Instruments Overview

Tudnom kell, hogyan kell használni az egyes eszközöket?

Egy áttekintés, amely 17 különböző eszközt mutat, eléggé nyomasztó lehet. Mindegyik nagyon értékes lehet, de biztosan nem minden alkalmazáshoz van rájuk szükség. Néhány közülük, mint például a Game Performance eszköz, csak akkor értékes, ha játékokat fejlesztünk.

Érdemes azonban elmerülni a rendelkezésre álló eszközökben, és tudni, hogy melyek azok. Előfordulhat, hogy olyan problémába ütközik, amelyet tökéletesen meg lehet oldani a rendelkezésre álló eszközök valamelyikével.

Használhatok eszközöket a szimulátorban?

Noha a legtöbb eszköz futtatható a szimulátorban, nem mindig ajánlott ezt megtenni. Egy fizikai eszköz reálisabb eredményeket fog mutatni, ezért ajánlott a használata.

Az Xcode Instruments időprofiljának használata a teljesítmény vizsgálatához és javításához

A Time Profiler eszköz betekintést nyújt a rendszer CPU-jaiba, valamint a több mag és a szálak hatékony használatába. Minél jobb ez a rész az alkalmazásban, annál jobb az alkalmazás teljesítménye.

A Collect alkalmazás teljesítményére vonatkozó példában az volt a célunk, hogy felgyorsítsuk a tartalom hozzáadásának folyamatát az alkalmazásunkhoz. A Time Profiler a kiindulópontunk, hogy betekintést nyerjünk abba, hogy a kód mely része optimalizálható.

Új felvétel létrehozása a Time Profiler eszközzel

A Time Profiler eszköz kiválasztása után a bal felső sarokban lévő piros gomb megnyomásával vagy a ⌘ + R segítségével új felvételt indíthatunk. Ez elindítja az alkalmazást a kiválasztott eszközön, ami után elindíthatjuk az áramlást.

Azt követően, hogy befejeztük a javítani kívánt áramlást, leállíthatjuk a felvételt, és elmerülhetünk az eredményekben. Először is szeretnénk megtudni, hogyan használják a főszálat. A felhasználói felület blokkolódik, ha sok munka folyik a főszálon, ami pontosan az a probléma, amit a Collect alkalmazásunkban tapasztalunk.

Szűrők használata a szálak áttekintésének létrehozásához

A szűrősáv segítségével szűkíthetjük az áttekintést, és a Szálak lap kiválasztásával jobb betekintést nyerhetünk a használt szálakba. Lefelé görgetve látható, hogy a főszálunkat erősen használják, míg a többi szál kevésbé van elfoglalva:

Time Profiler main thread usage insights in Xcode Instruments
Time Profiler main thread usage

Azonosítása, hogy a kód mely része optimalizálható

A ⌘ + D használatával megnyílik a Detail terület, ha az még nem látható. Ez mutatja a kiemelt időszak szimbólumneveit. Az előző példában látható, hogy a grafikonban a csúcsok kékkel vannak kiemelve. Ugyanezt megtehetjük a kattintással és húzással a vizsgálni kívánt részen.

Előre elég használhatatlannak tűnik, ha a szimbólumneveket nézzük a részletek területén:

Unclear symbol names in the detail area
Tisztázatlan szimbólumnevek a részletek területén

Bár a részletek területének jobb oldalán a legsúlyosabb Stack Trace-t láthatjuk, a Call Tree bemeneti szűrővel még jobb áttekintést kaphatunk. Ez is javítja a heaviest stack trace nézetet azáltal, hogy bizonyos szimbólumokat elrejt.

Hide system libraries in the detail area
Hide system libraries in the detail area

A rendszer könyvtárak elrejtésével kezdjük, ami eltávolítja az összes olyan alacsonyabb szintű szimbólumot, amelyek nem a mi ellenőrzésünk alatt állnak, és amelyeket így sem tudunk optimalizálni. Amint láthatjuk, a Heaviest Stack Trace áttekintés máris sokkal tisztább lett.

A következő lépés az Invert Call Tree szűrő, amely láthatóvá teszi a legfelső szintű metódusokat anélkül, hogy végig kellene kattintanunk az egyes hívásfákon. A Weight oszlopra történő rendezéssel kombinálva pontosan láthatjuk, hogy mely metódusokat kell optimalizálni.

Time Profile input filters to narrow down the results
Az időprofil bemeneti szűrőkkel szűkíthetjük az eredményeket

Elég egyértelmű, hogy a PHImageManager kódunk teljesít a legrosszabbul, mivel az összes 11,16 másodpercből 3,36 másodpercet vesz igénybe. Kiderült, hogy ezt elég könnyen áthelyezhetjük egy háttérszálba, és a főszálat tehermentesíthetjük erre a részre.

A másik dolog, amit észrevettünk, az a BucketHeaderView, amely folyamatosan újraszámolja a magasságát, bár a tesztelt folyamban nem csináltunk vele semmit. Kiderült, hogy ezt valóban nem kellett megtennünk.

Az eredmények validálása

A kód javítását követően ideje újra lefuttatni a Time Profiler-t és validálni az eredményeket, hogy megbizonyosodjunk arról, hogy valóban javítottunk.

Validating results in the time profiler
Eredmények hitelesítése a Time Profilerben

Bár a korábban megosztott előtte-utána videóban már magunk is láttuk a javulást, most azt is láthatjuk, hogy ugyanez a folyam már nem tartalmazza a PHImageManager mint a legnehezebb stack trace. Ez megerősíti, hogy a kódváltoztatásunk bevált.

A fejlécet sem számolja többé újra, és a folyamunk teljesítménye is javult.

ViRE – Visual Regular Expressions (Mac & iPad)A ViRE egy Visual Regular Expressions eszköz: Olvasható Regex – Code Complete / Cheat Sheet – Unit Tests – Powerful Replace System – Step-by-Step Search & Replace – Regex Visual Scheme – Regex History / Playground. A ViRE elérhető Mac & iPad-en.

Következtetés

Az Xcode eszközök sok értékes eszközt tartalmaznak az alkalmazás teljesítményének javításához. A Time Profiler segítségével elmerülhetünk egy bizonyos folyamatba, javíthatunk egy kódrészletet, és rögtön utána érvényesíthetjük.

Foglaljon egy kis időt a rendelkezésre álló eszközökben való elmerülésre, hogy tudja, melyik mikor hasznos, és kezdje el javítani az alkalmazását. Ha szeretnél javítani, még inkább, akkor érdemes elolvasnod a build teljesítményének javításáról szóló blogbejegyzésemet is!