Articles

Utilizarea Xcode Instruments pentru îmbunătățirea performanței aplicațiilor

Xcode Instruments este un instrument pentru dezvoltatori care vine gratuit cu Xcode. Acesta are o mulțime de instrumente utile pentru a inspecta și îmbunătăți aplicația dvs. Deși are multe de oferit, este adesea un domeniu care este puțin mai puțin cunoscut.

În acest articol de blog, vă voi arăta cum am îmbunătățit performanța într-o parte crucială a aplicației Collect by WeTransfer prin utilizarea Xcode Instruments. Pentru a vă face o idee despre rezultate, acesta este rezultatul înainte și după, în care partea de după „Importul fotografiilor” a fost îmbunătățită drastic:

ViRE – Visual Regular Expressions (Mac & iPad)ViRE este un instrument Visual Regular Expressions: Regex lizibil – Code Complete / Cheat Sheet – Teste unitare – Sistem de înlocuire puternic – Căutare pas cu pas & Replace – Schema vizuală Regex – Istoric Regex / Playground. ViRE este disponibil pe Mac & iPad.

Așa cum puteți vedea, fereastra pop-up de import se afișează mult mai mult timp în versiunea veche, în timp ce foaia de partajare finală este, de asemenea, mult întârziată.

Cu cât este mai bună această parte din aplicația dvs., cu atât aplicația dvs. este mai performantă.

Este timpul să vă scufundați și să vedeți cum am îmbunătățit acest flux!

Ce este Xcode Instruments?

Xcode Instruments este cel mai bine descris ca un instrument puternic și flexibil de analiză și testare a performanței. Face parte din setul de instrumente Xcode, care include, de asemenea, instrumente precum Create ML și Inspectorul de accesibilitate.

Instrumentele pot fi folosite pentru:

  • Descoperiți problemele din codul sursă
  • Analizați performanța aplicației dumneavoastră
  • Descoperiți problemele de memorie

Și multe altele!

Cum pot accesa instrumentele Xcode?

Puteți accesa instrumentele folosind Product ➔ Profile din meniul Xcode pentru care mânerul de comandă rapidă este ⌘ + I. Acest lucru va reconstrui produsul dvs. și va deschide prezentarea generală a Xcode Instruments.

Xcode Instruments Overview
Xcode Instruments Overview

Ar trebui să știu cum să folosesc fiecare instrument?

O prezentare generală care arată 17 instrumente diferite poate fi destul de copleșitoare. Fiecare dintre ele poate fi foarte valoros, dar cu siguranță nu sunt necesare pentru fiecare aplicație. Unele dintre ele, cum ar fi instrumentul Game Performance, sunt valoroase doar dacă dezvoltați jocuri.

Merită totuși să vă scufundați în instrumentele disponibile și să știți care dintre ele sunt disponibile. S-ar putea să vă confruntați cu o problemă care poate fi perfect rezolvată de unul dintre instrumentele disponibile.

Pot utiliza instrumentele în simulator?

Deși majoritatea instrumentelor pot fi rulate în simulator, nu este întotdeauna recomandat să faceți acest lucru. Un dispozitiv fizic va arăta rezultate mai realiste și, prin urmare, se recomandă să fie utilizat.

Utilizarea instrumentului Xcode Instruments Time Profile pentru a investiga și a îmbunătăți performanța

Instrumentul Time Profiler oferă informații despre procesoarele sistemului și despre cât de eficient sunt utilizate mai multe nuclee și fire de execuție. Cu cât această parte din aplicația dvs. este mai bună, cu atât aplicația dvs. este mai performantă.

În exemplul de performanță a aplicației Collect, am avut obiectivul de a accelera fluxul de adăugare a conținutului în aplicația noastră. Time Profiler este punctul nostru de plecare pentru a obține informații despre ce parte a codului poate fi optimizată.

Crearea unei noi înregistrări folosind instrumentul Time Profiler

După selectarea instrumentului Time Profiler putem începe o nouă înregistrare apăsând butonul roșu din stânga sus sau folosind ⌘ + R. Acest lucru va lansa aplicația în dispozitivul selectat, după care puteți începe fluxul dumneavoastră.

După ce ați terminat fluxul pe care doriți să îl îmbunătățiți, puteți opri înregistrarea și vă puteți scufunda în rezultate. În primul rând vrem să știm cum este utilizat firul principal. Interfața cu utilizatorul este blocată atunci când se lucrează mult pe firul principal, care este exact problema cu care ne confruntăm în aplicația noastră Collect.

Utilizarea filtrelor pentru a crea o imagine de ansamblu a firelor

Bara de filtre poate fi utilizată pentru a restrânge imaginea de ansamblu și pentru a obține o perspectivă mai bună asupra firelor utilizate, selectând fila Threads. Derularea în jos arată că firul nostru principal este foarte utilizat, în timp ce celelalte fire nu sunt atât de ocupate:

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

Identificarea părții din cod care poate fi optimizată

Utilizarea lui ⌘ + D va deschide zona Detail dacă aceasta nu este încă vizibilă. Aceasta arată numele simbolurilor pentru perioada evidențiată. În exemplul anterior, puteți vedea că vârfurile din grafic sunt evidențiate în albastru. Puteți face același lucru folosind click și glisați pe partea pe care doriți să o investigați.

La început, pare destul de inutilizabil dacă ne uităm la numele simbolurilor din zona de detaliu:

Unclear symbol names in the detail area
Numele simbolurilor neclare din zona de detaliu

Deși partea dreaptă a zonei de detaliu ne arată Heaviest Stack Trace, putem folosi filtrul de intrare Call Tree pentru a obține o imagine de ansamblu și mai bună. Acest lucru va îmbunătăți, de asemenea, vizualizarea heaviest stack trace prin ascunderea anumitor simboluri.

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

Începem cu Hide system libraries care va elimina toate simbolurile de nivel inferior care nu se află sub controlul nostru și care nu pot fi optimizate de noi în nici un fel. După cum puteți vedea, prezentarea generală a Heaviest Stack Trace este deja mult mai curată acum.

În continuare, filtrul Invert Call Tree va face vizibile metodele de nivel superior fără a fi nevoie să dăm clic prin fiecare arbore de apeluri. În combinație cu sortarea pe coloana Weight, putem vedea exact ce metode ar trebui să fie optimizate.

Time Profile input filters to narrow down the results
Filtrele de intrare Time Profile pentru a restrânge rezultatele

Este destul de clar că codul nostru PHImageManager are cea mai proastă performanță, deoarece durează 3,36 secunde din totalul de 11,16 secunde. S-a dovedit că am putea muta acest lucru pe un fir de fundal destul de ușor și să descărcăm firul principal pentru această parte.

Un alt lucru pe care l-am observat este BucketHeaderView care își recalculează înălțimea tot timpul, deși nu am făcut nimic cu el în fluxul pe care îl testăm. S-a dovedit că, într-adevăr, nu a trebuit să facem acest lucru.

Validarea rezultatelor

După ce v-ați îmbunătățit codul, este timpul să rulați din nou Time Profiler și să validați rezultatele pentru a vă asigura că acesta a fost într-adevăr îmbunătățit.

Validating results in the time profiler
Validarea rezultatelor în Time Profiler

Deși am văzut noi înșine îmbunătățirile deja în videoclipul înainte și după împărtășit mai devreme, putem vedea acum și că același flux nu mai conține PHImageManager ca cea mai grea urmă de stivă. Acest lucru confirmă faptul că modificarea codului nostru a funcționat.

De asemenea, antetul nu mai este recalculat și performanța fluxului nostru a fost îmbunătățită.

ViRE – Visual Regular Expressions (Mac & iPad)ViRE este un instrument Visual Regular Expressions: Regex lizibil – Code Complete / Cheat Sheet – Teste unitare – Sistem de înlocuire puternic – Căutare pas cu pas & Replace – Schema vizuală Regex – Istoric Regex / Playground. ViRE este disponibil pe Mac & iPad.

Concluzie

Instrumentele Xcode conțin o mulțime de instrumente valoroase pentru a îmbunătăți performanța aplicației dumneavoastră. Time Profiler poate fi folosit pentru a vă scufunda într-un anumit flux, pentru a îmbunătăți o bucată de cod și pentru a valida imediat după.

Astăzi acordați-vă timp pentru a vă scufunda în instrumentele disponibile, astfel încât să știți care sunt utile când și să începeți să vă îmbunătățiți aplicația. Dacă vă place să vă îmbunătățiți, chiar mai mult, poate doriți să citiți și articolul meu de pe blog despre îmbunătățirea performanței de compilare!

.