Dicas e práticas recomendadas para melhorar o desempenho de aplicativos de tela

Nos artigos anteriores, você aprendeu sobre as fases de execução e fluxo de chamada de dados, fontes comuns de desempenho lento e problemas e resoluções de desempenho comuns em aplicativos de tela. Você também pode se beneficiar seguindo as dicas e práticas recomendadas neste artigo para aumentar o desempenho dos aplicativos que você criar.

Limitar conexões de dados

Não adicione mais de 30 conexões em um aplicativo. Os aplicativos solicitam que os novos usuários entrem em cada conector, portanto, cada conector adicional aumenta o tempo necessário para o aplicativo ser iniciado. Conforme o aplicativo é executado, cada conector exige recursos de CPU, memória e largura de banda de rede quando o aplicativo solicita dados dessa fonte.

Você pode medir rapidamente o desempenho do aplicativo habilitando as Ferramentas para Desenvolvedores no Microsoft Edge ou no Google Chrome ao executar o aplicativo. É mais provável que seu aplicativo demore mais de 15 segundos para retornar dados se solicitar dados com frequência de mais de 30 conexões. Cada conexão adicionada é contada individualmente neste limite, independentemente do tipo de fonte de dados conectado — como Microsoft Dataverse ou tabelas do SQL Server ou listas criadas usando as Listas da Microsoft.

Limitar o número de controles

Não adicione mais de 500 controles em um aplicativo. O Power Apps gera um modelo de objeto de documento HTML para renderizar cada controle. Quanto mais controles você adicionar, maior será o tempo de geração necessário para o Power Apps.

Em alguns casos, você pode obter o mesmo resultado e fazer com que o aplicativo seja iniciado com mais rapidez usando uma galeria em vez de controles individuais. Além disso, convém reduzir o número de tipos de controle na mesma tela. Alguns controles (como Visualizador de PDF, Tabela de dados e Caixa de combinação) extraem scripts de execução grandes e levam mais tempo para ser renderizados.

Otimizar a propriedade OnStart

Use a função ClearCollect para armazenar dados em cache localmente, se eles não são forem alterados durante a sessão do usuário. Além disso, use a função Concurrent para carregar fontes de dados simultaneamente; isso pode reduzir pela metade o tempo que um aplicativo precisa para carregar dados. Mais informações: Função Concurrent no Power Apps

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

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

Você pode confirmar esse comportamento nas Ferramentas para Desenvolvedores do seu navegador, conforme mostrado na imagem a seguir.

Diagrama mostrando as quatro tabelas sendo carregadas uma após a outra.

Você pode colocar a mesma fórmula na função Concurrent para reduzir o tempo total necessário para a operação:

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

Com essa alteração, o aplicativo busca as tabelas em paralelo, conforme mostrado na imagem a seguir.

Diagrama mostrando as quatro tabelas sendo carregadas simultaneamente.

Observação

Para obter mais informações sobre os problemas de desempenho e resoluções relacionadas ao OnStart, leia O evento OnStart precisa de ajuste.

Dica

É recomendável usar a propriedade App.StartScreen, pois ela simplifica o lançamento do aplicativo e aumenta o desempenho dele.

Armazenar dados de pesquisa em cache

Use a função Set para armazenar em cache os dados de tabelas de pesquisa localmente para evitar a repetição da recuperação de dados da fonte. Essa técnica otimiza o desempenho, se os dados provavelmente não forem alterados durante uma sessão. Conforme mostrado no exemplo a seguir, os dados são recuperados da fonte de uma vez e, em seguida, referenciados localmente até que o usuário feche o aplicativo.

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 contato, valores padrão ou informações do usuário que não mudam com frequência. Você também pode usar essa técnica com as funções Defaults e User.

Evitar a dependência de controles entre telas

Para melhorar o desempenho, as telas de um aplicativo são carregadas na memória apenas quando necessárias. Essa otimização pode ser prejudicada se, por exemplo, a tela 1 for carregada e uma de suas fórmulas utilizar a propriedade de um controle da tela 2. Agora a tela 2 deve ser carregada para cumprir a dependência antes que a tela 1 possa ser exibida. Imagine que a tela 2 tem uma dependência na tela 3, que tem outra dependência na tela 4 e assim por diante. Essa cadeia de dependência pode fazer com que muitas telas sejam carregadas.

Por esse motivo, evite dependências de fórmula entre telas. Em alguns casos, você pode usar uma variável global ou coleção para compartilhar informações entre telas.

Há uma exceção: no exemplo anterior, imagine que a única maneira de exibir a tela 1 seja navegando na tela 2. Então a tela 2 já terá sido carregada na memória quando a tela 1 for carregada. Nenhum trabalho extra é necessário para cumprir a dependência da tela 2 e, portanto, não há impacto no desempenho.

Usar delegação

Sempre que possível, use as funções que delegam o processamento de dados à fonte de dados, em vez de recuperar dados para o dispositivo local para processamento. Se o aplicativo precisar processar dados localmente, a operação exigirá muito mais poder de processamento, memória e largura de banda de rede, principalmente quando o conjunto de dados for grande.

Dica

Para saber mais sobre as funções delegáveis compatíveis com conectores específicos, consulte a documentação do conector.

Para ver um exemplo de funções delegáveis, considere uma coluna de ID definida como o tipo de dados Número em uma lista criada usando as Listas da Microsoft. As fórmulas no exemplo a seguir retornarão os resultados esperados. No entanto, a primeira fórmula é delegável, enquanto a segunda não é.

Fórmula Delegável?
Filter ('List data source', ID = 123 ) Sim
Filter(`List data source', ID ="123") Não

Como supomos que a coluna ID no SharePoint é 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 de caracteres. Caso contrário, essa incompatibilidade pode fazer com que a fórmula não seja delegável.

O uso de funções não delegáveis e limites de linha de dados inadequado para consultas não delegáveis pode ter um efeito adverso no desempenho do aplicativo. Mais informações: Entender a delegação em um aplicativo de tela

Usar Carga Atrasada

Habilite a versão prévia do recurso de carga atrasada se o aplicativo tiver mais de 10 telas, nenhuma regra e muitos controles em várias telas associados diretamente à fonte de dados. Se você criar esse tipo de aplicativo e não habilitar esse recurso, o desempenho do aplicativo poderá ser prejudicado porque os controles em todas as telas precisarão ser preenchidos até mesmo nas telas que não forem abertas. Além disso, todas as telas do aplicativo precisarão ser atualizadas sempre que a fonte de dados for alterada, como quando o usuário adiciona um registro.

Trabalhando com grandes conjuntos de dados

Use fontes de dados e fórmulas que podem ser delegadas para manter a boa execução dos aplicativos enquanto os usuários podem acessar todas as informações necessárias e evitar atingir o limite de 2000 linhas de dados para consultas não delegáveis. Para colunas de registro de dados nas quais os usuários podem pesquisar, filtrar ou classificar dados, use índices nas colunas conforme descrito pelas fontes de dados, tal como Servidor SQL ou SharePoint.

Observação

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

Republicar aplicativos regularmente

Os criadores são incentivados a publicar seus aplicativos regularmente. Como a plataforma Power Apps é continuamente otimizada e implantada, seu aplicativo é regenerado com as mais recentes otimizações de plataforma quando você o publica novamente.

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

Se várias propriedades executam a mesma fórmula (especialmente se for complexa), configure-a uma vez e, em seguida, referencie a saída da primeira propriedade nas subsequentes. Por exemplo, não defina a propriedade DisplayMode dos controles A, B, C, D e E para a mesma fórmula complexa. Em vez disso, defina a propriedade DisplayMode de A para a fórmula complexa, defina a propriedade DisplayMode de B para o resultado da propriedade DisplayMode de A, e assim por diante para C, D e E.

Habilitar DelayOutput em todos os controles Entrada de texto

Se você tiver várias fórmulas ou regras que façam referência ao valor de um controle Entrada de texto, defina a propriedade DelayedOutput desse controle como true. A propriedade Texto desse controle será atualizada somente depois que os pressionamentos de tecla feitos em sucessão rápida forem interrompidos. As fórmulas ou regras não serão executadas tantas vezes e o desempenho do aplicativo melhorará.

Evite usar Form.Updates em regras e fórmulas

Se você fizer referência a um valor de entrada do usuário em uma regra ou fórmula usando uma variável Form.Updates, ela itera sobre todos os cartões de dados do formulário e cria um registro a cada vez. Para tornar seu aplicativo mais eficiente, faça referência ao valor diretamente do cartão de dados ou do valor de controle.

Usar o controle giratório DelayItemLoading e Loading para melhorar o desempenho na Galeria

Dependendo da configuração, a Galeria pode demorar mais para renderizar as linhas visíveis. Existem algumas maneiras de melhorar o desempenho.

  • Simplifique o modelo. Por exemplo, considere reduzir o número de controles, referências a pesquisas.
  • Galerias com modelos complexos podem se beneficiar de ter DelayItemLoading definido como true e LoadingSpinner definido como LoadingSpinner.Controls. Essa mudança melhorará a experiência percebida quando o tempo de renderização for maior. DelayItemLoading também adiará a renderização de modelos, o que permitirá que o restante da tela seja renderizado mais rapidamente, pois a tela e a galeria não estão competindo por recursos.

Habilitar o pré-carregamento do aplicativo para desempenho aprimorado

Opcionalmente, você pode pré-carregar seu aplicativo para aumentar o desempenho.

  1. Entre no Power Apps e então selecione Aplicativos no menu.

  2. Selecione Mais ações (...) para o aplicativo que você deseja compartilhar e então selecione Configurações.

  3. No painel Configurações, alterne Pré-carregar aplicativo para desempenho aprimorado como Sim. O aplicativo será pré-carregado.

Pré-carregar o aplicativo para melhorar o desempenho.

  1. Para que as alterações entrem em vigor para aplicativos incorporados ao Teams, remova e adicione seu aplicativo ao Teams novamente.

    Observação

    Isso torna os ativos de aplicativo compilados acessíveis por meio de pontos de extremidade não autenticados para permitir o carregamento antes da autenticação. No entanto, os usuários ainda podem usar seu aplicativo apenas para acessar dados por meio de conectores somente após a conclusão da autenticação e autorização. Esse comportamento garante que os dados que um aplicativo recupera de fontes de dados não estarão disponíveis para usuários não autorizados. Os ativos do aplicativo compilado incluem uma coleção de arquivos JavaScript contendo texto criado em controles de aplicativos (como controles PCF), ativos de mídia (como imagens), o nome do aplicativo e a URL do ambiente em que o aplicativo reside.

    Em geral, os aplicativos devem recuperar mídias e informações de fontes de dados, por meio de conexões. Se a mídia e as informações precisarem ser adicionadas ao aplicativo, sem vir de uma conexão, e forem consideradas confidenciais, convém desabilitar essa configuração. Observe que desabilitar essa configuração fará com que os usuários esperem um pouco mais para acessar um aplicativo.

Dados do aplicativo armazenados em seu dispositivo

Para permitir que os usuários recuperem os detalhes do aplicativo mais rapidamente quando o aplicativo é inicializado, determinados dados serão armazenados localmente no seu dispositivo, no cache do navegador. As informações armazenadas incluem detalhes do aplicativo, do ambiente e da conexão. Esses dados permanecerão armazenados no navegador com base nos limites de armazenamento de cada navegador. Para limpar os dados armazenados, consulte as instruções para cada navegador.

Próximas etapas

Analise os padrões de codificação para maximizar o desempenho do aplicativo e facilitar a manutenção dele.

Confira também

Entender as fases de execução de aplicativos de tela e o fluxo de chamada de dados
Problemas comuns de desempenho e resoluções para aplicativos de tela
Fontes comuns de desempenho lento para um aplicativo de tela
Problemas comuns e soluções do Power Apps
Solucionando problemas de inicialização do Power Apps

Observação

Você pode nos falar mais sobre suas preferências de idioma para documentação? Faça uma pesquisa rápida. (Observe que esta pesquisa está em inglês)

A pesquisa levará cerca de sete minutos. Nenhum dado pessoal é coletado (política de privacidade).