Unidad 8 / 11

Optimización de rendimiento y batería: aplicaciones rápidas y eficientes con inteligencia artificial

Ganancias:

  • Tomando primero un perfil y midiendo el cuello de botella real, realizando una optimización basada en datos en lugar de conjeturas y haciendo que la inteligencia artificial interprete el resultado del perfil.
  • Capacidad para centrarse en la operación más costosa en términos de tiempo de inicio, fluidez, memoria y batería y eliminar el trabajo pesado del hilo principal.
  • Capacidad para gestionar el costo de la batería y el procesador de las capacidades de IA, como el modelo en el dispositivo y las llamadas en la nube, mediante muestreo y procesamiento por lotes.

Los usuarios de dispositivos móviles están impacientes. Si la aplicación se abre lentamente, se bloquea mientras se desplaza o agota la batería rápidamente, el usuario la elimina y le otorga una calificación de estrellas en la tienda. El rendimiento y la eficiencia de la batería son una cuestión de supervivencia de una aplicación móvil; Afecta directamente tanto a la satisfacción del usuario como al ranking de las tiendas. La IA es una poderosa ayuda para detectar cuellos de botella en el rendimiento (cuellos de botella), interpretar los resultados de las mediciones y recomendar optimizaciones. Pero la regla de oro sigue vigente: medir primero, optimizar después. En esta unidad, aprenderemos a resolver problemas de rendimiento y batería basándose en datos con IA. Una cuestión particularmente importante es gestionar el impacto en la batería y el rendimiento de las capacidades de IA que agregamos en unidades anteriores (modelo en el dispositivo, llamadas en la nube).

Optimizar sin medir

El mayor error de un desarrollador inexperto es la optimización predictiva: perder el tiempo diciendo "este debe ser lento". El verdadero cuello de botella casi siempre se encuentra en un lugar inesperado. Entonces, primero se toma el perfil (perfilado: medir qué parte de la aplicación consume cuánto tiempo/memoria/batería). Android Studio Profiler y Xcode Instruments son para este trabajo. Dar datos de medición a la IA acelera la interpretación; Pero sin mediciones, decirle a la IA "mi aplicación es lenta, acelere" significa hacer predicciones a ciegas.

Los cuatro ejes principales de actuación son:

eje

síntoma

causa típica

Hora de inicio

La solicitud se abre tarde

Trabajo pesado en el hilo principal.

Fluidez (jank)

El desplazamiento se atasca

Procesamiento prolongado, redibujado innecesario en el hilo de la interfaz de usuario

memoria

hinchazón, colapso

Fuga, imagen grande, caché no controlado

batería/calor

eyaculación rápida

Ubicación continua, red, sensor, trabajo en segundo plano.

Consejo: cuando le pregunte a la IA sobre un problema de rendimiento, proporcione el resultado del perfil (qué función tarda y cuánto tiempo, gráfico de memoria). Datos concretos como "Esa función tarda 30 ms por cuadro" permiten a la IA centrarse en el cuello de botella real; Una frase subjetiva como "lento" produce una respuesta genérica e inútil.

Costo de la batería de las habilidades de IA

Las funciones de IA que agregamos en este módulo son poderosas, pero no son gratuitas. Extraer un modelo del dispositivo sobrecarga el procesador y la batería; Un reconocimiento de imágenes en funcionamiento constante (por ejemplo, la cámara que procesa cada fotograma) calentará el teléfono y agotará la batería en cuestión de minutos. Las llamadas de IA en la nube, por otro lado, consumen batería al mantener encendida la radio de la red (la antena que envía y recibe datos) todo el tiempo. Soluciones: ejecute el modelo en el dispositivo solo cuando sea necesario, pruebe la cámara varias veces por segundo en lugar de cada fotograma, envíe solicitudes en la nube por lotes, haga el trabajo pesado mientras el dispositivo se está cargando o inactivo.

Precaución: Una función de IA en funcionamiento constante (traducción en vivo, reconocimiento continuo de objetos) puede agotar la batería muy rápidamente, calentar el dispositivo y el sistema puede acelerarla. Se elimina una característica que hace que el usuario sienta que este costo. Siempre le pregunto a AI "¿cómo puedo hacer que esta función sea compatible con la batería?" También haz la pregunta.

Pasos de optimización

  1. Medida. Encuentre el verdadero cuello de botella con Profiler; no adivines.
  2. Elige el mayor problema. No persiga una mejora del 1%; Apunte a la transacción más cara.
  3. Pregúntele a la IA con datos. Solicite sugerencia de optimización con salida de perfil + código relevante.
  4. Aplicar y medir nuevamente. ¿Es real la mejora? ¿Ha bajado la cifra?
  5. Control de regresión. ¿La optimización rompió algo? Repita las pruebas visuales y funcionales.

tres mini casos

Caso 1: Búsqueda en el lugar equivocado. Un equipo pensó que las listas estaban estancadas y modificó el código de desplazamiento durante semanas sin éxito. Cuando tomaron el generador de perfiles y alimentaron los datos a la IA, resultó que el verdadero cuello de botella eran las imágenes que se recargaban a través de la red con cada fila. Cuando se agregó el caché visual, la fluidez aumentó de 42 FPS a 60 FPS. Lección: la medición evita semanas de esfuerzos inútiles.

Caso 2: función del monstruo de la batería. Una aplicación de traducción agregó traducción de texto en vivo con cámara; Los usuarios se quejaron de que "el teléfono se calentó en 15 minutos y se agotó el 30% de la batería". Cuando se consultó a la IA, se encontró que la cámara procesaba 30 fotogramas por segundo; Cuando esto se redujo a 5 fotogramas y el resultado se actualizó con unos pocos fotogramas de diferencia, el consumo de batería disminuyó a un tercio y la calidad no se notó. Lección: Configura siempre la IA con el ojo de la batería.

Caso 3: inicio lento. Se abría una aplicación en 4,5 segundos; El 20% de los usuarios salían al inicio. El perfil mostró que todo el trabajo inicial (análisis, carga de datos, preparación del modelo) se realizó de forma secuencial en el hilo principal. Con la propuesta de IA, estos se han pospuesto y dejado en un segundo plano; El tiempo de apertura se redujo a 1,3 segundos y la tasa de abandono se redujo a la mitad. Lección: haz sólo el trabajo esencial al principio.

Aviso débil / Aviso fuerte

Mensaje débil: "Mi aplicación es lenta, acelerala".

Mensaje potente: "El desplazamiento de la lista se atasca (jank) en mi aplicación de Android. Datos del perfilador: bindImageView tarda 28 ms en cada cuadro, las imágenes se cargan desde la red cada vez, no hay caché. Código relacionado: [Código del adaptador RecyclerView]. Recomiende las 3 optimizaciones más efectivas en orden de impacto. Indique la ganancia esperada y los posibles efectos secundarios para cada una. Priorice las soluciones que no reduzcan la calidad de la imagen".

Plantillas copiables

Plantilla de análisis de cuellos de botella: "Interprete los siguientes datos del perfil y encuentre las 3 operaciones más costosas: [resultado del perfilador]. Sugiera una posible causa y una optimización concreta para cada una. Ofrezca primero el mayor impacto".

Plantilla de optimización de la batería: "Esta función agota la batería rápidamente: [función, por ejemplo, ubicación permanente]. Hágala compatible con la batería: - Reduzca la frecuencia de muestreo - Restricción en segundo plano - Procesamiento por lotes - Ejecute solo cuando sea necesario Clasifique soluciones sin interrumpir la experiencia del usuario. [código]"

Plantilla de aceleración de inicio: "Acelerar el inicio de la aplicación. Cosas que se están haciendo actualmente al inicio: [lista]. ¿Cuáles se pueden posponer, poner en segundo plano o cargar de forma diferida? Separe las esenciales. [código]".

Plantilla de costo de función de IA: "Evalúe el rendimiento y el costo de la batería de la función [modelo en el dispositivo/llamada en la nube] que agregué. Enumere las métricas que debo medir y las estrategias para reducir el costo. [código]".

Errores comunes

  • Optimizar sin medir. El verdadero cuello de botella suele estar en un lugar diferente al previsto.
  • Persiguiendo pequeñas ganancias. Apunte a la acción más costosa en lugar de la mejora del 1%.
  • Ignorando el costo de la batería de las funciones de IA. El modelo/cámara/red en funcionamiento constante consume la batería.
  • Cansando el hilo principal. El trabajo pesado de iniciar y desplazarse no debería estar en el hilo de la interfaz de usuario.
  • No volver a medir después de la optimización. Verifica que la mejora sea real y no rompa nada.
  • Medición del rendimiento en el emulador. La velocidad, la temperatura y la batería reales del dispositivo son completamente diferentes.

En resumen

El rendimiento y la batería son una cuestión de supervivencia de las aplicaciones móviles. La regla de oro: medir primero, optimizar después. Dar datos del perfil a la IA acelera la interpretación; El deseo inconmensurable de "acelerar" lleva a conjeturas a ciegas. Apunte a la transacción más cara, no persiga pequeñas ganancias. Las capacidades de IA agregadas en este módulo son poderosas pero conllevan costos de batería y procesador; Administre este costo reduciendo la frecuencia de muestreo, el procesamiento por lotes y ejecutando solo cuando sea necesario. Mida nuevamente en el dispositivo real después de cada optimización.

Tarea de aplicación

Importe un perfil en una aplicación (su propio proyecto o ejemplo) o cree un resultado de perfil de muestra y haga que la IA lo interprete con la "plantilla de análisis de cuellos de botella". Aplique la optimización de mayor impacto y mida nuevamente: ¿realmente disminuyó el número? Además, evalúe una función de IA que agregó en este módulo (modelo en el dispositivo o llamada en la nube) en términos de batería con la "plantilla de costo de la función de IA" y determine al menos una configuración compatible con la batería.

lista de verificación

  • [] Obtuve el perfil antes de la optimización, no lo adiviné
  • [ ] Apunté a la operación más cara, no dispersé en pequeñas ganancias
  • [] Proporcioné los datos del perfil de IA en números concretos.
  • [] Evalué el costo de la batería/procesador de las funciones de IA
  • [] Eliminé el trabajo pesado del hilo principal
  • [] Después de la optimización, volví a medir en el dispositivo real y verifiqué la regresión.