Rendimiento de Business Central On-Cloud: Tips & Tricks - Business Central

Breaking

domingo, 2 de febrero de 2020

Rendimiento de Business Central On-Cloud: Tips & Tricks

Últimamente he visto mucho debate sobre el rendimiento de Business Central On-Cloud vs Business Central On-Premise.

Creo que es un debate estéril, puesto que Microsoft como fabricante, ya ha tomado la decisión por lo que nos toca, como siempre hemos hecho los que llevamos muchos años en el mundo Navision, adaptarnos a lo que tenemos.  Recuerdo los rompimientos de cabeza con el rendimiento que nos dió el cambio de la base de datos propietaria a SQL con los campos calculados.  Sí, para los más jóvenes, no siempre hubo un SQL detrás.

Guía para mejorar el rendimiento de NAV en SQL
Microsoft, mejorará el rendimiento, de eso estoy seguro y nos olvidaremos del On-Premise.  

Si de lo que hablamos es de velocidad al introducir datos, yo me sigo quedando con la versión Classic versus la versión entorno a Roles.  ¿o no es cierto que se introducian los pedidos o los asientos contables más rápido en Classic que en RTC?


Pero claro, si todavía estuviesemos allí, no tendríamos WebServices, ni API's, ni integración con Power Platform, ni con Outlook, ni con Azure Storage con un almacenamiento accesible desde cualquier lugar, ni con Azure Cognitive Services,... Así que,... miremos hacia delante y además de esperar que Microsoft mejore por su parte, veamos algunas cosas qué podemos mejorar como desarrolladores para que Business Central On-Cloud tenga un mejor rendimiento.

Mejoras a realizar en Desarrollo:

Evita cálculos innecesarios en las páginas.   En su lugar cachea el resultado.  Si queremos mostrar los 5 productos más vendidos en el Rol Center, seguramente no cambiarán significativamente cada hora, así que podríamos hacer un job que lo calcule cada cierto tiempo de los datos en bruto, guarde el resultado en una tabla y mostramos la Page vinculada a esa tabla. Si ya sé, estábamos acostumbrados a ahorrar en tablas y gastar una en esto nos resulta raro...

Haz menos.   Reduce los campos calculados innecesarios en las List Page, especialmente cuando son tablas muy grandes o no hay indices adecuados.  Los campos calculados ralentizan significativamente la velocidad de carga.

Atención a las LookUp Pages.  Crea nuevas Pages para las LookUp pages.  Habitualmente usábamos la misma List Page como LookUp (cuando por ejemplo desplegamos el campo Facturar a nº de cliente, nos muestra la lista de clientes):
LookUp Proyectos

Microsoft ha empezado a crear nuevas Page List específicas para LookUp en Clientes, Proveedores y Productos.  Ejemplo, la página 33 Customer LookUp, con un número limitado de columnas.   Si quieres ver todas, tienes un "Vista Avanzada" que te muestra la de toda la vida (22 Customer List).


La razón es que las List Pages habituales, lanzan todos los Triggers y FactBoxes aunque no se muestren.  Utilizando estas nuevas paginas más ligeras, aceleras su tiempo de carga.

Pages BackGround Task.  Desde la vesión Business Central 2019 release wave 2, disponemos de tareas en Background. Estas tareas no deben escribir ni bloquear la base de datos, pero permiten cargar mucho más rápido las páginas, puesto que el usuario no "interrumpirá" su proceso que se ejecutará en una codeunit.  Hay ciertas características peculiares:
- Solo pueden hacer tareas de lectura.  Proceso de datos, pero sin modificarlos.
- Si la página que llama a la tarea se cierra, se cancela automáticamente la tarea.
- Hay un timeout, después del cual, la tarea se cancela automáticamente.

Usar Built-in data structures.  Existen estructuras de datos optimizadas para hacer más eficiente el rendimiento y los recursos del servidor:
- Utiliza TextBuilder  en lugar de contatenar textos con +=
- Utiliza los el tipo de datos List si necesitas un array que no esté enlazado con una tabla.

Utiliza métodos Set-based en lugar de bucles.  Utilizar FINDSET, CALCFIELDS, CALCSUMS ó SETAUTOCALCFIELDS es mucho más rápido y eficiente que realizar un bucle para realizar el cálculo. 

NumberSequence Data Type.  Si necesitas un número de secuencial rápido en el que puedas permitirte saltos, puedes usar el NumberSequence Data type y no usar los números de serie y su gestión.

Impacto de las extensiones de tabla.  Actualmente no es posible crear indices conjuntos de campos de una extensión y su tabla original.  Por tanto hay que procurar no hacer extensiones de tabla de aquellas que sabemos que más van a crecer (General Ledger entry o Item ledger entry).  En su lugar podemos usar tablas relativas y definir un flowField en la tabla base.

Estas son algunas de las que me han parecido más interesantes, pero puedes consultarlas todas en la documentación oficial de Microsoft

En definitiva, sigamos aprendiendo y mejorando entre todos Business Central con nuestras extensiones, pero vamos a hacerlo de una forma más eficiente.





No hay comentarios: