Obsoleto
Este post ha quedado obsoleto después de que la versión 22 de Velneo se optimizó el comando de instrucción Recorrer lista de solo lectura para que lee en bloques los registros de la lista.
Planteamiento
Cuando escribimos código Velneo para ser ejecutado en el cliente (1º o 2º plano) y en ese código tenemos que recorrer lista de sólo lectura podemos encontrarnos con que la ejecución del proceso en Cloud no tiene un rendimiento óptimo.
El motivo es que cuando cargamos o buscamos registros de una tabla el comando de carga se ejecuta con gran velocidad, en muchos casos apenas se establece un socket entre el cliente y el servidor que le devuelve la lista de registros. Sin embargo, cuando ejecutamos el comando recorrer lista de sólo lectura vClient comprueba si el registro ya está en caché y en caso contrario pide los datos al servidor. Esto debemos tenerlo en cuenta ya que si, por ejemplo, la lista tiene 100 registros vClient realizará 100 peticiones al servidor.
¿Podemos optimizar esta situación?
Sí, la solución es muy sencilla y efectiva.
Tras cargar o buscar los registros y antes de ejecutar el comando recorrer lista de sólo lectura debemos incluir uno de los dos comandos de instrucción con carga de registros optimizada.
Comandos de instrucción optimizados
Existen dos comandos de instrucción optimizados para la carga de registros en bloque.
- Ordenar lista
- Filtrar lista
En ambos comandos de instrucción no es necesario especificar ningún campo de resolución en el primero o ninguna fórmula de filtro en el segundo.
En la imagen que vemos a continuación he puesto junto el código sin optimizar y optimizado. Como vemos la única diferencia es el comando de instrucción Ordenar lista, en este caso.
¿Y esto optimiza la lectura de los registros? ¿No se dice siempre que hay que evitar los comandos ordenar o filtrar?
Sí, es cierto que debemos evitar estos comandos siempre que sea posible, pero no es menos cierto que estos comandos están optimizados, es decir, que cuando se ejecutan tienen la virtud de leer los registros a ordenar o filtrar en bloques, por lo que en lugar de ejecutarse una petición por cada registro es posible que la carga de registros se produzca en una o unas pocas peticiones mejorando notablemente el rendimiento de nuestra aplicación sobre todo cuando se ejecuta en Cloud.
Un ejemplo
Recorrer con el proceso de ejemplo 500 facturas sin optimizar tardó 28 segundos. Las mismas facturas con optimización tardó 1 segundos. Ambas pruebas se hicieron sin tener ningún registro en caché. Como puedes observar la diferencia es abismal por lo que también se aprecia cuando lees cantidades pequeñas de registros.
César Moreno dice
¿Esto funciona de la misma forma en v6?
jarboleya dice
Hola César.
Creo que no, que en 6x funciona diferente, además de que no está pensado para el Cloud. Si es importante para ti consúltalo en el centro dem soporte.
Jordi Rovira dice
Esto también influye en el ejecutar comando recorrer lista lectura / escritura?
jarboleya dice
Este post ha quedado obsoleto desde hace varias versiones donde se optimizó el comando recorrer lista de solo lectura.
Ya no es necesario ejecutar ordenar lista o filtrar lista.
El comando recorrer lista de lectura/escritura no se puede optimizar de la misma forma.
Por cada registro leído hay que realizar el bloqueo para garantizar que no puede modificarlo otro usuario eso requiere comunicación con el servidor.
La forma de optimizar un recorrer lista de lectura/escritura es ejecutar el proceso en el servidor (3º o 4º plano)