Hey,
inside my Builder Field userts have the possibility to predefine various fieldsets in a blueprint that can then be combined as builder blocks in the panel. Since such blueprint configurations can become very complex, especially when the builder is nested, it makes sense to split them into different files using extends. Accessing all those different files seems to be a real performance bottleneck when the builder setup is rather complex and has a lot of nested extends.
Does Kirby use some kind of asynchronous file handling under the hood that could be adapted by me to solve this issue?
My current approach was to outsource the asynchronicity to the frontend and split it into several requests to the backend. However, this is also not a perfect solution for a number of reasons.
How many blocks are we talking about here? I have quite a complex setup with the builder using extends, and have not noticed any slowdown. I did it like this…
type: group
fields:
contentbuilder:
label: Page Blocks
type: builder
columns: 1
max: 99
fieldsets:
# CTA
cta:
label: CTA
extends: blocks/cta
# Gallery
gallery:
label: Gallery
extends: blocks/gallery
# Text
text:
label: Text
extends: blocks/text
# Video
video:
label: Video
extends: blocks/video
# Tweets
tweets:
label: Tweets
extends: blocks/tweets
And for example, the gallery block looks like this…
type: group
tabs:
content:
label: Content
fields:
gallery:
label: Gallery
type: files
layout: cards
query: page.images
uploads: images
size: tiny
image:
cover: true
ratio: 16/9
settings:
label: Settings
fields:
gallerytitle:
label: Show Title
type: toggle
width: 1/2
gallerycaption:
label: Show Caption
type: toggle
width: 1/2
In my example, there are 15 block types, all of them have around four tabs where each of them is an extended configuration for itself. So i end up with approximately 15 * 4 = 60 extend calls. In addition to that, some blocks have nested builders that could again contain the same set of blocks. So, in my scenario I would end up with 200 extend which leads to a 8 second delay until the panel is available.
Most of the tabs extend the same file. I thought about at least chaching those duplicate extend calls. I didn’t get this to work by now.