Articles

Uso de Xcode Instruments para mejorar el rendimiento de la aplicación

Xcode Instruments es una herramienta para desarrolladores que viene gratis con Xcode. Tiene un montón de herramientas útiles para inspeccionar y mejorar tu app. Aunque tiene mucho que ofrecer, suele ser un área un poco menos conocida.

En esta entrada del blog, te mostraré cómo he mejorado el rendimiento en una parte crucial de la aplicación Collect by WeTransfer utilizando Xcode Instruments. Para que os hagáis una idea de los resultados, este es el resultado del antes y el después en el que se ha mejorado drásticamente la parte posterior a «Importar fotos»:

ViRE – Visual Regular Expressions (Mac & iPad)ViRE es una herramienta de Expresiones Regulares Visuales: Regex legible – Código completo / Cheat Sheet – Pruebas unitarias – Potente sistema de reemplazo – Búsqueda paso a paso & Reemplazar – Regex Visual Scheme – Regex History / Playground. ViRE está disponible en Mac & iPad.

Como puedes ver, la ventana emergente de importación se muestra mucho más tiempo en la versión antigua, mientras que la hoja de participación final se está retrasando mucho también.

Cuanto mejor sea esta parte en tu aplicación, mejor será su rendimiento.

¡Es hora de sumergirse y ver cómo mejoramos este flujo!

¿Qué es Xcode Instruments?

Xcode Instruments se describe mejor como una potente y flexible herramienta de análisis de rendimiento y pruebas. Es parte del conjunto de herramientas de Xcode que también incluye herramientas como Create ML y el Inspector de Accesibilidad.

Los instrumentos se pueden utilizar para:

  • Rastrear problemas en su código fuente
  • Analizar el rendimiento de su aplicación
  • Encontrar problemas de memoria

¡Y mucho más!

¿Cómo puedo acceder a los instrumentos de Xcode?

Puedes acceder a los instrumentos utilizando Product ➔ Profile del menú de Xcode para el que el asa de acceso directo es ⌘ + I. Esto reconstruirá su producto y abrirá la vista general de los instrumentos de Xcode.

Xcode Instruments Overview
Vista general de los instrumentos de Xcode

¿Debo saber cómo usar cada instrumento?

Una vista general que muestra 17 instrumentos diferentes puede ser bastante abrumadora. Cada uno de ellos puede ser muy valioso, pero definitivamente no son necesarios para todas las aplicaciones. Algunos de ellos, como el instrumento Game Performance, sólo es valioso si estás desarrollando juegos.

Sin embargo, vale la pena sumergirse en los instrumentos disponibles y saber cuáles son. Es posible que te encuentres con un problema que se puede resolver perfectamente con uno de los instrumentos disponibles.

¿Puedo utilizar los instrumentos en el simulador?

Aunque la mayoría de los instrumentos se pueden ejecutar en el simulador, no siempre es recomendable hacerlo. Un dispositivo físico mostrará resultados más realistas y, por lo tanto, se recomienda su uso.

Usar el perfil de tiempo de los instrumentos de Xcode para investigar y mejorar el rendimiento

El instrumento Time Profiler ofrece información sobre las CPU del sistema y la eficacia con la que se utilizan los múltiples núcleos e hilos. Cuanto mejor sea esta parte en su aplicación, mejor será el rendimiento de su aplicación.

En el ejemplo de rendimiento de la aplicación Collect, teníamos el objetivo de acelerar el flujo de añadir contenido a nuestra aplicación. El Time Profiler es nuestro punto de partida para obtener información sobre qué parte del código se puede optimizar.

Crear una nueva grabación utilizando el instrumento Time Profiler

Después de seleccionar el instrumento Time Profiler podemos iniciar una nueva grabación pulsando el botón rojo de la parte superior izquierda o utilizando ⌘ + R. Esto lanzará su aplicación en el dispositivo seleccionado después de lo cual usted puede comenzar su flujo.

Después de haber terminado el flujo que desea mejorar puede detener la grabación y sumergirse en los resultados. Primero queremos saber cómo se utiliza el hilo principal. La interfaz de usuario se bloquea cuando hay mucho trabajo en el hilo principal, que es exactamente el problema que estamos experimentando en nuestra aplicación Collect.

Uso de filtros para crear una visión general de los hilos

La barra de filtros se puede utilizar para reducir la visión general y obtener una mejor visión de los hilos utilizados seleccionando la pestaña Hilos. Al desplazarse hacia abajo se observa que nuestro hilo principal se utiliza mucho mientras que los otros hilos no están tan ocupados:

Time Profiler main thread usage insights in Xcode Instruments
Uso del hilo principal de Time Profiler

Identificar qué parte del código se puede optimizar

Usando ⌘ + D se abrirá el área de Detalles si aún no está visible. Esto muestra los nombres de los símbolos para el período resaltado. En el ejemplo anterior, puede ver que los picos del gráfico están resaltados en azul. Puede hacer lo mismo haciendo clic y arrastrando sobre la parte que desee investigar.

Al principio, parece bastante inutilizable mirar los nombres de los símbolos en el área de detalle:

Unclear symbol names in the detail area
Despejar los nombres de los símbolos en el área de detalle

Aunque la parte derecha del área de detalle nos muestra el Trazado de la pila más pesada, podemos utilizar el filtro de entrada Árbol de llamadas para obtener una visión general aún mejor. Esto también mejorará la vista del Stack Trace más pesado ocultando ciertos símbolos.

Hide system libraries in the detail area
Ocultar librerías de sistema en el área de detalle

Empezamos con Ocultar librerías de sistema que quitará todos los símbolos de nivel inferior que no están bajo nuestro control y no pueden ser optimizados por nosotros de ninguna manera. Como puede ver, la vista general del Trazado de Pila Más Pesado ya está mucho más limpia.

Lo siguiente es el filtro Invertir Árbol de Llamadas que hará visibles los métodos de nivel superior sin tener que hacer clic a través de cada árbol de llamadas. En combinación con la clasificación en la columna de peso, podemos ver exactamente qué métodos deben ser optimizados.

Time Profile input filters to narrow down the results
Filtros de entrada de perfil de tiempo para reducir los resultados

Está bastante claro que nuestro código PHImageManager es el que peor funciona, ya que tarda 3,36 segundos del total de 11,16 segundos. Resulta que podemos mover esto a un hilo de fondo con bastante facilidad y descargar el hilo principal para esta parte.

Otra cosa que notamos es el BucketHeaderView que está recalculando su altura todo el tiempo aunque no hicimos nada con él en el flujo que estamos probando. Resulta que efectivamente no teníamos que hacer esto.

Validar los resultados

Después de haber mejorado tu código es el momento de volver a ejecutar el Time Profiler y validar los resultados para asegurarnos de que realmente se ha mejorado.

Validating results in the time profiler
Validando los resultados en el time profiler

Aunque ya hemos visto las mejoras por nosotros mismos en el vídeo del antes y el después compartido anteriormente, ahora también podemos ver que el mismo flujo ya no contiene el PHImageManager como el stack trace más pesado. Esto está confirmando que nuestro cambio de código ha funcionado.

La cabecera ya no se recalcula tampoco y el rendimiento de nuestro flujo ha mejorado.

ViRE – Visual Regular Expressions (Mac & iPad)ViRE es una herramienta de Expresiones Regulares Visuales: Regex legible – Código completo / Cheat Sheet – Pruebas unitarias – Potente sistema de reemplazo – Búsqueda paso a paso & Reemplazar – Regex Visual Scheme – Regex History / Playground. ViRE está disponible en Mac & iPad.

Conclusión

Los instrumentos de Xcode contienen un montón de herramientas valiosas para mejorar el rendimiento de su aplicación. El Time Profiler se puede utilizar para bucear en un determinado flujo, mejorar un trozo de código y validar justo después.

Tómate un tiempo para bucear en los instrumentos disponibles para saber cuáles son útiles cuando y empezar a mejorar tu app. Si usted está en la mejora, aún más, es posible que desee leer mi post del blog en la mejora de su rendimiento de construcción también!