Partilhar via


Otimize o carregamento do aplicativo ou da página para obter desempenho máximo

Um dos principais fatores que moldam a perceção que o utilizador tem de uma aplicação é a rapidez com que ela abre e se torna funcional. Portanto, priorizar este objetivo é crucial na construção de uma aplicação de desempenho elevado. Para alcançar o desempenho ideal da aplicação, há três áreas principais que requerem atenção:

  1. Carregar dados depressa
  2. Cálculos eficientes
  3. Minimizar recursos necessários

Cada uma destas áreas possui vários antipadrões comuns.

Carregar dados depressa

Siga estas diretrizes para obter aplicações de carregamento rápido de dados.

Evite preencher diretamente uma coleção com grandes quantidades de dados

Por vezes, os criadores usam ClearCollect() para copiar dados de um servidor para uma coleção na aplicação. Esta prática é uma solução alternativa para limitações de delegação na origem ou porque planeiam usar coleções na aplicação para outros fins. A utilização de ClearCollect() pode aumentar potencialmente a velocidade da aplicação quando a coleção for utilizada posteriormente. No entanto, é importante ter cuidado ao implementá-la. Usar o ClearCollect desta maneira pode levar a tempos mais lentos de carregamento da aplicação ou de navegação entre páginas. ClearCollect() tem de terminar antes que possa ver os dados numa galeria ou tabela. Este passo pode demorar muito tempo se houver muitos dados ou se usar esta abordagem para demasiadas origens de dados. As coleções são mais utilizadas para situações em que os dados são pequenos e precisa de fazer muitos cálculos na coleção. Por exemplo, um bom uso de coleções é uma Cesto de encomendas online. O cliente poderá atualizar e remover itens diversas vezes antes de escolher consolidar a encomenda. Além disso, pode aumentar a coleção com mais itens de dados, como descontos potenciais, destaques, etc. Os dados "só de leitura" devem ser acedidos nativamente — sem os trazer para uma coleção.

Considere evitar chamar o Power Automate para preencher uma coleção

Este problema é uma ligeira variação da secção anterior. Por vezes, os autores também usam o Power Automate para preencher a respetiva coleção do Power Apps. Há aproximadamente um custo de desempenho de 0,6 segundos para instanciar o Power Automate. O Power Automate tem de ser iniciado de forma independente cada vez que for chamado. Tem de alocar memória, estar situado com os componentes corretos e estar pronto para execução. Tal como no conselho acima, uma ou duas chamadas para o Power Automate podem não ser um problema dependendo da sua aplicação. Mas, quase universalmente, as aplicações com pior desempenho usam esta abordagem em excesso. O custo do desempenho pode aumentar rapidamente e prejudicar o desempenho da sua aplicação.

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

Alguns autores usam ClearCollect() e, em seguida, SaveData() para armazenar dados para uso offline de fins gerais. Pode usar SaveData() para guardar a coleção no seu dispositivo e LoadData() para carregá-la quando estiver offline. No entanto, esta abordagem não é recomendada para instância em que há uma grande quantidade de dados ou se os dados forem complexos. Isto torna a sua aplicação mais lenta porque precisa de esperar que ClearCollect() termine antes de poder mostrar os dados. Só deve usar SaveData() e LoadData() para 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 a caraterística offline do Power Apps que funciona com o Dataverse. Esta caraterística pode lidar com 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 predefinição. No entanto, alguns autores desativam esta caraterística. O problema é que, com a Seleção explícita de colunas (ECS) ativada, por vezes, as colunas não são obtidas da origem de dados se os dados forem obtidos primeiro para uma coleção. Como algumas tabelas podem ter muitas colunas, a ECS calcula automaticamente que colunas são necessárias obter com base na respetiva utilização em controlos (por exemplo, galerias e formulários). Como algumas tabelas podem conter muitas colunas, reduzir o tamanho da transferência pode acelerar o desempenho. Algumas tabelas podem ter cem colunas ou mais. Se a sua aplicação precisar de usar apenas 10 colunas e reduzir todas as colunas de uma tabela de 100 colunas, estará a reduzir dez vezes mais dados do que realmente precisa.

A maioria dos problemas surge ao trazer dados para coleções. Se uma coluna for explicitamente referenciada num controlo, a ECS funcionará bem. E a ECS geralmente funciona para coleções. No entanto, a linhagem da coluna é ocasionalmente perdida quando os dados se movem entre coleções e variáveis. E assim o Power Apps pode perder o controlo da coluna que deveria obter. Para resolver este problema, pode forçar o Power Apps a "lembrar-se" da coluna através da função ShowColumns. Por exemplo:

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

Onde Col1, Col2 e Col3 são colunas que espera que sejam obtidas da origem de dados (por exemplo, a origem de dados Account).

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

Cálculos rápidos

Cálculos rápidos (ou eficientes) são um objetivo de desempenho por si só. Para mais informações, consulte Cálculos rápidos (eficientes). No entanto, existem alguns antipadrões comuns que também podem afetar o carregamento da aplicação e, por isso, apresentamo-los aqui. Abaixo está uma lista de otimizações que deve considerar e que podem afetar o lançamento da aplicação ou a navegação da página.

Utilizar App.Formulas

Historicamente, muitos autores colocaram um grande número de cálculos no OnStart. Quando coloca uma expressão em OnStart, isto obriga o Power Apps a executar essa expressão precisamente quando a aplicação é iniciada e antes de tudo o resto. No entanto, com a introdução de App.Formulas 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 seja necessária. Para mais informações, consulte Fórmulas de aplicações. Use App.Formulas para dividir a sua fórmula em partes que o Power Apps pode organizar com mais eficiência para execução.

Usar Concurrent

Use a função Concurrent para permitir que fórmulas sejam executadas ao mesmo tempo. É comum usar esta função para preencher coleções, pois permite a execução paralela. Embora isto possa fornecer algumas acelerações modestas, adicionar muitas origens de dados pode causar problemas de temporização e limitação.

Usar o Desempenho melhorado para controlos ocultos

Quando ativado por predefinição em todas as novas aplicações criadas desde dezembro de 2022, o Power Apps não compõe qualquer controlo que não esteja inicialmente visível.

Minimizar recursos necessários

Minimize os recursos necessários para iniciar a sua aplicação ou ecrã. Este esforço inclui definir cuidadosamente o âmbito ou particionar os recursos de que a sua aplicação ou ecrã precisam. Abaixo estão várias abordagens para o ajudar.

Use uma ecrã de início de baixa dependência e elimine ecrãs não utilizados.

Use uma primeiro ecrã de baixa dependência, como boas-vindas na sua aplicação. Crie um ecrã que não carregue uma galeria, tabela ou dados de referência. Isto gere a perceção de velocidade do utilizador e permite que o Power Fx adie adequadamente alguns cálculos para mais tarde. Se tiver ecrãs não utilizados, remova-os.

Mantenha baixas as dependências entre ecrãs

As referências entre páginas forçam o carregamento de páginas adicionais através de referências, por exemplo, referenciando controlos em páginas e colocando-as em coleções. Algumas referências podem ser inevitáveis. Centralize as referências comuns numa única página, se possível, para que apenas essa página seja carregada.

Considere multimédia incorporado

Por vezes, os autores incorporam multimédia nas suas aplicações para garantir um carregamento rápido. Se tiver multimédia incorporada, considere se a está a usar ou não. Se não, elimine-a. Se incorporou um ficheiro .png, considere substituí-lo por um ficheiro .svg que seja menor. Observe que se usar um .svg, a origem do .svg tem de estar no computador cliente. Considere a resolução da multimédia incorporada. Está demasiado alta para o dispositivo em que será usada?

Não se esqueça do App.StartScreen

Se usar App.StartScreen, certifique-se de que o primeiro ecrã é um ecrã em branco. Devido ao empacotamento atual da aplicação, o primeiro ecrã lógico é sempre agrupado com a lógica de inicialização da aplicação e será inicializada, independentemente de se alguma vez navegarmos até ela.

Considere dividir a aplicação

Se a sua aplicação for grande, considere particioná-la em aplicações menores. Se a funcionalidade estiver separada o suficiente em diferentes partes da sua aplicação, esta abordagem poderá funcionar. Neste cenário, cria uma aplicação separada real que é iniciada com parâmetros que incluem o contexto da primeira aplicação ou da aplicação principal.

Sugestões

Para atingir o objetivo de uma aplicação e início de página rápidos, considere as seguintes perguntas e sugestões:

  1. Está a carregar muitos dados num primeiro ecrã? Pode usar um primeiro ecrã diferente?
  2. Está a executar muitos comandos ou expressões do Power Fx no início do carregamento da aplicação? Pode deferir estes comandos e expressões para um ponto posterior na aplicação? Só obtém os dados de que realmente necessita para que a aplicação seja iniciada? 1 Pode converter expressões em App.OnStart em fórmulas nomeadas com App.Formulas? Isto permite ao Power Fx decidir quando realmente executar a fórmula, em vez de forçá-la a acontecer em eventos de carregamento ou de navegação.
  3. Pode usar um fluxo do Power Automate separado para criar uma tabela temporária num arquivo de dados local, como o Dataverse que combina dados de diferentes origens? E, em seguida, aceder a esses dados na sua Power App?
  4. Para iniciar processos de negócio, pode usar ações acionadas pelo Servidor, em vez de chamar um Fluxo do Power Automate?
  5. Pode criar uma vista no servidor que une os dados por si?
  6. Se pretender usar dados offline na sua aplicação, pode usar a caraterística offline do Power Apps que funciona com o Dataverse? Se os seus dados não estiverem no Dataverse, pode movê-los para lá?