Appsheet performance: I need some expert help to optimize an Appsheet app.

I have been developing apps with Appsheet for about a year.  I have more than 30 years of experience as a programmer in different programming languages and Appsheet is my first no-code experience. I am very skilled at optimizing the code of the functions to the maximum, so I believe that all the functions I use are the minimum necessary expression.

The first apps I developed were simple and all good. I liked Appsheet because with imagination and creativity you can combine formulas, views, valid-if, show-if, display-if, actions and bots to get a lot of functionalities.  When writing formulas I always noticed the message "Note: This expression could impact performance.", and I always try to look for the simplest and simplest formulas. I have never had complaints about performance, but now I have developed a more complex app, with 18 tables, with several relationships between tables, several slices for filters by roles, calculated columns, and the client complains that the app takes a long time to load. And the truth is, it doesn't seem to me such a high level of complexity that the app is so slow to load.

I have been consulting all the Appsheet documentation regarding the subject, and some related posts in the forum, and I understand the recommendations...but I find myself with the problem that I do not see clearly how to optimize the functionalities that have been developed for the app, because the referenced tables are needed, the calculated columns are also needed, the filters to visualize or validate data are also needed, ..... I can go one by one and see alternatives, and test if the alternative improves performance, do speed tests for each change, but the truth is a very tedious, trial and error task.

Appsheet is very magical because it allows you to develop very good functionalities by combining the different elements (formulas, actions, bots, ...) but if you can't use all these combinations freely because it affects the performance .... Then I wonder if there is something wrong with Appsheet. For me it is important to see if I can solve the performance issue in an efficient and practical way, because if not I will have to look for another development tool.  That's why I ask if there is someone in the group who can explain how the app is built and can give me concrete and efficient recommendations to optimize performance.

โ€ฆโ€ฆ..

PREFIERO SI ES ALGUNA PERSONA QUE HABLE BIEN ESPAร‘OL, YA QUE MI INGLร‰S NO ES TAN BUENO Y NECESITO UNA COMUNICACIร“N FLUIDA PARA ESTE TEMA.

Solved Solved
6 29 1,270
1 ACCEPTED SOLUTION

Hola como estas. Desde mi experiencia (ojo no se un solo lenguaje de programaciรณn) he estado desarrollando con appsheet hace tiempo y me he topado con el mismo problema. De tanto analizar casos he descubierto una forma.

Por ejemplo, cuando tienes que colocar una condiciรณn que produce esto:  "Note: This expression could impact performance." es porque la expresiรณn utilizada puede ser un filtro que devuelve una lista. Siempre estas expresiones es mejor no repetirlas. Por ejemplo. Si haces un Show If y en cada Show If debes colocar una expresiรณn que impacte en el performance, deberรกs considerar crear una columna virtual que tenga la expresiรณn que impacte. Esa columna tendrรก un nombre y se calcularรก una vez y no en todas las columnas. En todas las columnas apuntas al resultado de la columna virtual que creaste y vas a lograr una optimizaciรณn en el camino de la lรณgica de tu app. Esto es valido para todos los casos. 

Supongamos que tienes una tabla con un montรณn de registros y todos deben ser visibles si una de las opciones es vรกlida y, si esa opciรณn es vรกlida solo si no se repite, tendrรกs que crear un filter que impida las repeticiones. No puedes estar escribiendo el mismo filter en el valid if y en los show if, etc., etc. Para eso haces una virtual column una sola vez y apuntas a ella en las condiciones.

Si tienes que hacer, por ejemplo, expresiones grandes y en ellas existen mรบltiples condiciones que a su vez se repiten en otros cรกlculos, te recomendarรญa simplificar la expresiรณn, creando pequeรฑas porciones de la expresiรณn, concentradas en pequeรฑas expresiones que estรฉn dentro de esas virtual columns.

Las virtual columns no deberรญan impactar en la app ya que no se cargan en cada columna sino una sola vez por vuelta. 

Espero que lo que te diga te sirva. Saludos 

 

View solution in original post

29 REPLIES 29

Il impacto que tendrรญa el nรบmero de tablas en el tiempo de sincronizaciรณn es mรญnimo; tengo una app con 85 tablas hoy y creciendo, cientos de vistas, casi mil acciones, y decenas de miles de filas en varias tablas en Google Sheets. Estรก muy bien que estรกs pensando en la optimizaciรณn de tus expresiones, siempre que tengas en cuenta cรณmo se se interpretarรญan estas expresiones en el backend de AppSheet, cuรกndo se evaluarรญan los cรกlculos, con quรฉ frecuencia y sobre quรฉ tamaรฑo de dataset se ejecutarรญa cada expresiรณn. 

Entiendo que has leรญdo bien la documentaciรณn relevante de AppSheet, y por lo tanto lo primero que te aconsejarรญa es de echar un vistazo al Performance Monitor que te dirรก con un buen nivel de detalle cuรกles son las tablas que requieren mรกs tiempo y mรกs importante las columnas virtuales que consumen la mayorรญa del tiempo de sync. Asรญ puedes identificar las prioridades donde tendrรญas que actuar. 

En muchos casos, no hay mucho margen de maniobra y hay que pensar en cรณmo hacemos una estructura de datos mejor. No solo problemas de rendimiento, pero tambiรฉn hay otros problemas que no se pueden evitar ni aliviar con una mala estructura. Por eso dirรญa que lo mรกs importante antes de empezar con cualquier app es tener un diseรฑo con un buen *data modelling* que sigue las buenas prรกcticas del diseรฑo de una base de datos relacional. Es el problema que tiene yo dirรญa la mayorรญa de creadores de apps de AppSheet. No hay mucha programaciรณn involucrada; es una plataforma low-code; pero es una base de datos, y sin un buen entendimiento de los bรกsicos de funcionamiento de un RDBMS, no se puede crear una app escalable que podrรญa crecer conservando su eficiencia. 

Es lo que te puedo aconsejar de manera general. Propongo que empieces mirando estas dos pistas: El Performance Analyzer y el Data Modelling de tu app.

Gracias por tu respuesta Joseph. No creo que sea el modelo de datos, llevo mas de 30 aรฑos trabajando modelos de bases de datos relacionales y es una base de datos sencilla.

Ya he estado mirando tambiรฉn el Performance Analyzer, pero no me da pistas claras.

 

Thank you @Joseph_Seddik for you details.  It helps me better understand the capacity of the solutions as it makes me nervous how far I can push it.  85 tables and 100+ views on a single appsheet is significant accross 1000 shares so I am impressed.  Currently my max usage is 200 concurent users daily and climbing of which I am watching closely.   If you have anymore max thresholds you can share, that would be fantastic.

I too not unlike @evadeumal , plenty enough years of large application dev but currently only 7 months on Appsheet.

Thanks again.

Mi consejo es evitar las columnas virtuales lo mรกs que puedas.
Estoy seguro de que si cambias columnas virtuales (que no necesariamente tengan que serlo) a columnas fรญsicas mejorarรกs drรกsticamente los tiempos de sincronizaciรณn. 

Gracias por tu respuesta. Sรญ, es una de las cosas que querรญa analizar, aunque tampoco creo que pueda cambiar muchas columnas. Voy a ver.

Como estรกs @Kabuliรฑo ? Espero que muy bien hermano!!! No tengo dudas de que es asรญ, que hay que reducir el uso de virtual columns pero hay casos en que si es vรกlido. Por ejemplo en que las condicionantes como Show If, Valid If, etc., tienen espacios donde van expresiones. Estos espacios ser comportan como columnas virtuales ya que realizan un cรกlculo si hay algo en ellos. SI tu repites este cรกlculo en todos esos espacios con una misma expresiรณn, lo que estรกs haciendo es hacer todas esas veces el mismo cรกlculo cuando en realidad lo que conviene es tener una virtual column creada con ese cรกlculo y apuntar a ella cada vez que la neceesites. De esa forma, reduces ampliamente el impacto en el perfromance de la aplicaciรณn. 100% comprobado por mi.
Si tienes expresiones de filtrado, por ejemplo, no existe mejor soluciรณn que hacerla una sola vez en una virtual column y apuntar desde todas las columnas reales en las que la necesites a esa virtual column que se calcula solo una vez y no en todas las columnas reales. Si bien la columna real almacena el dato, no olvides que el cรกlculo debe realizarse y estamos tratando de reducir el impacto. @evadeumal 

@Gustavo_Eduardo  estoy de acuerdo contigo, fuรญ muy general al aconsejar evitar las columnas virtuales y es verdad que todos los lugares donde es posible tener una fรณrmula tienen un impacto en cuanto a procesamiento con el dispositivo o sincronizaciรณn con el servidor aunque me parece que esto varรญa ya que en algunos lugares se computa todo el tiempo (VC, Formula, Format Rules) y en otros solo se computa en un momento determinado (Valid if, suggested values, initial value).
Me parece lรณgico lo que comentas sobre no repetir fรณrmulas en cada campo que requiera la misma fรณrmula, sin embargo si mal no recuerdo me he topado con ocasiones en las que usar una VC en un tรญtulo da un delay en la actualizaciรณn del contenido (por lo menos en la parte grรกfica) a diferencia de cuando le doy la fรณrmula completa al tรญtulo, probablemente por el tipo de fรณrmula o no sรฉ, tendrรญa que intentar recrear los casos.



@Gustavo_Eduardo wrote:

creo que lo ideal serรญa crear un protocolo de producciรณn no code con appsheet.


Sin duda serรญa de muchรญsima ayuda tener un documento al cual recurrir en busca de buenas prรกcticas para appsheet, a pesar de que appsheet tiene una documentaciรณn no se explican conceptos, protocolos o tรฉcnicas necesarias para lograr ciertas funcionalidades sin que comprometan los tiempos de sincronizaciรณn o procesamiento, en este sentido la comunidad ha funcionado como una muleta para que appsheet siga andando. 

Perfecto. El aporte que dejas es muy bueno. De eso se trata, de sumar!!! me llevo tu experiencia y la tendrรฉ en cuenta Irmao! un abrazo desde Argentina

I would say you would need to have someone to check your app. Otherwise our suggestions would be only in general level.. and it sounds those you already know.

Hi Aleksi, 
Yes indeed, you are right. I really appreciate all your suggestions and your help, but what I need is someone to guide me checking my application, as I need to solve fast. I don't have so much time for testing, and it's easier guided by someone who already has experience. 

At first we would need to know your sync time and what's the goal. I assume you are using real database with your app and you have at least AppSheet Enterprise Standard subscription, right? Then.. how much data (rows) you have in these 18 tables at this moment? How much the sync time has increased from the beginning (approx.). With these basic details we could have an idea from your app.. and have more questions and ideas.

Thanks Aleksi.   Yes, I'm using real data, but  the app is now testing and there are not more than 1000 rows, then I know that the problem is not the amount of data. No, I don't have Enterprise suscription, this app is in a Publisher Pro subscription. Is this important o relevant for the performance? 

So.. what is your sync time at this moment? What do you think it should be?

Appsheet can easily handle these tables mentioned above. You can show us the virtual columns used in your app to understand more about it.

Here is one of my apps and its statistics.

Screenshot 2023-08-07 at 9.31.00 PM.pngTOTAL OF HYDRA.png

Here is the sync speed. Sometimes used to go below 5sec to load depending on network and time app is opened.

Screenshot 2023-08-07 at 9.35.20 PM.png

Thanks Rifad

Bueno, entonces pedirรญa a alguien que quiera revisar conmigo la app y la base de datos para comprender rรกpidamente quรฉ puntos podrรญan mejorar el rendimiento.  Puedo pagar algo por ese asesoramiento. Gracias

You could find someone on Upwork or Fiverr.

Thank you all for your responses. I still don't know exactly how I will approach the performance issue, but all of your suggestions have been helpful. Thank you very much

Hola como estas. Desde mi experiencia (ojo no se un solo lenguaje de programaciรณn) he estado desarrollando con appsheet hace tiempo y me he topado con el mismo problema. De tanto analizar casos he descubierto una forma.

Por ejemplo, cuando tienes que colocar una condiciรณn que produce esto:  "Note: This expression could impact performance." es porque la expresiรณn utilizada puede ser un filtro que devuelve una lista. Siempre estas expresiones es mejor no repetirlas. Por ejemplo. Si haces un Show If y en cada Show If debes colocar una expresiรณn que impacte en el performance, deberรกs considerar crear una columna virtual que tenga la expresiรณn que impacte. Esa columna tendrรก un nombre y se calcularรก una vez y no en todas las columnas. En todas las columnas apuntas al resultado de la columna virtual que creaste y vas a lograr una optimizaciรณn en el camino de la lรณgica de tu app. Esto es valido para todos los casos. 

Supongamos que tienes una tabla con un montรณn de registros y todos deben ser visibles si una de las opciones es vรกlida y, si esa opciรณn es vรกlida solo si no se repite, tendrรกs que crear un filter que impida las repeticiones. No puedes estar escribiendo el mismo filter en el valid if y en los show if, etc., etc. Para eso haces una virtual column una sola vez y apuntas a ella en las condiciones.

Si tienes que hacer, por ejemplo, expresiones grandes y en ellas existen mรบltiples condiciones que a su vez se repiten en otros cรกlculos, te recomendarรญa simplificar la expresiรณn, creando pequeรฑas porciones de la expresiรณn, concentradas en pequeรฑas expresiones que estรฉn dentro de esas virtual columns.

Las virtual columns no deberรญan impactar en la app ya que no se cargan en cada columna sino una sola vez por vuelta. 

Espero que lo que te diga te sirva. Saludos 

 

๐Ÿ‘  Waw! Muchas gracias Gustavo Eduardo,  este tipo de recomendaciones es lo que necesito.  Claro que me sirve, y mucho.  Voy a revisar mis fรณrmulas teniendo en cuenta lo que me explicas.

Gracias!

SALUD POR ESO! LO QUE NECESITES!

Hello again,
One more question. I have several fields of type LIST with formula REF_ROWS because there are quite a few parent-child relationships, and I also have different fields of this type defined for different slices, because each slice has its own view, with its own Related rows.

Does this type of fields affect the synchronization time when loading the app?
I If so, is there any alternative to not using so many LIST / REF_ROWS fields?
Thanks

It totally depends on how the app is structured and what's the goal. If you don't need any virtual column's calculation, you could use Enum (or Enumlist) with the base of Ref. It will give you a list for the dropdown, but you can still use for example derefs.

Propongo que comencemos por algun lado. Siempre hay alguien con este tipo de dudas y creo que lo ideal serรญa crear un protocolo de producciรณn no code con appsheet. Me parece de suma utilidad y deberรญa ser un documento editable y consultable. No se si Appsheet lo crearรก alguna vez pero quienes estemos interesados en resolver situaciones como estas, de muchรญsima utilidad serรญa un documento asรญ. 

Te dejo otro tip. Es preferible que crees una virtual column en tu tabla y apuntes a ella en las reglas de formato (format rules) a que crees la expresiรณn en la regla de formato directamente. Esto reduce de forma abismal la exigencia para tu app.

Un tip muy interesante, gracias.

Y la propuesta de hacer como una guรญa con estos tips serรญa muy muy รบtil.  Me parece una propuesta genial! 

Hola, muy interesante lo que comentas. Yo utilizo muchas Valid If, Show If y Format Rules iguales para varias columnas que son del tipo si/no (true/false). A que te referรญs con que "apuntes"? O si me podrรญas dar un ejemplo mas detallado, me servirรญa para entender. Muchas gracias de todas formas!

Si estรกs editando web y necesitas que vaya mรกs rรกpido, te recomiendo reducir la memoria utilizada. Esto es posible configurando el editor. En la burbuja de usuario "arriba a la derecha" pinchas y entras en el "Editor Setting" y ahรญ, donde dice cuรกntos "deshacer" quieres por defecto, reduce la cantidad en caso que no seas habituรฉ de esta funcionalidad.

Hola Eva. A raรญz de estas cosas he creado un protocolo estรกndar de nomenclatura para AppSheet que por ahora se encuentra en Apple Books. Te dejo el link donde dejรฉ ambas referencias aquรญ en un post de la comunidad. Se encuentra en espaรฑol y en inglรฉs. Estoy constantemente evolucionรกndolo. No quiero hacer 10 versiones de un libro sino un solo libro vivo. En fin, tiene un capรญtulo sobre columnas virtuales donde explico cรณmo yo optimizo mis aplicaciones al punto de reducir tiempos de guardado y aumentar la velocidad de sincronizaciรณn.  Si te sirve hรฉchale un vistazo. 

 

Hola Gustavo, 

Genial! Gracias lo mirarรฉ y lo irรฉ siguiendo, parece muy รบtil y prรกctico.

 

Top Labels in this Space