Articles

Utilizzo di Xcode Instruments per migliorare le prestazioni delle app

Xcode Instruments è uno strumento per sviluppatori che viene fornito gratuitamente con Xcode. Ha un sacco di strumenti utili per ispezionare e migliorare la tua app. Anche se ha molto da offrire, è spesso un’area che è un po’ meno conosciuta.

In questo post sul blog, vi mostrerò come ho migliorato le prestazioni in una parte cruciale dell’app Collect by WeTransfer utilizzando Xcode Instruments. Per darvi un’idea dei risultati, questo è il risultato prima e dopo in cui la parte dopo “Importazione delle foto” è stata drasticamente migliorata:

ViRE – Visual Regular Expressions (Mac & iPad)ViRE è uno strumento di Visual Regular Expressions: Regex leggibile – Codice completo / Cheat Sheet – Unit Tests – Potente sistema di sostituzione – Ricerca passo dopo passo & Replace – Regex Visual Scheme – Regex History / Playground. ViRE è disponibile su Mac & iPad.

Come puoi vedere, il popup di importazione mostra molto più a lungo nella vecchia versione mentre il foglio di condivisione finale è molto ritardato.

Meglio questa parte della tua app è, meglio la tua app funziona.

È ora di tuffarsi e vedere come abbiamo migliorato questo flusso!

Che cos’è Xcode Instruments?

Xcode Instruments è meglio descritto come un potente e flessibile strumento di analisi e test delle prestazioni. Fa parte del set di strumenti Xcode che include anche strumenti come Create ML e l’Ispettore Accessibilità.

Gli strumenti possono essere usati per:

  • Rintracciare problemi nel tuo codice sorgente
  • Analizzare le prestazioni della tua app
  • Trovare problemi di memoria

E molto altro ancora!

Come posso accedere agli strumenti di Xcode?

Puoi accedere agli strumenti usando Product ➔ Profile dal menu di Xcode, la cui maniglia di collegamento è ⌘ + I. Questo ricostruirà il tuo prodotto e aprirà la panoramica di Xcode Instruments.

Xcode Instruments Overview
Panoramica di Xcode Instruments

Devo sapere come usare ogni strumento?

Una panoramica che mostra 17 strumenti diversi può essere abbastanza travolgente. Ognuno di essi può essere molto prezioso, ma non sono sicuramente necessari per ogni app. Alcuni di essi, come lo strumento Game Performance, è prezioso solo se stai sviluppando giochi.

Vale la pena però di immergersi negli strumenti disponibili e sapere quali sono. Potresti ritrovarti in un problema che può essere perfettamente risolto da uno degli strumenti disponibili.

Posso usare gli strumenti nel simulatore?

Anche se la maggior parte degli strumenti possono essere eseguiti sul simulatore, non è sempre consigliato farlo. Un dispositivo fisico mostrerà risultati più realistici e si raccomanda quindi di usarlo.

Utilizzare il profilo temporale degli strumenti di Xcode per indagare e migliorare le prestazioni

Lo strumento Time Profiler dà un’idea delle CPU del sistema e di come vengono utilizzati efficacemente più core e thread. Migliore è questa parte della tua app, migliori sono le prestazioni della tua app.

Nell’esempio delle prestazioni di Collect app, avevamo l’obiettivo di accelerare il flusso di aggiunta di contenuti alla nostra app. Il Time Profiler è il nostro punto di partenza per capire quale parte del codice può essere ottimizzata.

Creare una nuova registrazione utilizzando lo strumento Time Profiler

Dopo aver selezionato lo strumento Time Profiler possiamo avviare una nuova registrazione premendo il pulsante rosso in alto a sinistra o utilizzando ⌘ + R. Questo lancerà l’applicazione nel dispositivo selezionato, dopo di che potrete iniziare il vostro flusso.

Dopo aver finito il flusso che volete migliorare potete fermare la registrazione e tuffarvi nei risultati. Per prima cosa vogliamo sapere come viene utilizzato il thread principale. L’UI si blocca quando c’è molto lavoro in corso sul thread principale, che è esattamente il problema che stiamo riscontrando nella nostra app Collect.

Utilizzare i filtri per creare una panoramica dei thread

La barra dei filtri può essere utilizzata per restringere la panoramica e ottenere una migliore visione dei thread utilizzati selezionando la scheda Threads. Scorrere verso il basso mostra che il nostro thread principale è molto usato mentre gli altri thread non sono così impegnati:

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

Identificare quale parte del codice può essere ottimizzata

Utilizzando ⌘ + D si aprirà l’area Dettagli se non è ancora visibile. Questa mostra i nomi dei simboli per il periodo evidenziato. Nell’esempio precedente, puoi vedere che i picchi nel grafico sono evidenziati in blu. Puoi fare lo stesso usando click e trascinamento sulla parte che vuoi investigare.

All’inizio, sembra abbastanza inutilizzabile guardando i nomi dei simboli nell’area di dettaglio:

Unclear symbol names in the detail area
Nomi dei simboli non chiari nell’area di dettaglio

Anche se il lato destro dell’area di dettaglio ci mostra la Heaviest Stack Trace, possiamo usare il filtro di input Call Tree per avere una panoramica ancora migliore. Questo migliorerà anche la vista dello stack trace più pesante nascondendo certi simboli.

Hide system libraries in the detail area
Nascondi le librerie di sistema nell’area di dettaglio

Iniziamo con Nascondi le librerie di sistema che toglierà tutti i simboli di livello inferiore che non sono sotto il nostro controllo e non possono essere ottimizzati da noi in nessun modo. Come potete vedere, la panoramica di Heaviest Stack Trace è già molto più pulita ora.

Successivamente il filtro Invert Call Tree renderà visibili i metodi di primo livello senza dover cliccare attraverso ogni albero delle chiamate. In combinazione con l’ordinamento sulla colonna Weight, possiamo vedere esattamente quali metodi dovrebbero essere ottimizzati.

Time Profile input filters to narrow down the results
Filtri di input del profilo temporale per restringere i risultati

E’ abbastanza chiaro che il nostro codice PHImageManager sta performando peggio, dato che impiega 3,36 secondi sugli 11,16 totali. Si è scoperto che possiamo spostare questo in un thread in background abbastanza facilmente e scaricare il thread principale per questa parte.

Un’altra cosa che abbiamo notato è il BucketHeaderView che sta ricalcolando la sua altezza tutto il tempo anche se non abbiamo fatto nulla con esso nel flusso che stiamo testando. Si è scoperto che in effetti non era necessario farlo.

Convalida dei risultati

Dopo aver migliorato il codice è il momento di eseguire nuovamente il Time Profiler e convalidare i risultati per assicurarsi che sia stato effettivamente migliorato.

Validating results in the time profiler
Validazione dei risultati nel Time Profiler

Anche se abbiamo già visto i miglioramenti nel video prima e dopo condiviso in precedenza, ora possiamo anche vedere che lo stesso flusso non contiene più il PHImageManager come stack trace più pesante. Questo conferma che la nostra modifica al codice ha funzionato.

Anche l’intestazione non viene più ricalcolata e le prestazioni del nostro flusso sono state migliorate.

ViRE – Visual Regular Expressions (Mac & iPad)ViRE è uno strumento di Visual Regular Expressions: Regex leggibile – Codice completo / Cheat Sheet – Unit Tests – Potente sistema di sostituzione – Ricerca passo dopo passo & Replace – Regex Visual Scheme – Regex History / Playground. ViRE è disponibile su Mac & iPad.

Conclusione

Xcode Instruments contiene molti strumenti preziosi per migliorare le prestazioni della tua app. Il Time Profiler può essere usato per immergersi in un certo flusso, migliorare un pezzo di codice e convalidare subito dopo.

Prendi un po’ di tempo per immergerti negli strumenti disponibili in modo da sapere quali sono utili quando e iniziare a migliorare la tua app. Se ti piace migliorare, ancora di più, potresti voler leggere anche il mio post sul blog sul miglioramento delle prestazioni di compilazione!