Compartilhar via


Otimizar carregamento do aplicativo ou da página tendo em vista o pico de desempenho

Um dos fatores-chave que moldam a percepção que o usuário tem de um aplicativo é a rapidez com que ele abre e se torna funcional. Por isso, priorizar essa meta é crucial na compilação de um aplicativo de alto desempenho. Para atingir o desempenho ideal do aplicativo, existem três áreas principais que requerem atenção:

  1. Carregar dados rapidamente
  2. Cálculos eficientes
  3. Minimização de recursos obrigatórios

Cada uma dessas áreas tem diversos antipadrões comuns.

Carregar dados rapidamente

Siga estas diretrizes para conseguir aplicativos com carregamento rápido de dados.

Evite popular diretamente uma coleção com grandes volumes de dados

Às vezes, os autores usam ClearCollect() para copiar dados de um servidor para uma coleção no aplicativo. Essa prática é uma solução alternativa para limitações de delegação na origem ou porque eles planejam usar coleções no aplicativo para outras finalidades. O uso de ClearCollect() poderá aumentar potencialmente a velocidade do aplicativo quando a coleção for utilizada posteriormente. No entanto, é importante tomar cuidado ao implementá-lo. O uso de ClearCollect dessa maneira pode acarretar tempos de carregamento do aplicativo ou de navegação entre as páginas mais lentos. ClearCollect() deve terminar para que você possa ver os dados em uma galeria ou tabela. Essa etapa poderá demorar muito se houver muitos dados ou se você usar essa abordagem em muitas fontes de dados. As coleções são mais bem usadas em situações nas quais os dados são pequenos e você precisa fazer muitos cálculos na coleção. Por exemplo, um bom uso de coleções é uma cesta de ordens online. O cliente pode atualizar e remover itens diversas vezes antes de optar por confirmar a ordem. Além disso, você pode aumentar a coleção com mais itens de dados, como descontos potenciais, destaques etc. Os dados "somente leitura" devem ser acessados de maneira nativa – sem trazê-los para uma coleção.

Levar em consideração evitar chamar Power Automate para popular uma coleção

Esse problema é uma pequena variação da seção anterior. Às vezes, os autores também usam o Power Automate para popular a coleção no Power Apps. Existe um custo de desempenho de aproximadamente 0,6 segundo para instanciar o Power Automate. O Power Automate deverá ser iniciado de maneira independente sempre que for chamado. Ele deve alocar memória, ter os componentes certos e pronto para execução. Assim como acontece com a orientação acima, uma ou duas chamadas para o Power Automate podem não ser um problema, dependendo do aplicativo. Mas, quase universalmente, os aplicativos de pior desempenho abusam dessa abordagem. O custo de desempenho pode aumentar rapidamente e prejudicar o desempenho do aplicativo.

Evitar usar SaveData() e LoadData() como um cenário totalmente offline

Alguns autores usam ClearCollect() e depois SaveData() para armazenar dados para uso offline de uso geral. Você pode usar SaveData() para salvar a coleção no dispositivo e LoadData() para carregá-la quando estiver offline. No entanto, essa abordagem não é recomendada para casos nos quais haja um grande volume de dados ou se os dados forem complexos. Isso deixa o aplicativo mais lento porque ele precisa aguardar ClearCollect() terminar para poder mostrar os dados. Você só deve usar SaveData() e LoadData() em cenários de dados pequenos e simples, como preferências e listas curtas. Uma maneira melhor de trabalhar com grandes quantidades de dados offline é usar o recurso offline do Power Apps que funciona com Dataverse. Esse recurso pode processar dados maiores e mais complexos com mais eficiência.

Usar seleção de coluna explícita

A seleção explícita de colunas está ativada por padrão. No entanto, alguns criadores desativam esse recurso. O problema é que, com a seleção explícita de colunas (ECS) ativada, às vezes, as colunas não serão recuperadas da fonte de dados se os dados forem recuperados primeiro em uma coleção. Como algumas tabelas podem ter muitas colunas, a ECS calcula automaticamente quais colunas devem ser recuperadas com base em seu uso em controles (por exemplo, galerias e formulários). Como algumas tabelas podem conter muitas colunas, reduzir o tamanho do download pode acelerar o desempenho. Algumas tabelas podem ter cem colunas ou mais. Se o seu aplicativo precisar usar somente 10 colunas e você reduzir todas as colunas de uma tabela de 100 colunas, você reduzirá 10 vezes mais dados do que realmente precisa.

A maioria dos problemas surge ao trazer dados para coleções. Se uma coluna for explicitamente referenciada em um controle, a ECS funcionará bem. E, a ECS geralmente funciona para coleções. No entanto, a linhagem da coluna é ocasionalmente perdida quando os dados passam por coleções e variáveis. E, por isso, o Power Apps pode perder o controle da coluna que deveria recuperar. Para resolver esse problema, você pode forçar o Power Apps a "lembrar" a coluna usando a função ShowColumns. Por exemplo:

    ClearCollect(
        MyColTable, 
        ShowColumns(Filter(BankAccounts, AcountNo = 32),
        "Col1", 
        "Col2", 
        "Col3")
    );

Em que Col1, Col2 e Col3 são colunas que você espera que sejam recuperadas da fonte de dados (por exemplo, a fonte de dados Account).

Alternativamente, você pode adicionar um controle oculto ao seu formulário que faça referência à coluna. Isso força o Power Apps a "lembrar" da coluna.

Cálculos rápidos

Cálculos rápidos (ou eficientes) são uma meta de desempenho por si. Para obter mais informações, consulte Cálculos rápidos (eficientes). No entanto, existem alguns antipadrões comuns que também podem afetar o carregamento do aplicativo e por isso os abordamos aqui. Abaixo está uma lista de otimizações que você deve levar em consideração que podem afetar o lançamento do aplicativo ou a navegação da página.

Usar App.Formulas

Historicamente, muitos autores colocaram um grande número de cálculos em OnStart. Quando você coloca uma expressão em OnStart, ele força o Power Apps a executar precisamente essa expressão quando o aplicativo é iniciado e antes de tudo. No entanto, com a introdução de App.Formulas, você pode permitir que o Power Apps decida quando executar uma expressão. O Power Apps pode executar a fórmula "Just-in-time" antes que ela seja necessária. Para obter mais informações, consulte Fórmulas de aplicativo. Use App.Formulas para dividir a fórmula em partes que o Power Apps pode organizar de maneira mais eficiente para execução.

Usar Concurrent

Use a função Concurrent para permitir que fórmulas sejam executadas simultaneamente. É comum usar essa função para popular coleções, pois ela possibilita uma execução paralela. Embora isso possa oferecer algumas agilizações modestas, a adição de muitas fontes de dados pode causar problemas de tempo e limitação.

Usar desempenho aprimorado para controles ocultos

Quando habilitado por padrão em todos os novos aplicativos criados desde dezembro de 2022, o Power Apps não renderiza nenhum controle que não esteja inicialmente visível.

Minimizar recursos obrigatórios

Minimize os recursos obrigatórios para iniciar o aplicativo ou a tela. Esse esforço inclui o escopo ou o particionamento cuidadoso dos recursos dos quais o aplicativo ou a tela precisa. Abaixo estão diversas abordagens para ajudar você.

Use uma tela inicial de baixa dependência e elimine telas não utilizadas.

Use uma primeira tela de baixa dependência, como uma de boas-vindas no aplicativo. Crie uma tela que não carregue galeria, tabela ou dados de referência. Isso gerencia a percepção de velocidade do usuário e permite que o Power Fx adie de maneira devida alguns cálculos para mais tarde. Se você tiver alguma tela não usada, remova-a.

Mantenha baixas as dependências entre telas

As referências entre páginas forçam o carregamento de páginas adicionais por meio de referências, por exemplo, referenciando controles em páginas e os colocando em coleções. Algumas referências podem ser inevitáveis. Centralize as referências comuns em uma única página, se possível, de maneira que somente a página seja carregada.

Levar em consideração mídia inserida

Às vezes, os autores incorporam mídia aos aplicativos para garantir um carregamento rápido. Se tiver uma mídia inserida, leve em consideração se você a está usando ou não. Do contrário, exclua-a. Se você tiver inserido um arquivo .png, leve em consideração substituí-lo por um arquivo .svg que seja menor. Se você usar um .svg, a fonte do .svg deverá estar na máquina cliente. Leve em consideração a resolução da mídia inserida. Ela é muito alta para o dispositivo na qual será usada?

Não se esqueça de App.StartScreen

Se você usar App.StartScreen, verifique se a primeira tela é uma tela em branco. Por causa do empacotamento atual do aplicativo, a primeira tela lógica é sempre empacotada com a lógica de inicialização do aplicativo e será inicializada, independentemente de navegarmos até ela.

Levar em consideração a divisão do aplicativo

Se o aplicativo for grande, leve em consideração particioná-lo em aplicativos menores. Se a funcionalidade estiver separada o suficiente em partes diferentes do aplicativo, essa abordagem poderá funcionar. Nesse cenário, você cria um aplicativo à parte real iniciado com parâmetros que incluem o contexto do primeiro aplicativo ou do aplicativo pai.

Sugestões

Para atingir a meta de inicialização rápida de um aplicativo e uma página, leve em consideração as seguintes perguntas e sugestões:

  1. Você está carregando muitos dados em uma primeira tela? Você pode usar uma primeira tela diferente?
  2. Você está executando muitos comandos ou expressões do Power Fx no início do carregamento do aplicativo? Você pode adiar esses comandos e expressões para um ponto posterior no aplicativo? Obtém apenas os dados dos quais realmente precisa para iniciar o aplicativo? 1 Você pode converter expressões em App.OnStart em fórmulas nomeadas usando App.Formulas? Isso permite que o Power Fx decida quando realmente executar a fórmula, em vez de forçá-la a acontecer em eventos de carregamento ou navegação.
  3. Você pode usar um fluxo do Power Automate à parte para criar uma tabela temporária em um armazenamento de dados local como o Dataverse que combina dados de fontes diferentes? E, em seguida, acessar esses dados no Power App?
  4. Para inícios de processo empresarial, você pode usar ações disparadas pelo servidor, em vez de chamar um fluxo do Power Automate?
  5. Você pode criar uma exibição no servidor que une os dados para você?
  6. Se quiser usar dados offline no aplicativo, você poderá usar o recurso offline do Power Apps que funciona com o Dataverse? Se os dados não estiverem no Dataverse, você poderá movê-los para lá?