You should not approach this in such a way as to create the reusables from the pages and then need to keep the pages and reusables causing you to make updates to two areas of the app (page and reusable) if you ever need to make changes.
Instead, if you want to convert to a SPA for improving the speed between navigating users between ‘pages/views’, just convert the existing pages into reusable elements and on the one page, put each reusable element into its own group that will help to control conditionally the visibility.
When converting the page to reusable element, keep in mind, Bubble to this day has not yet taken my suggestion when they first released the ‘convert group to reusable element’ feature and expanded upon it to be fully realized feature that we need, and make it so we can convert an entire page into a single reusable element with one button press. So unfortunately, you will need to retain some key concepts for converting a page into a reusable element.
- Start the process by grouping ALL container groups on the page into a Single container group. That group is what you will right click and select convert into a reusable element.
- All popups, group focuses, and floating groups live on the page and will not be converted into the reusable element. You will need to manually copy with workflows and paste with workflows each of those types of containers.
- All custom and conditional workflows live on the page. You will need to manually copy and paste them into the reusable element.
- Custom states on the page will need to be manually added to the reusable element.
- There will be issues in issue checker to resolve, most of them will be due to the fact that any setting of state actions if state was on page, popup, floating group or group focus will not get converted properly as those elements will not be part of the conversion and will need to be remapped. Additionally, any conditionals that referenced any popup, groupfocus, or floating group will need to be remapped as will conditionals on those elements if those conditionals referenced elements or custom states that lived on the page.
I would suggest testing things out first to see if the benefits are great enough to change the entire app over.
One thing to keep in mind is if an app is a single page app, and you use the go to page action to navigate between ‘pages/views’ the page is not actually loaded again, BUT the page is loaded workflow triggers will still execute. Custom state values do not get lost.
I would not recommend using the experience of other apps as a guiding light for all bubble apps. I believe the time to load depends on a lot of factors and there is not any type of range that fits all bubble apps.
Every group and element are basically loaded on page load, this is why in the debugger when we use inspector we can see the names of elements that are labeled as ‘not visible’ because Bubble does, if they are on the page, whether or not they are set to be visible on page load or not, they are retrieved from the server and returned to the client device, which for me is the concept of loaded for elements. The data fetch is different story.
Again this completely depends on the app and what resources are needed from the server in order to fully load the app. The amount of data returned impacts loading speeds, amount of elements etc. all impact the loading speed, so each app is different in terms of timing, but I can imagine a situation in which app A as SPA compared to app A as multi page app, maybe the extra load time is between 0.4 and 0.6 seconds, but I wouldn’t say that is a truth across the board for any bubble built app.
I was CLUELESS about everything related to apps when I got started in Bubble March 2018 as a non-technical person looking to find a way to launch a startup idea. I think Bubble attracts a lot of similar non-technical people looking to build an app. It is kind of what the vision of Bubble is, to make apps development accessible to everyone, even the CLUELESS. Good thing there is the Bubble forum to help people become aware of some technical things related to app development.