You’re most welcome and many thanks for your patience — we’re happy to help and onto your 4 follow ups!
Downloading and rendering
Just to be sure, I 100% get this:
In my example, I have Table 1 on my hidden page. I understand you download the entire table with all rows and all columns no matter what page I am on - correct?
Let’s assume, I now have 100 views of this table on a different page. This page is hidden and never shown. This will not impact performance when I load “My View page” (or any other page than the page with the 100 views on), because Coda only renders the page I am looking at - correct?
There will be some impact since the doc isn’t fully interactive or ready until all data is downloaded.
That said, we do our best to first download the data for the page you’re loading so you start seeing parts of it versus others, and eventually we’ll download all data for the whole doc.
But if I open the page with the 100 views, then my Doc might be a bit slow as you now have to render 100 views - correct?
Yes, It’s more likely the page with a with 100 views might take a little longer to be fully ready versus say a page with 1 table.
That said, we have some optimizations to only render what’s on visible within the browser window. So, if it’s below the bottom of your screen we don’t need to render, since you can’t see it.
Inverting
Ayuba_Audu:Typically one approach we’d recommend here is what we call the inverting. Instead of a default where you show everything, then filter, you show nothing and then include things based on the filter. It’s quicker for us to render a table with no rows, and then add the specific rows that match the filter.
How would you set this up in my example Doc? Assuming my Select control is still People and my Display column is text (like provided in my example; I just used “People” and “Name” as examples for something else, so it should not be a User column).
You have two options here:
Simplest → You could move to a filter bar for the table and set the default values to be blank or no one — read more details here.
For example, in your current setup the “Name” column in “Table 1” and “View of Table 1” is text and you’d likely want to update to people and configure like in the screenshot below.
A bit more involved → See the example I’ve included here of a 10K row table, which uses a similar pattern as you have with the select control. The default for all the select control is blank, which assumes we always exclude all and then you can include items based on what’s selected after loading.
Cross Doc
All makes sense with the Sync Doc loading like “another tab”. What’s the equivalent for doing Cross Docs?
Let’s say I have a ‘Source’ Table from my ‘Source’ Doc with 3 visible columns and 2 hidden columns. Data is filtered so I have 10 visible rows and 5 hidden rows.
In my ‘Target’ Doc (where I install the Cross Doc Pack) I now display the Source Table with the 3 visible columns and no additional filters.
Coda only downloads and render 10 rows - correct?
Coda only downloads and render 3 columns - correct?
Is the Source Doc performance impacted by the load of the table in the Target Doc?
For #1 and #2 — yes you’re correct. Cross-doc will only send over the visible data i.e., visible columns and rows not filtered out with collaborative filter — more details here.
The source doc performance isn’t really impacted by the target doc syncing in rows via Cross-doc.
*How does formulas/calculations impact performance?
I understand I can debug formulas/calculations to see what is running and taking up time, but would love to know the context of how these calculations impact performance:
Are calculations in columns done as a part of download or rendering?
Downloading and rendering aren’t truly sequential i.e., we’re typically doing some portion of both at the same time, else you’d be looking at a loading spinner for a while especially on large docs. This means some calculations will start running before the data download is complete, and the results will be incomplete until all data is finished downloading.
How often are calculations recalculated (not date calculations, but others)?
2.1 Let’s say in my example, I have a relation from Table 2 (Company) to Table 3 (Orders) and on Table 2, I have the column “Total price sold” where I sum the price of all orders related to this company. Are these calculations done on each load? Is the entire “Total price sold” column recalculated whenever a new row is made in the order table - or only recalculated for the row in Table 2 that this new order is related to?
The short version is we run calculations when we detect something has changed and a calculation has dependencies on that change. This means calculations run as often as needed to ensure you’re always looking at the latest information.
This means for the example you had:
- Are these calculations done on each load? → Yes.
- Is the entire “Total price sold” column recalculated whenever a new row is made in the order table - or only recalculated for the row in Table 2 that this new order is related to? → The latter i.e., only the row in Table 2 that has dependencies on orders.
We do have optimizations in place that can help speed up a bunch of known scenarios and sometimes calculations can get backed up in really busy docs or expensive calculations.
Formulas in buttons (under “on click”, not “visual”): do they impact download and/or rendering? Makes sense it of course impacts performance when clicking, but wondering if it also impact load time.
Generally speaking they shouldn’t have any impact until you interact with them or you have a large amount of buttons — this is less about the formulas and more loading all the buttons.
That said, you could have something that triggers them and has impact e.g., a time based automation that pushes buttons and has a expensive formula which runs right about when you’re opening and loading the doc.
Tesco has a motto that every little helps and so every tweak or careful consideration can add up.