We’ve taken several steps to optimize our app’s performance, but we are still encountering significant issues. Below is an outline of what we’ve done so far and the challenges we’re facing:
Feature Analysis and Removal:
We conducted a thorough analysis of all app features and reached out to users to understand which ones they actually use. Based on this feedback, we deleted unnecessary features.
Deletion of Collections and Data:
Alongside the removal of certain features, we also deleted related collections, data, rows, and relationships, particularly focusing on “Many-to-Many” relations.
Initially, this seemed to improve performance slightly, but after extended use, the app slows down considerably. Specifically, when navigating through different lists or repeatedly accessing the same list, it appears that the app is caching these lists multiple times, causing the phone to overheat and become sluggish, rendering the app nearly unusable after a few minutes.
Focus on Relations:
We paid particular attention to deleting “Many-to-Many” relationships. For example, in our app, users select languages they know from a toggle list and join that language rather than inputting it as plain text in their profiles. Despite removing some of these relations, the app’s performance did not improve noticeably.
Assumptions on Caching:
I suspect the core issue lies with the app’s caching behavior. Even after deleting features and collections, the app doesn’t seem to lighten in any noticeable way. It appears that the app still caches extensive data on the user’s device. For instance, when opening a simple list of users that only displays their names and pictures, it seems the app is also downloading unnecessary related data such as languages, work experience, and bio, which we don’t need at that point.
Questions:
Is it correct to assume that Adalo is caching entire collections or related data, even if it’s not immediately required in the view?
Is there a way to control or limit the caching to only the data that is necessary for a particular screen or list?
Could there be other factors we’re overlooking that contribute to the app’s slow performance over time?
We would appreciate any guidance or recommendations you can provide to resolve these issues.
I’m not sure about how Adalo process the info in the backend so this would be a question for Adalo team but I guess Adalo return every field in the app and there’s no option to customise. What option you enabled for list loading? You can submit a support ticket for this.
Curious which screens you’re seeing issues on. I’ll take a look and share with my team. You sound like you’re on the right track with limiting data being pulled from relationships. That’s where you inevitably end up just loading tons and tons of data at times and that can take a while to load. Also be careful about heavy use of counts, relationships in visibility rules, etc.
After taking some steps, such as deleting as many unnecessary relationships between collections and moving some actions from the app’s UI to our backend code, I’ll update you on the results. If possible, we would appreciate any suggestions you might have on further improving the app’s speed.
The cache system, if Adalo uses one at all (there is no information about it anywhere) should not be a problem. If there is no chache applied to the media, then there is very little chance that it could interfere with the use of the app. The cache system normally stores data on the client phone. It then does not require the server side to retrieve certain information, but instead retrieves it immediately from the device and thus significantly improves the speed of the app. As mentioned above, if the cache is only for textual data, this should not be a problem. The problem may be in the Adalo servers. If it is true that only 3 API calls can be made, this may be one of the reasons for the slowness. There may be others related to complex queries and database structures.
I think the cashing system now working as expected on Adalo. I think it is cashing the same data multiple times. When I spend a few minutes on my app, it crashes.
I think it is because of 2 things:
Adalo cashing all the data (we can’t choose what to cash/which fields and what not to) multiple times
When I open a screen with a simple list, Adalo calls all the data related to this list. What I mean: For example I have a Users list on X screen. In this users list, there are only users’ profile pictures & full names. When I open X screen Adalo calls all the fields of the user (even their work experience, and different collections’ data which have a relation with it) which I will not use most of it in the next screens.
For the solution I started to destroy relations. Instead of relations, I will use IDs. By this It will not gonna call all the relations which not needed.
As you know actions happening on Adalo work by using phone’s CPU. So I try to make actions only necessary ones and copied most of the actions on heavy screens (with 7+ actions) to our backend, so it will lighten our app.