Ir al contenido principal

Power Apps Standards: Guia de Optimización

Trucos de Profesional para que tu App Vuele: Guía de Rendimiento 🏎️

Una aplicación lenta es una aplicación que nadie quiere usar. Estos consejos te ayudarán a optimizar tus Power Apps para que sean rápidas, eficientes y consuman menos batería.

1. Pide todos los cafés a la vez (Carga de datos concurrente)

Imagina que estás en una cafetería. Lo normal es que cada persona pida, pague y espere su café antes de que el siguiente pueda pedir. Es lento.

La función Concurrent es como tener varios camareros que toman nota a varios clientes a la vez. En lugar de esperar a que una tabla de datos se cargue para empezar a cargar la siguiente, Concurrent pide varias a la vez.

La regla: Usa Concurrent solo para pedir datos que están en la nube (SharePoint, Dataverse, etc.). No sirve de nada para datos que ya están en la «memoria» de la app (variables y colecciones).

Fragmento de código

// MODO LENTO (Secuencial)
// Primero pide el perfil del usuario... y espera.
Set(gblPerfilUsuario, ...);
// Cuando termina, pide los proyectos activos.
ClearCollect(colProyectosActivos, ...);


// MODO RÁPIDO (Concurrente)
// Pide el perfil del usuario Y los proyectos activos ¡a la vez!
Concurrent(
    Set(gblPerfilUsuario, ...),
    ClearCollect(colProyectosActivos, ...)
);

2. Deja que la nube trabaje por ti (Delegación) ☁️

Este es el concepto más importante para el rendimiento. «Delegar» significa pedirle al servidor (a la nube) que haga el trabajo pesado de filtrar, buscar u ordenar los datos por ti.

Imagina que necesitas un libro de una biblioteca gigante.

  • Sin delegar (lento): Le pides a la biblioteca que te envíe todos sus libros a tu casa y tú te pones a buscar el que quieres.
  • Delegando (rápido): Le dices al bibliotecario exactamente qué libro quieres, él lo busca por ti y te envía solo ese libro.

Beneficios: Es mucho más rápido y se transfieren muchos menos datos a tu dispositivo. Cómo hacerlo: Usa funciones que se puedan delegar (Power Apps te avisa con un triángulo azul si una función no se puede delegar). Para filtros complejos en Dataverse, usar Vistas de Dataverse es un truco genial, ya que las vistas no tienen problemas de delegación.

3. Ten los ingredientes a mano (Usa colecciones como caché) 📚

Si hay datos que vas a usar una y otra vez en tu app (como una lista de categorías o tipos de producto), no se los pidas a la nube cada vez.

La mejor práctica es cargarlos una sola vez cuando la app se inicia y guardarlos en una colección (en la «memoria» de la app).

Analogía: Es como en la cocina. En lugar de ir a la despensa (la nube) cada vez que necesitas una pizca de sal, pones el salero (la colección) en la encimera. Acceder a él es instantáneo.

4. Viaja con equipaje de mano (Limita el tamaño de las colecciones) 🧳

Las colecciones se guardan en la memoria del dispositivo. Si cargas colecciones enormes, especialmente en un móvil, la app puede quedarse sin memoria y cerrarse de golpe.

La regla: Carga solo las filas y columnas que necesites. Cómo hacerlo: Usa la función ShowColumns para elegir solo las columnas que te interesan. Es como hacer la maleta para un viaje: no te llevas todo el armario, solo la ropa que te vas a poner.

Fragmento de código

// En lugar de traer TODA la tabla de Cuentas...
// ...traemos solo las columnas de nombre, ciudad, provincia y código postal.
ClearCollect(
    colCuentas,
    ShowColumns(
        Cuentas,
        "nombre",
        "ciudad",
        "provincia",
        "codigo_postal"
    )
);

5. Envía todos los paquetes de una vez («Batch Patch») 📦

Si necesitas actualizar varios registros a la vez en tu origen de datos, no lo hagas uno por uno.

  • Lento (ForAll + Patch): Es como ir a correos y enviar 20 cartas, haciendo la cola 20 veces.
  • Rápido (Patch con una tabla): Es meter las 20 cartas en una caja grande y enviarla toda de una vez.

Esta técnica, a menudo llamada «batch patch», es increíblemente más rápida.

6. No lo hagas todo al entrar por la puerta (Reduce el código en OnStart) ⏰

La propiedad OnStart de la app es lo primero que se ejecuta. Cuantas más cosas pongas ahí, más tardará en abrirse la pantalla inicial.

La solución: Mueve el código que no sea absolutamente esencial para el arranque a la propiedad OnVisible de la primera pantalla. O mejor aún, carga los datos justo en la pantalla donde se vayan a necesitar.

7. Menos es más (Minimiza los controles por pantalla) 🖼️

Cada botón, etiqueta, icono o campo de texto que pones en una pantalla consume memoria y hace que tarde más en cargar.

  • Simplifica tus diseños.
  • Si una pantalla tiene demasiadas cosas, divídela en varias pantallas más pequeñas.
  • Para listas de elementos repetitivos, usa siempre una Galería. Una galería es súper eficiente: da igual que muestre 10 o 1.000 filas, para la app sigue contando como un solo control.

8. No interrumpas al que habla (Usa DelayOutput) 🗣️

En los campos de búsqueda, por defecto, la app busca con cada letra que el usuario escribe. Esto genera muchísimas consultas innecesarias.

Activa la propiedad DelayOutput a true en el campo de texto. Con esto, la app esperará a que el usuario haga una pequeña pausa al escribir antes de lanzar la búsqueda. Es mucho más eficiente.

9. No grites de una habitación a otra (No referencies controles de otras pantallas) 🔗

Nunca escribas una fórmula en la Pantalla A que dependa directamente de un control que está en la Pantalla B (ej: InputDeLaPantallaB.Text). Esto obliga a la app a mantener las dos pantallas cargadas en memoria a la vez, gastando recursos.

La solución: Guarda el valor del control de la Pantalla B en una variable global. Luego, desde la Pantalla A, lee el valor de esa variable. Es mucho más limpio y eficiente.

10. Prepara la ensalada en la cocina, no en el huerto (Evita el problema N+1) 🥗

El problema «N+1» es un asesino silencioso del rendimiento. Ocurre cuando haces 1 consulta para traer una lista, y luego N consultas más (una por cada elemento de la lista) para obtener un detalle. Por ejemplo, 1 consulta para traer 100 contactos, y luego 100 consultas más para traer el nombre de la empresa de cada contacto.

  • Solución en Dataverse: ¡Es fácil! Dataverse es inteligente y puede traer los datos relacionados en la primera consulta. Simplemente usa la notación de punto: ThisItem.Empresa.'Nombre de la Empresa'.
  • Solución en SharePoint: SharePoint no es tan listo. El truco es:
    1. Cargar todos los contactos en una colección.
    2. Cargar todas las empresas en otra colección.
    3. Usar la función AddColumns para «unir» las dos colecciones en tu app. Es como ir al huerto, traer una cesta con todos los tomates y otra con todas las lechugas, y luego preparar la ensalada en la cocina. Es mucho más rápido que ir al huerto por cada hoja de lechuga.

Optimización, PowerApps

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.