Aprimorar o desempenho com fontes de dados
Na unidade anterior, você aprendeu que as fontes de dados costumam ser o principal motivo do desempenho lento em seu aplicativo. Nesta unidade, você aprenderá algumas das técnicas comuns que pode aplicar para mitigar esses problemas de desempenho.
Usar coleções para armazenar dados em cache
Frequentemente, no aplicativo, você consultará os mesmos dados repetidas vezes, como ao obter as listas de departamentos para os menus suspensos. Nesses casos, é possível consultar os dados uma vez e reutilizá-los em todo o aplicativo. Isso reduz a repetição de chamadas à fonte de dados pela rede. Veja um exemplo desse processo a seguir.
No aplicativo, há várias telas em que você fornece um menu suspenso para selecionar o departamento. A lista de departamentos é mantida no Microsoft Dataverse em uma tabela chamada DepartmentList. Em cada instância do menu, você usa a fórmula a seguir.
Filter(DepartmentList, Status = "Active")
Isso funciona e é executado sem problemas.
Ao concluir o aplicativo, você percebe que está consultando a tabela DepartmentList várias vezes, mesmo se tratando de informações estáticas. É possível modificar o aplicativo para criar uma coleção com a propriedade OnStart, que armazena as informações usando a fórmula a seguir.
ClearCollect(colDepartmentList, Filter(DepartmentList, Status = "Active"))
Agora que você armazenou essas informações, é possível alterar a propriedade Itens dos controles suspensos para colDepartmentList em vez de Filter(DepartmentList, Status = "Active"). Essas pequenas alterações se somam para aumentar o desempenho do aplicativo. Além disso, conforme você se familiariza com essa técnica, é possível criar um aplicativo dessa maneira desde o início. Assim, você reduz o número de fórmulas que precisa escrever e manter.
Fique atento à delegação
Lembre-se de que a função Collect não é delegável. Isso significa que, por padrão, somente os primeiros 500 itens serão retornados da fonte de dados e armazenados na coleção. Planeje-se para essa limitação ao implementar o uso de coleções no aplicativo.
A delegação também afeta o desempenho
Quando você aprendeu sobre a delegação, concentrou-se em retornar o número correto de linhas da fonte de dados. Também é importante lembrar que, especialmente em aplicativos móveis, a delegação pode afetar o desempenho.
Quando uma fórmula delega à fonte de dados, todo o processamento é feito pela fonte de dados. Somente as linhas correspondentes serão retornadas pela rede para o aplicativo que será exibido. Se uma função não é delegável, é comum alterar o limite de delegação para 2.000 linhas. Isso significa que as primeiras 2.000 linhas serão baixadas pela rede e processadas localmente. Em cenários em que a conexão de celular é lenta ou é usado um dispositivo móvel mais limitado, esse processamento pode levar um tempo considerável, causando uma experiência ruim para o usuário.
Tanto quanto possível, tente usar somente funções delegáveis. Se a função não for delegável, planeje o impacto para o usuário final.
Usar a função Concurrent para carregar várias fontes de dados
Anteriormente, você aprendeu a usar coleções para armazenar dados em cache no aplicativo. Ao implementar essa funcionalidade no aplicativo, é comum carregar várias coleções quando o aplicativo é iniciado. A propriedade OnStart pode ser semelhante ao exemplo a seguir.
ClearCollect(colDepartmentList, Filter(DepartmentList, Status = "Active"));
ClearCollect(colCompanyList, CompanyList);
ClearCollect(colRegions, RegionList)
Nesse exemplo, você criará três coleções, mas cada uma será processada por vez. Portanto, se cada uma levar três segundos para ser processada, o usuário precisará esperar nove segundos para o aplicativo ser iniciado.
A função Concurrent permite processar todas essas chamadas ao mesmo tempo. É possível alterar o código como indicado a seguir.
Concurrent(
ClearCollect(colDepartmentList, Filter(DepartmentList, Status = "Active")),
ClearCollect(colCompanyList, CompanyList),
ClearCollect(colRegions, RegionList)
)
Agora, as três fórmulas são executadas ao mesmo tempo, reduzindo o tempo de carregamento para três segundos. A função Concurrent é uma ótima forma de evitar grandes atrasos de chamadas assíncronas.
Recursos experimentais e de versão preliminar
No Power Apps, há outros recursos avançados que podem ser implementados no aplicativo. É possível acessá-los selecionando Arquivo na barra de menus e escolhendo Configurações do aplicativo e Configurações avançadas. A lista de opções exibida está sempre mudando, mas, geralmente, há um ou mais recursos relacionados ao desempenho.
Versão prévia dos recursos
A versão prévia do recurso consiste em recursos que foram testados e serão lançados em breve. Eles estarão disponíveis para todos os aplicativos em breve. Testar e entender esses recursos ajuda você a se preparar para quando eles se tornarem o padrão. A maioria deles é habilitada por padrão nos novos aplicativos.
Um exemplo atual de versão prévia do recurso que ajuda a aumentar o desempenho é Otimizar para dispositivos. Esse recurso permite que os criadores criem aplicativos nativos impressionantes para usuários móveis com telas otimizadas para dispositivos que usam elementos nativos da interface do usuário, em vez de renderizar dentro da visualização da Web.
Recursos experimentais
Os recursos experimentais são aqueles que podem ser alterados, interrompidos ou removidos a qualquer momento. Eles ficam desativados por padrão. Às vezes, é possível encontrar recursos de desempenho aqui também. Portanto, vale a pena conferir. No entanto, lembre-se de que há riscos ao incorporá-los a aplicativos de produção, pois eles podem evoluir, ser completamente alterados ou desaparecer.
Ocasionalmente, você poderá ver um recurso experimental relacionado ao desempenho do aplicativo. Você sempre pode habilitá-lo e testá-lo e, depois, voltar para Configurações para desabilitá-lo.
OnStart versus OnVisible
OnStart e OnVisible fazem parte do kit de ferramentas para criar ótimos aplicativos. No entanto, quanto ao desempenho, eles podem ter um impacto significativo.
OnStart: é uma propriedade no nível de aplicativo. As fórmulas dessa propriedade são executadas uma vez (quando o aplicativo é iniciado). Depois, nunca mais são executadas. Todas as fórmulas devem ser processadas antes que o aplicativo seja aberto. Isso geralmente é usado para inicializar dados de que você precisará em todo o aplicativo.
OnVisible: essa é uma propriedade por tela. As fórmulas dessa propriedade são executadas sempre que um usuário navega para a tela. A tela é renderizada antes da conclusão do processamento da fórmula.
Da perspectiva do desempenho, a principal consideração é quando o código é executado. Uma vez, quando o aplicativo é iniciado ou sempre que uma tela é exibida. A coleção de departamentos deste módulo é um ótimo exemplo. O código é carregado na propriedade OnStart do aplicativo. Isso significa que ele foi carregado uma vez e fica sempre disponível. Se tiver movido o código de OnStart para OnVisible, você perderá a vantagem da coleção. Se a fórmula estiver na propriedade OnVisible, sempre que o usuário navegar para a tela, a fonte de dados será consultada. Nesse caso, a execução seria tão boa quanto ao deixar o código no menu suspenso.
Isso não significa que você não deva usar OnVisible. OnVisible é ótima para fórmulas que pertencem à tela atual que você precisa executar. Além disso, OnVisible não causa bloqueio. Assim, os usuários não precisam esperar a fórmula terminar para exibir a tela, o que reduz a quantidade de que o usuário precisa para exibir uma tela em branco.
Na maioria dos aplicativos, use uma combinação de OnStart e OnVisible para oferecer uma experiência otimizada.
Resumo
Como você pode ver, há várias opções para criar um aplicativo e interagir com fontes de dados. A lista desta unidade está longe de ser completa. As diretrizes aqui são para orientá-lo em direção a um melhor desempenho, mas seus resultados podem variar. Ao começar a aplicar essas técnicas aos aplicativos, você descobrirá o que funciona melhor para você e seu ambiente.
Na próxima unidade, você aprenderá sobre técnicas de teste e solução de problemas.