Sugestões e melhores práticas para melhorar o desempenho das aplicações de tela

Nos artigos anteriores, aprendeu sobre as fases de execução e fluxo de chamadas de dados, origens comuns de desempenho fraco e problemas e resoluções comuns de desempenho em aplicações de tela. Também pode beneficiar seguindo as dicas e as melhores práticas deste artigo para aumentar o desempenho das aplicações que cria.

Limitar ligações de dados

Não ligue a mais de 30 origens de dados a partir da mesma aplicação. As aplicações pedem aos novos utilizadores que iniciem sessão em cada conector, por isso cada conector adicional aumenta o tempo de que a aplicação precisa para iniciar. Durante a execução da aplicação, cada conector necessita de recursos da CPU, memória e largura de banda de rede quando a aplicação pede dados dessa origem.

Pode medir rapidamente o desempenho da sua aplicação ao ativar as Ferramentas de Programação no Microsoft Edge ou no Google Chrome durante a execução da aplicação. É provável que a sua aplicação demore mais de 15 segundos a devolver dados se pedir frequentemente dados de mais de 30 origens de dados, tais como do Microsoft Dataverse, Azure SQL, SharePoint e Excel no OneDrive.

Limitar o número de controlos

Não adicione mais de 500 controlos à mesma aplicação. O Power Apps gera um modelo de objeto de documento HTML para compor cada controlo. Quantos mais controlos adicionar, mais tempo de geração será necessário por parte do Power Apps.

Em alguns casos, pode alcançar o mesmo resultado e fazer com que a aplicação inicie mais rapidamente se utilizar uma galeria em vez de controlos individuais. Para além disso, é aconselhável reduzir o número de tipos de controlo no mesmo ecrã. Alguns controlos (por exemplo, o visualizador de PDF, a tabela de dados e a caixa de combinação) extraem grandes scripts de execução e demoram mais tempo a compor.

Otimizar a propriedade OnStart

Utilize a função ClearCollect para colocar os dados em cache localmente se não forem alterados durante a sessão de utilizador. Além disso, utilize a função Concurrent para carregar as origens de dados em simultâneo; isto poderá reduzir o tempo que uma aplicação precisa para carregar os dados até metade. Mais informações: Função Concurrent no Power Apps

Sem a função Concurrent, a seguinte fórmula carrega as quatro tabelas uma de cada vez:

ClearCollect( Product, '[SalesLT].[Product]' );
ClearCollect( Customer, '[SalesLT].[Customer]' );
ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' );
ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )

Pode confirmar este comportamento nas Ferramentas de Programação Desenvolvimento do seu browser, como mostra a seguinte imagem.

Diagrama a mostrar as quatro tabelas a serem carregadas uma após a outra

Pode incluir a mesma fórmula na função Concurrent para reduzir o tempo geral de que a operação necessita:

Concurrent( 
    ClearCollect( Product, '[SalesLT].[Product]' ),
    ClearCollect( Customer, '[SalesLT].[Customer]' ),
    ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' ),
    ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' ))

Com esta alteração, a aplicação obtém as tabelas em paralelo, como mostra a imagem seguinte.

Diagrama a mostrar as quatro tabelas a serem carregadas em simultâneo

Nota

Para obter mais informações sobre os problemas de desempenho e resoluções relacionadas com o OnStart, leia Evento OnStart necessita de ser afinado.

Colocar dados de pesquisa em cache

Utilize a função Set para colocar os dados de tabelas de pesquisa em cache localmente para evitar obter dados repetidamente da origem. Esta técnica otimiza o desempenho se for provável que os dados não mudem durante uma sessão. Tal como mostra o seguinte exemplo, os dados são obtidos da origem uma vez e, em seguida, são referenciados localmente até o utilizador fechar a aplicação.

Set(CustomerOrder, Lookup(Order, id = “123-45-6789”));
Set(CustomerName, CustomerOrder.Name);
Set(CustomerAddress, CustomerOrder.Address);
Set(CustomerEmail, CustomerOrder.Email);
Set(CustomerPhone, CustomerOrder.Phone);

Este método é mais útil para dados como informações de contacto, valores predefinidos ou informações do utilizador que não mudam frequentemente. Pode também utilizar esta técnica com as funções Defaults e User.

Evitar a dependência de controlos entre ecrãs

Para melhorar o desempenho, os ecrãs de uma aplicação são carregados na memória apenas à medida que são necessários. Esta otimização pode ser adulterada se, por exemplo, o ecrã 1 estiver carregado e uma das suas fórmulas utilizar a propriedade de um controlo a partir do ecrã 2. Agora o ecrã 2 tem de ser carregado para preencher a dependência antes que o ecrã 1 possa ser apresentado. Imagine que o ecrã 2 tem uma dependência no ecrã 3, que tem outra dependência no ecrã 4, e assim sucessivamente. Esta cadeia de dependências pode fazer com que vários ecrãs sejam carregados.

Por esta razão, evite as dependências de fórmulas entre ecrãs. Em alguns casos, pode utilizar uma variável global ou uma coleção para partilhar informações entre ecrãs.

Existe uma exceção: no exemplo anterior, imagine que a única forma de apresentar o ecrã 1 é navegar do ecrã 2. Em seguida, o ecrã 2 já terá sido carregado na memória quando o ecrã 1 estiver a ser carregado. Não é necessário nenhum trabalho extra para cumprir a dependência do ecrã 2 e, portanto, não há impacto no desempenho.

Utilizar a delegação

Sempre que possível, utilize funções que delegam o processamento de dados à origem de dados em vez de obter dados para que o dispositivo local os processe. Se uma aplicação tiver de processar dados localmente, a operação exigirá muito mais poder de processamento, memória e largura de banda de rede, especialmente se o conjunto de dados for grande.

Dica

Para saber mais sobre funções delegáveis suportadas por conectores específicos, vá para a documentação do conector.

Para um exemplo de funções delegáveis, considere uma coluna de ID definida com o tipo de dados Número numa lista do SharePoint. As fórmulas no exemplo seguinte irão devolver os resultados como esperado. No entanto, a primeira fórmula não é delegável enquanto a segunda é delegável.

Fórmula Delegável?
Filter ('SharePoint list data source', ID = 123 ) Sim
Filter(`SharePoint list data source', ID ="123") No

Como assumimos que a coluna ID no SharePoint está definida com o tipo de dados Número, o valor do lado direito deve ser uma variável numérica, em vez de uma variável de cadeia. Caso contrário, este erro de correspondência poderá acionar a fórmula para ser não delegável.

A utilização de funções não delegáveis e os limites de linha de dados inadequado para consultas não delegáveis pode ter um efeito adverso no desempenho da aplicação. Mais informações: Noções básicas sobre delegação numa aplicação de tela

Utilizar o Carregamento Atrasado

Ative a funcionalidade experimental para carga atrasada se a sua aplicação tiver mais de 10 ecrãs, se não tiver regras e se tiver muitos controlos em múltiplos ecrãs diretamente vinculados à origem de dados. Se criar este tipo de aplicação e não ativar esta funcionalidade, o desempenho da aplicação poderá diminuir porque os controlos em todos os ecrãs têm de ser preenchidos, mesmo nos ecrãs que não estão abertos. Para além disso, todos os ecrãs da aplicação têm de ser atualizados sempre que a origem de dados for alterada, por exemplo, quando o utilizador adiciona um registo.

Trabalhar com grandes conjuntos de dados

Utilize origens de dados e fórmulas que possam ser delegadas para que as suas aplicações continuem a ter um bom desempenho, permitindo sempre que os utilizadores acedam a todas as informações necessárias, e evite atingir o limite da linha de dados, ou seja, 2000, para consultas não delegáveis. Para colunas de registo de dados nas quais os utilizadores podem pesquisar, filtrar ou ordenar dados, utilize índices em colunas, como descrito pelas origens de dados, tais como SQL Server ou SharePoint.

Nota

Para obter informações adicionais sobre como grandes conjuntos de dados podem causar problemas de desempenho comuns em diferentes plataformas, leia Grandes conjuntos de dados a carregar lentamente em diferentes plataformas.

Voltar a publicar aplicações regularmente

Os criadores são encorajados a publicar as respetivas aplicações regularmente. Como a plataforma do Power Apps é continuamente otimizada e implementada, a sua aplicação é regenerada dentro das mais recentes otimizações da plataforma quando volta a publicá-la.

Evitar repetir a mesma fórmula em vários locais

Se várias propriedades executarem a mesma fórmula (especialmente se forem complexas), considere defini-la uma vez e, em seguida, referenciar a saída da primeira propriedade nas próximas. Por exemplo, não defina a propriedade DisplayMode dos controlos A, B, C, D e E com a mesma fórmula complexa. Em vez disso, defina a propriedade de DisplayMode de A para a fórmula complexa, defina a propriedade DisplayMode de B para o resultado da propriedade de DisplayMode de A, e assim sucessivamente para C, D e E.

Ativar DelayOutput em todos os controlos de entrada de texto

Se tiver várias fórmulas ou regras que referenciam o valor de um controlo de Entrada de texto, defina a propriedade de DelayedOutput desse controlo como true. A propriedade Text desse controlo só será atualizada depois de terem parado os batimentos de tecla introduzidos em rápida sucessão. As fórmulas ou regras não são executadas tantas vezes e o desempenho da aplicação melhora.

Evite utilizar Form.Updates em regras e fórmulas

Se referenciar um valor de entrada de utilizador numa regra ou numa fórmula utilizando uma variável Form.Updates, itera sobre todos os cartões de dados do formulário e cria um registo de cada vez. Para tornar a sua aplicação mais eficiente, referencie o valor diretamente a partir do cartão de dados ou do valor de controlo.

Dependendo da configuração, a Galeria pode demorar mais tempo a compor as linhas visíveis. Há duas formas de melhorar o desempenho.

  • Simplificar o modelo. Por exemplo, considere reduzir o número de controlos, referências a pesquisas.
  • Galerias com modelos complexos podem beneficiar de ter DelayItemLoading definido para true e LoadingSpinner definido para LoadingSpinner.Controls. Esta mudança melhorará a experiência percebida quando o tempo de composição for mais longo. DelayItemLoading também adiará a composição de modelos, o que permitirá que o resto do ecrã seja composto mais depressa, uma vez que tanto o ecrã como a galeria não estão a competir por recursos.

Passos seguintes

Reveja os padrões de codificação para maximizar o desempenho da aplicação e manter as aplicações mais fáceis de manter.

Consulte também

Compreender as fases de execução e o fluxo de chamada de dados das aplicações de tela
Problemas comuns e resoluções de desempenho de aplicações de tela
Origens comuns de desempenho fraco para uma aplicação de tela
Problemas comuns e resoluções para o Power Apps
Resolução de problemas de arranque para Power Apps