Trabalhar com dados
Objetivos de aprendizagem
Após concluir esta unidade, você estará apto a:
- Explicar os benefícios de otimizar a recuperação de dados.
- Descrever as vantagens de armazenar dados em cache.
Abordar desafios de desempenho únicos
Os componentes Web do Lightning são executados no lado do cliente, em uma única página, onde são criados e destruídos conforme necessário, juntamente com outros componentes que trabalham com os mesmos dados. Isso significa que os componentes Web do Lightning podem apresentar desafios de desempenho específicos para os desenvolvedores. Vamos analisar como essas caraterísticas afetam o desempenho e revisar as melhores práticas para otimizar o desempenho dos componentes do Lightning.
Primeiro, otimizar a recuperação de dados e o armazenamento em cache.
Otimizar a recuperação de dados
Um componente sem dados não é um componente muito útil. Com os componentes Web do Lightning, há várias opções disponíveis para recuperar dados do servidor. Veja a seguir algumas formas de otimizar viagens de ida e volta do servidor.
- Use o Lightning Data Service ou dados em cache sempre que possível.
- Antes de fazer uma chamada para o servidor, garanta que não haja outra opção para a obtenção dos dados.
- Sempre que apropriado, avalie a possibilidade de transmitir dados entre componentes usando atributos, eventos ou métodos em vez de recuperar os mesmos dados em componentes diferentes.
- Se vários componentes de uma determinada página obtiverem os mesmos dados, considere a criação de um componente de serviço que não tenha elementos da IU e que possa consultar os dados uma vez para poder transmiti-los para outros componentes.
- Quando fizer uma chamada para o servidor, limite os campos e as linhas do conjunto de resultados.
- SELECIONE apenas os campos que você precisa.
- Defina um LIMITE na consulta para não retornar um número excessivo de linhas de uma só vez.
- Implemente a paginação para consultas que possam ter grandes conjuntos de resultados.
- Carregue lentamente os dados que são acessados ocasionalmente. Não carregue previamente dados que o usuário talvez nunca precise. Coloque os componentes menos acessados em uma guia secundária que, talvez, o usuário nunca clicará.
- Não faça uma chamada para o servidor para filtrar ou classificar dados que você já tem no lado do cliente, a menos que esteja trabalhando com dados paginados. As matrizes do JavaScript têm funções incorporadas para fazer coisas como classificar, filtrar e localizar valores.
- Em vez de usar o Apex, aproveite o Lightning Data Service e a API da IU para recuperar registros, e também recuperar modos de exibição de lista, metadados e valores da lista de opções.
- Ao usar o adaptador de conexão
getRecord
(parte da API da IU), solicite apenas os campos que o componente exige. Seja explícito. Por exemplo, se o componente exigir um campo, solicite apenas esse campo@wire(getRecord, { recordId:'$recordId', fields:['Contact.Name'] });
- Não solicite um registro por layout, a não ser que você realmente precise de todos esses dados. Os layouts são uma coleção de campos gerenciados pelo administrador e podem mudar a qualquer momento. Os layouts são muito caros porque geralmente contêm centenas de campos.
@wire(getRecord, { recordId:'$recordId', layoutTypes:['Full'] });
Melhorar o armazenamento de dados em cache
A composição de aplicativos é uma forma eficaz de criar aplicativos por meio da reunião de componentes independentes. No entanto, sem um planeamento adequado, a natureza autônoma dos componentes reunidos pode ter um impacto adverso no desempenho. Por exemplo, se todos os componentes criados fizerem suas próprias chamadas isoladas para o servidor para recuperar os dados necessários, haverá muitas chamadas para o servidor. É mais eficiente fazer uma única chamada maior do que fazer muitas chamadas menores.
O armazenamento em cache de dados no lado do cliente melhora o desempenho com o compartilhamento de dados entre os componentes, o que reduz significativamente o número de viagens de ida e volta ao servidor. O LWC tem dois mecanismos incorporados para o armazenamento em cache no lado do cliente: O Lightning Data Service e métodos do Apex que podem ser armazenados em cache. Se nenhum deles for adequado para seus objetivos, você também pode implementar uma solução de cache personalizada.
Lightning Data Service
O Lightning Data Service apresenta uma abordagem de registros gerenciados: você não é responsável por escrever a lógica de acesso dos dados do Apex. Ele também trata da segurança para você, verificando a acessibilidade de registros e campos. A estrutura é responsável pelo gerenciamento de registros. Isso inclui buscá-los no servidor quando solicitados pela primeira vez, armazená-los em um cache de cliente altamente eficiente, compartilhá-los entre todos os componentes que os solicitam e enviar alterações para o servidor e entradas de cache invalidadas quando os dados dependentes do Salesforce são alterados.
Se outro componente precisar de campos adicionais posteriormente, esses campos serão carregados de forma transparente e adicionados ao registro no cache. Ao contrário das ações armazenáveis que podem armazenar em cache qualquer tipo de resposta retornada por um método do Apex, o Lightning Data Service armazena em cache muitos tipos de dados da API da interface de usuário: registros, esquemas, metadados, metadados de layout, listas de registros, metadados de lista e assim por diante. O Lightning Data Service também melhora a consistência da interface de usuário: quando um componente atualiza um registro, todos os outros componentes que usam esse registro são notificados e, na maioria dos casos, atualizados automaticamente.
Métodos do Apex armazenáveis em cache
Se não for possível usar o Lightning Data Service, use o Apex. Um método do Apex armazenável em cache é uma ação do servidor cuja resposta é armazenada no cache do cliente para que as solicitações subsequentes para o mesmo método do servidor com o mesmo conjunto de argumentos possam ser acessadas a partir desse cache em vez do servidor.
Os métodos do Apex armazenáveis em cache permitem o acesso a dados utilizando uma abordagem tradicional de chamada de procedimento remoto (RPC). Você implementa alguma lógica no Apex que é exposta como um método invocável remotamente. Os métodos do Apex armazenáveis em cache permitem que você armazene praticamente qualquer coisa no cache, independentemente dos retornos de chamadas do método do servidor. A diretriz geral é armazenar em cache (marcar como armazenável) qualquer ação que seja idempotente e não mutante.
É fácil criar um método do Apex armazenável em cache. Basta anotar seus métodos do Apex com @AuraEnabled(cacheable=true)
.
Na versão 55.0 e superior da API, você pode usar a anotação @AuraEnabled(scope='global')
juntamente com @AuraEnabled(cacheable=true)
para permitir que os métodos do Apex sejam armazenados em cache em um cache global.
@AuraEnabled(scope='global' cacheable=true) public static someObject getIceCream(String flavor) { // your code here }
Na próxima unidade, você verá como exibir os dados somente quando necessário usando a divulgação progressiva e a renderização condicional.
Recursos
- Guia de desenvolvimento de componentes Web do Lightning: getRecord
- Guia de desenvolvimento de componentes Web do Lightning: getRecordUi
- Guia de desenvolvimento de componentes Web do Lightning: Diretrizes de dados
- Blog de desenvolvedores: Modularizar código em componentes do Lightning
- Trailhead: Componentes Web do Lightning e dados do Salesforce
- Blog de desenvolvedores: Projetar páginas do Lightning para escalar
- Guia de desenvolvimento de componentes Web do Lightning: Chamar métodos do Apex
- Guia do desenvolvedor do Apex: Anotação AuraEnabled