01
Someone said it is slow and you have no number
A user, an investor, your own patience on a bad connection. Slow is an opinion until it is measured, and an opinion cannot be fixed.
Bubble performance audit
350 EUR, one day
Part of what makes a Bubble app slow is the app, and part of it is the floor under the app. I measure yours in a day and tell you which is which, in writing, with a number against every line.
You usually get here after one of these
0301
A user, an investor, your own patience on a bad connection. Slow is an opinion until it is measured, and an opinion cannot be fixed.
02
Workload grows with how much the app is used, and some of that use is pages rendering for crawlers that asked for nothing.
03
Possibly correct, and possibly expensive advice given without a measurement. One day of measuring costs less than finding out in month three.
What sits on what
What a day of measuring finds
What it sits on
The Bubble runtime
Arrives before your first word. No setting removes it.
What a day of measuring separates
What the app does to itself
FixableWhat nobody can move
The floorThe second list is why this page exists. An audit that only ever finds fixable things is a sales document, and you would be right not to believe it.
The floor, measured
Measured 27 October 20261,371KB
The Bubble runtime ships over a megabyte of JavaScript before the first word is read, on every public page of every app.
That number is the same on every public Bubble page there is. Nothing in your app put it there and nothing in your app can take it away. Everything the audit finds sits on top of it.
Your browser console, on your own app
const kb = n =>
Math.round(n / 1024) + ' KB';
const size = a => a.reduce(
(t, x) =>
t + x.encodedBodySize,
0
);
const all = performance
.getEntries()
.filter(x =>
x.encodedBodySize);
const js = all.filter(x =>
/\.js(\?|$)/.test(x.name));
const nav = all.find(x =>
x.entryType === 'navigation');
const ms =
Math.round(nav.loadEventEnd);
console.table({
total: kb(size(all)),
javascript: kb(size(js)),
load: ms + ' ms',
});Open the console on your own app, paste the code below, press Enter. It takes thirty seconds and the number is yours, not mine.
If that is the only thing you ever take from this page, it was worth writing. The audit is the other forty measurements, and what to do about each one.
The whole price
350 EUR
One working day
Ask for the measurementIf it turns out the answer is to leave, the 350 comes off the 600 of the migration audit. The staircase is 350, 600, the project, and nothing on it is paid twice.
The two endings
Fix these and stay. The app is doing things to itself and the platform is not the problem yet. You get the list, in order of what it returns.
You are already at the floor. The app is as fast as Bubble allows and the only thing left is to leave. Then we talk about the migration, and not before.
Before you order it
A day of readingIt is a day of reading and measuring, not a day of fixing. The fixes are quoted separately or done by you.
I do not touch your app. I need a link and, for the parts behind a login, a test account.
It cannot make a Bubble app as fast as code. Nothing can, and the document says so in the same words as this page.
Answered the same working day. If a minute of looking says the audit would not pay for itself, I will tell you that instead of selling you one.