Optimice la carga de aplicaciones o páginas para obtener el máximo rendimiento
Uno de los factores clave que moldean la percepción que un usuario tiene de una aplicación es la rapidez con la que se abre y se vuelve funcional. Por lo tanto, priorizar este objetivo es crucial para crear una aplicación eficaz. Para lograr un rendimiento óptimo de la aplicación, hay tres áreas principales que requieren atención:
- Cargar datos rápido
- Cálculos eficientes
- Minimizar los recursos necesarios
Cada una de estas áreas tiene varios antipatrones comunes.
Cargar datos rápido
Siga estas pautas para lograr aplicaciones de carga de datos rápida.
Evite completar directamente una colección con grandes cantidades de datos
A veces, los autores usan ClearCollect() para copiar datos de un servidor a una colección en su aplicación. Esta práctica es una solución alternativa para las limitaciones de delegación en el código fuente o porque planean usar colecciones en la aplicación para otros fines. El uso de ClearCollect() puede aumentar potencialmente la velocidad de la aplicación cuando la colección se utilice más adelante. Sin embargo, es importante tener cuidado al implementarlo. El uso de ClearCollect de esta manera puede generar tiempos de carga de aplicaciones más lentos o al navegar entre páginas. ClearCollect() debe finalizar antes de poder ver los datos en una galería o tabla. Este paso puede llevar mucho tiempo si hay muchos datos o si utiliza este enfoque para demasiados orígenes de datos. Las colecciones se utilizan mejor en situaciones en las que los datos son pequeños y es necesario realizar muchos cálculos sobre la colección. Por ejemplo, un buen uso de las colecciones es una cesta de pedidos online. El cliente puede actualizar y eliminar artículos varias veces antes de decidir realizar el pedido. Además, puede aumentar la colección con más elementos de datos, como descuentos potenciales, aspectos destacados, etc. Se debe acceder a los datos de "solo lectura" de forma nativa, sin incorporarlos a una colección.
Considere evitar llamar a Power Automate para completar una colección
Este número es una ligera variación de la sección anterior. A veces, los autores también utilizan Power Automate para completar su colección en Power Apps. La creación de instancias implica un coste de rendimiento de aproximadamente 0,6 segundos para crear una instancia en Power Automate. Power Automate debe iniciarse de forma independiente cada vez que se llama. Debe asignar memoria, ubicarse con los componentes correctos y estar listo para ejecutarse. Al igual que con el consejo anterior, una o dos llamadas a Power Automate pueden no ser un problema dependiendo de tu aplicación. Pero, casi universalmente, las aplicaciones con peor rendimiento abusan de este enfoque. El coste de rendimiento puede acumularse rápidamente y arruinar el rendimiento de su aplicación.
Evite el uso de SaveData() y LoadData() como un escenario completamente fuera de línea
Algunos autores utilizan ClearCollect() y luego SaveData() para almacenar datos para uso general sin conexión. Puedes usar SaveData() para guardar la colección en su dispositivo y LoadData() para cargarla cuando no esté conectado. Sin embargo, este enfoque no se recomienda en casos en los que hay una gran cantidad de datos o si los datos son complejos. Hace que su aplicación sea más lenta porque tiene que esperar a que finalice ClearCollect() antes de poder mostrar los datos. Solo debe usar SaveData() y LoadData() para escenarios de datos pequeños y simples, como preferencias y listas cortas. Una mejor manera de trabajar con grandes cantidades de datos sin conexión es utilizar la característica de Power Apps sin conexión que funciona con Dataverse. Esta característica puede manejar datos más grandes y complejos de manera más eficiente.
Usar la selección de columnas explícitas
La selección de columnas explícitas está activada de forma predeterminada. Sin embargo, algunos autores desactivan esta característica. El problema es que si se activa la selección de columnas explícitas (ECS), en ocasiones las columnas no se recuperan del origen de datos si los datos se recuperan primero en una colección. Dado que algunas tablas pueden tener muchas columnas, ECS calcula automáticamente las columnas que es necesario recuperar en función de su uso en los controles (por ejemplo, galerías y formularios). Dado que algunas tablas admiten muchas columnas, reducir el tamaño de la descarga puede acelerar el rendimiento. Algunas tablas pueden tener cien columnas o más. Si su aplicación solo necesita usar 10 columnas y elimina todas las columnas de una tabla de 100 columnas, está eliminando diez veces más datos de los que realmente necesita.
La mayoría de los problemas surgen al incorporar datos a las colecciones. Si se hace referencia explícita a una columna en un control, entonces ECS funciona bien. Y, en general, ECS funciona para las colecciones. Sin embargo, el linaje de columnas ocasionalmente se pierde cuando los datos se mueven a través de colecciones y variables. Y, por lo tanto, Power Apps puede perder la pista de la columna que debería recuperar. Para resolver este problema, se puede forzar a Power Apps para que "recuerde" la columna mediante la función ShowColumns
. Por ejemplo:
ClearCollect(
MyColTable,
ShowColumns(Filter(BankAccounts, AcountNo = 32),
"Col1",
"Col2",
"Col3")
);
Donde Col1
, Col2
y Col3
son columnas que se espera recuperar del origen de datos (por ejemplo, del origen de datos Account
).
Como alternativa, puede agregar un control oculto a su formulario que haga referencia a la columna. Esto fuerza a Power Apps a que "recuerde" la columna.
Cálculos rápidos
Los cálculos rápidos (o eficientes) son un objetivo de rendimiento en sí mismos. Para obtener más información, consulte Cálculos rápidos (eficientes). Sin embargo, existen algunos antipatrones comunes que también pueden afectar la carga de la aplicación, por lo que los analizamos aquí. A continuación se muestra una lista de optimizaciones que debe considerar y que podrían afectar el inicio de la aplicación o la navegación de la página.
Usar App.Formulas
Históricamente muchos autores han incluido una gran cantidad de cálculos en OnStart. Cuando coloca una expresión en OnStart, obliga a Power Apps a ejecutar esa expresión precisamente cuando se inicia la aplicación y antes que todo lo demás. Sin embargo, con la introducción de App.Formulas puedes dejar que Power Apps decida cuándo ejecutar una expresión. Power Apps puede ejecutar la fórmula 'Just-in-time' antes de que sea necesaria. Para obtener más información, consulte Fórmulas de aplicaciones. Utilice App.Formulas para dividir su fórmula en partes que Power Apps puede organizar de manera más eficiente para su ejecución.
Usar Concurrent
Utilice la función Concurrent para permitir que las fórmulas se ejecuten al mismo tiempo. Es común usar esta función para completar colecciones, ya que permite la ejecución paralela. Si bien esto puede proporcionar algunas aceleraciones modestas, agregar muchos orígenes de datos puede causar problemas de sincronización y aceleración.
Usar Rendimiento mejorado para controles ocultos
Cuando está habilitado de forma predeterminada en todas las aplicaciones nuevas creadas desde diciembre de 2022, Power Apps no muestra ningún control que no sea visible inicialmente.
Minimizar los recursos necesarios
Minimice los recursos necesarios para iniciar su aplicación o pantalla. Este esfuerzo incluye determinar cuidadosamente el alcance o dividir los recursos que su aplicación o pantalla necesita. A continuación se presentan varios enfoques para ayudarle.
Utilice una pantalla de inicio de baja dependencia y elimine las pantallas no utilizadas.
Utilice una primera pantalla de baja dependencia, como una bienvenida en su aplicación. Cree una pantalla que no cargue una galería, tabla o datos de referencia. Esto administra la percepción de velocidad del usuario y permite que Power Fx retrasar adecuadamente algunos cálculos para más tarde. Si tiene pantallas sin usar, elimínelas.
Mantenga bajas las dependencias entre pantallas
Las referencias entre páginas fuerzan la carga de páginas adicionales a través de referencias, por ejemplo, hacer referencia a controles en páginas y colocarlas en colecciones. Algunas referencias pueden resultar inevitables. Centralice las referencias comunes en una sola página, si es posible, para que solo se cargue la página.
Considere los medios integrados
A veces, los autores incorporan medios en sus aplicaciones para garantizar una carga rápida. Si tiene medios integrados, considere si los está usando o no. Si no, bórrelos. Si ha incrustado un archivo .png, considere sustituirlo por un archivo .svg que sea más pequeño. Tenga en cuenta que si utiliza un .svg, el origen del .svg debe estar en la máquina cliente. Considere la resolución de los medios integrados. ¿Es demasiado alto para el dispositivo en el que se utilizará?
No olvide App.StartScreen
Si utiliza App.StartScreen, asegúrese de que la primera pantalla esté en blanco. Debido al empaquetado actual de la aplicación, la primera pantalla lógica siempre viene incluida con la lógica de inicio de la aplicación y se inicializará, independientemente de si alguna vez navegamos hasta ella.
Considere dividir la aplicación
Si su aplicación es grande, considere dividirla en aplicaciones más pequeñas. Si la funcionalidad está lo suficientemente separada en diferentes partes de su aplicación, este enfoque podría funcionar. En este escenario, crea una aplicación independiente real que inicia con parámetros que incluyen el contexto de la primera aplicación o de la principal.
Sugerencias
Para lograr el objetivo de un inicio rápido de la aplicación y la página, considere las siguientes preguntas y sugerencias:
- ¿Está cargando muchos datos en una primera pantalla? ¿Puede usar una primera pantalla diferente?
- ¿Está ejecutando muchos comandos o expresiones de Power Fx al comienzo de la carga de la aplicación? ¿Puede aplazar estos comandos y expresiones a un punto posterior de la aplicación? ¿Solo obtiene datos que necesita para iniciar la aplicación? 1 ¿Puede convertir expresiones en App.OnStart en fórmulas con nombre con App.Formulas? Esto permite que Power Fx decida cuándo ejecutar realmente la fórmula en lugar de forzar que suceda en eventos de carga o navegación.
- ¿Puede usar un flujo de Power Automate separado para crear una tabla temporal en un almacén de datos local como Dataverse que combina datos de diferentes orígenes? ¿Y luego acceder a esos datos en su Power App?
- Para iniciar procesos de negocio, ¿puede utilizar acciones activadas por el servidor en lugar de llamar a un flujo de Power Automate?
- ¿Puede crear una vista en el servidor que una los datos por usted?
- Si desea utilizar datos sin conexión en su aplicación, ¿puede utilizar la característica de Power Apps sin conexión que funciona con Dataverse? Si sus datos no están en Dataverse, ¿puede moverlos allí?