Trabajar con datos
Objetivos de aprendizaje
Después de completar esta unidad, podrá:
- Explicar los beneficios de la optimización de la recuperación de datos.
- Describir las ventajas de almacenar datos en la memoria caché.
Abordar desafíos de desempeño únicos
Los componentes web Lightning se ejecutan del lado del cliente, en una sola página, donde se crean y se destruyen según sea necesario, junto con otros componentes que funcionan con los mismos datos. Esto significa que los componentes web Lightning pueden presentar desafíos de desempeño únicos para los desarrolladores. Analicemos cómo afectan estas características al desempeño y revisemos las prácticas recomendadas que pueden optimizar el desempeño de sus componentes Lightning.
Primero, la optimización de la recuperación de datos y el almacenamiento de datos en la memoria caché.
Optimizar la recuperación de datos
Un componente sin datos no es un componente muy útil. Con los componentes web Lightning, hay varias opciones disponibles para recuperar datos del servidor. Estas son algunas maneras de optimizar los recorridos de ida y vuelta del servidor.
- Use Lightning Data Service o los datos almacenados en la memoria caché siempre que sea posible.
- Antes de realizar una llamada al servidor, asegúrese de que no haya otra opción para obtener los datos.
- Cuando sea oportuno, considere la opción de pasar los datos entre componentes mediante el uso de atributos, eventos o métodos en lugar de recuperar los mismos datos en distintos componentes.
- Si hay varios componentes que recuperan los mismos datos en una página determinada, considere la opción de crear un componente de servicio que no tenga elementos de IU y que pueda consultar datos una vez, de manera que pueda pasar los datos a otros componentes.
- Cuando realice una llamada al servidor, limite los campos y las filas del conjunto de resultados.
- SELECCIONE únicamente los campos que necesita.
- Fije un LÍMITE para la consulta, no devuelva grandes cantidades de filas de una vez.
- Implemente la paginación cuando exista la posibilidad de que las consultas tengan grandes conjuntos de resultados.
- La carga diferida accede ocasionalmente a los datos. No precargue datos que posiblemente el usuario nunca necesitará; coloque los componentes a los que menos se accede en una ficha secundaria en la que probablemente el usuario no hará clic.
- No realice una llamada al servidor para filtrar u ordenar datos que ya tiene del lado del cliente, a menos que esté trabajando con datos paginados. Las matrices de JavaScript tienen funciones integradas para realizar tareas como clasificar, filtrar y encontrar valores.
- En lugar de usar Apex, aproveche Lightning Data Service y la API de la IU para recuperar registros (y vistas de lista, metadatos y valores de lista de selección).
- Cuando use el adaptador de red
getRecord
(parte de la API de la IU), solicite solo los campos que requiere el componente. Sea explícito. Por ejemplo, si el componente requiere un campo, solicite solo ese campo.@wire(getRecord, { recordId:'$recordId', fields:['Contact.Name'] });
- No solicite un registro por formato, a menos que realmente necesite todos los datos. Los formatos son una recopilación de campos gestionados por el administrador y pueden cambiar en cualquier momento. Los formatos son muy costosos porque por lo general contienen cientos de campos.
@wire(getRecord, { recordId:'$recordId', layoutTypes:['Full'] });
Mejorar el almacenamiento de datos en la memoria caché
La composición de la aplicación es una forma muy efectiva de crear aplicaciones mediante el ensamble de componentes independientes. Sin embargo, sin una planificación adecuada, la naturaleza autónoma de los componentes que ensamble puede tener un impacto negativo en el desempeño. Por ejemplo, si todos los componentes que crea hacen sus propias llamadas aisladas al servidor para recuperar los datos que necesitan, tendrá muchas llamadas al servidor. Es más eficaz realizar una sola llamada más grande que hacer muchas llamadas más pequeñas.
El almacenamiento de datos en la memoria caché del lado del cliente mejora del desempeño gracias a que comparte los datos entre los componentes, lo que reduce significativamente la cantidad de recorridos de ida y vuelta del servidor. LWC tiene dos mecanismos integrados para el almacenamiento de datos en la memoria caché del lado del cliente: Lightning Data Service y los métodos de Apex con capacidad de memoria caché. Si ninguno de estos funcionan para su propósito, también puede implementar una solución de almacenamiento en memoria caché personalizada.
Lightning Data Service
Lightning Data Service ofrece un enfoque de registro gestionado: usted no es el responsable de escribir la lógica de acceso a los datos de Apex. También gestiona la seguridad por usted mediante la comprobación de accesibilidad de los registros y campos. El marco es responsable de gestionar los registros. Esto incluye recuperarlos del servidor cuando se los solicita por primera vez, almacenarlos en una memoria caché de cliente altamente eficaz, compartirlos entre todos los componentes que los solicitan, y enviar los cambios al servidor y las entradas de la memoria caché no validadas cuando los datos dependientes de Salesforce cambian.
Si otro componente posteriormente requiere campos adicionales, estos campos se cargan de forma transparente y se agregan al registro en la memoria caché. A diferencia de las acciones almacenables, que pueden almacenar en la memoria caché cualquier tipo de respuesta devuelta por un método de Apex, Lightning Data Service almacena en la memoria caché muchos tipos de datos de la API de la interfaz de usuario: registros, esquemas, metadatos, formato de los metadatos, listas de registros, listas de metadatos, etc. Lightning Data Service también mejora la consistencia de la interfaz de usuario: cuando un componente actualiza un registro, todos los demás componentes que usan ese registro son notificados y en la mayoría de los casos se actualizan automáticamente.
Métodos de Apex con capacidad de memoria caché
Si no puede usar Lightning Data Service, use Apex. Un método de Apex con capacidad de memoria caché es una acción del servidor cuya respuesta se almacena en la memoria caché del cliente para que se pueda acceder a las solicitudes posteriores para el mismo método de servidor con el mismo conjunto de argumentos desde la memoria caché en lugar del servidor.
Este tipo de método de Apex le permite acceder a los datos usando un enfoque tradicional de llamada de procedimiento remoto (RPC). Usted implementa algo de lógica en Apex que expone como un método remotamente invocable. Estos métodos le permiten almacenar en la memoria caché prácticamente cualquier elemento, sin importar lo que devuelve la llamada del método de servidor. La directriz general es almacenar en la memoria caché (marcar como almacenable) cualquier acción que sea idempotente y no mutante.
Crear un método de Apex con capacidad de memoria caché es fácil. Simplemente anote sus métodos de Apex con @AuraEnabled(cacheable=true)
.
En la versión de API 55.0 y posterior, puede usar la anotación @AuraEnabled(scope='global')
junto con @AuraEnabled(cacheable=true)
para habilitar los métodos de Apex que se almacenarán en una memoria caché global.
En la siguiente unidad, analizaremos cómo mostrar los datos solo cuando es necesario usando la divulgación progresiva y la representación condicional.
Recursos
- Guía para desarrolladores de componentes web Lightning: getRecord
- Guía para desarrolladores de componentes web Lightning: getRecordUi
- Guía para desarrolladores de componentes web Lightning: Directrices de datos
- Blog para desarrolladores: Modularización de código en componentes Lightning
- Trailhead: Componentes web Lightning y datos de Salesforce
- Blog para desarrolladores: Diseño de páginas Lightning para escala
- Guía para desarrolladores de componentes web Lightning: Llamar métodos de Apex
- Guía del desarrollador de Apex: Anotación AuraEnabled