Partilhar via


Cálculos rápidos

As expressões do Power Fx são poderosas e fazem muitos cálculos em fundo automaticamente. Embora o Power Fx automatize muitas coisas para si, é possível ajustar os seus cálculos para que cheguem o mais depressa possível.

Obtenção de dados

Usar Seleção de coluna explícita

A caraterística Seleção Explícita de Coluna (ECS) está ativada por predefinição para todas as novas aplicações. Se não estiver ativada para a sua aplicação, deve ativá-la. O ECS reduz automaticamente o número de colunas obtidas apenas para aquelas usadas na aplicação. Se a ECS não estiver ativada, poderá obter mais dados do que precisa, o que pode afetar o desempenho. Ocasionalmente, quando uma aplicação extrai dados através de coleções, a linhagem original ou a origem de uma coluna pode ser perdida. Não sabemos se está a sendo usada e deixamos de a usar na ECS. Geralmente, pode forçar a ECS a trabalhar para uma coluna em falta utilizando a expressão ShowColumns do PowerFx depois de uma referência de coleção ou ao usá-la num controlo.

Use imagens em galerias, tabelas e formulários com cuidado

Use versões de miniatura do Dataverse de imagens para galerias e tabelas. As miniaturas do Dataverse são pequenas, com cerca de 1 kilobyte e são armazenadas inline como parte do registo e são úteis e rápidas para apresentar em controlos que mostram coleções. Todas as outras referências de imagem, incluindo todas as imagens do SharePoint requerem uma chamada separada e não devem ser colocadas numa galeria ou tabela. Coloque imagens que necessitem de uma chamada separada em formulários de detalhes. Considere nunca mostrar uma imagem completa por predefinição. Imagens totalmente detalhadas podem ser úteis e importantes para os utilizadores. No entanto, pode disponibilizar estas imagens aos utilizadores através de uma ação explícita do utilizador, por exemplo, um botão ou navegação para uma página separada. O SharePoint tem uma variedade de imagens de tamanho intermediário que pode usar num formato menor que a imagem completa. O Dataverse tem apenas dois tamanhos: Miniatura e Completo.

Cálculos

Dividir fórmulas com App.formula

A utilização de App.formulas e fórmulas nomeadas pode ajudar com a velocidade de carregamento e navegação de páginas da aplicação porque permite ao Power Fx decidir quando avaliar uma fórmula. Isto significa que não precisa necessariamente de avaliá-lo no OnStart. Além disso, as fórmulas nomeadas geralmente também podem ajudar a acelerar. Principalmente, se tiver um script longo, dividi-lo em fórmulas nomeadas permite cálculos mais eficientes, pois o Power Fx pode agendar o trabalho e isto permite a reutilização. Para mais informações, consulte Fórmulas de aplicações.

Usar Concurrent

Use a função Concurrent para permitir que fórmulas sejam executadas ao mesmo tempo. Escolha cuidadosamente onde Concurrent é usado. Pode fornecer algumas acelerações modestas, mas se estiver a executar itens que dependem uns dos outros, poderá causar problemas de temporização e limitação.

Deferir atualizações significativas para um passo de IU sem bloqueio

Atualizações grandes para uma origem de dados podem demorar um pouco a serem concluídas. Mas os utilizadores esperam que a IU lhes devolva o controlo rapidamente. As tarefas podem ser sequenciais, onde a atualização tem de terminar antes que o utilizador possa realizar outras ações ou assíncronas (a atualização pode terminar separada das ações do utilizador).

Um exemplo de uma tarefa síncrona demorada é confirmar um assento num concerto. Para a maioria das tarefas síncronas demoradas como esta, é comum colocar uma barra de progresso. Na realidade, esta IU bloqueia o utilizador, mas garante que a tarefa é concluída antes que outros elementos da IU sejam atualizados. Esta abordagem pode não funcionar para a sua aplicação. Normalmente, as empresas lidam com passos sequenciais mais longos como um passo de negócio explícito. Recebe aprovação para ir para o passo seguinte através de um sinal do processo de negócio. Um exemplo é uma aprovação. Uma aprovação pode vir rapidamente ou pode ser adiada. Na IU, pode sinalizar que o processo foi concluído de várias maneiras. Pode ativar um botão, mostrar uma mensagem, enviar e-mail ou ativar uma parte da IU, como um item de menu.

Um exemplo de tarefa assíncrona é a conclusão de uma encomenda. Um cliente atualiza uma cesto de encomendas, processa a sua encomenda e, em seguida, faz o pedido de encomenda. Mas têm de acontecer várias atualizações antes que o cliente receba uma data de envio confirmada. Neste exemplo, a data de envio não é algo que possa fornecer imediatamente. , pode adiar esta parte da atualização para um e-mail que será enviado ao cliente posteriormente.

Para tarefas síncronas, geralmente, usará o código no Power Apps para tarefas de bloqueio da IU. Por exemplo, o código espera até obter um valor de devolução e então liberta a barra de progresso. O melhor é minimizar este tipo de situações. Mas para tarefas que usam um passo de negócio explícito ou tarefas assíncronas, é comum usar um serviço externo para concluir a tarefa, como uma ação do Dataverse, um procedimento armazenado ou um fluxo do Power Automate.

Coloque o "ForAll" adequadamente

Se tiver uma expressão com ForAll e Collect parecida com esta:

ForAll(x, Collect(y, { … }))

Então, inverta isto para

Collect(y, ForAll(x, { … }))

No primeiro padrão, qualquer regra dependente na coleção y é notificada sobre alterações e avaliada para cada iteração de x. No segundo padrão, estas regras são avaliadas apenas uma vez.

Considere evitar referências a Gallery.AllItems

Ao trabalhar com o Power Apps, é melhor evitar fazer referência a Gallery.AllItems, a menos que precise de valores do utilizador. Isto porque sempre que AllItems é lido, uma nova tabela de saída é gerada. Em vez disso, use Gallery.AllItemsCount se pretender apenas saber quantos itens estão carregados.

Use Gallery.TemplateSize com cuidado

Para garantir que as galerias de altura flexível são compostas corretamente, é importante definir um tamanho predefinido razoável. Inicialmente, tentamos compor o máximo de linhas possível com base neste valor. Se definir o tamanho predefinido como 0, tentaremos compor tudo, exceto alguns casos extremos. Se estiver a usar uma fórmula, certifique-se de que define um valor mínimo para quando a fórmula pode ser avaliada como 0. Por exemplo, poderia usar Max (20, varFoo + rectBar.Height). Desta forma, se varFoo e rectBar.Height ainda não estiverem disponíveis, usamos, pelo menos, um valor razoável de 20.

Há um atraso de um segundo antes de as alterações serem detetadas, o que permite concluir a digitação, em vez de detetar as alterações para cada digitação.