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:
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.
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:
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:
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.
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.
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.
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.
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!