The page that answers the first tap.
We loaded a published Popin page and the providers' own profile pages on the same slow phone connection, 5 times each, and kept the middle result. Popin scored 96, the highest of the pages tested, and kept the phone busy for 0 ms. The others kept it busy for 1,900 ms to 2,520 ms, and a tap on a link waits while the phone is busy.
The same phone, the same connection
Each bar runs until the page's main content has drawn. The thin mark is the end of the blank screen.
- Popin 2.5 s main content
- bio.link 2.2 s main content
- Lnk.Bio 4.1 s main content
- Beacons 10.9 s main content
What each phone shows, frame by frame
Cut at the moments that matter: when Popin starts, when it is done, and when each of the others is.
| What each phone shows, frame by frame | 1.9 s | 2.2 s | 2.5 s | 4.1 s | 10.9 s |
|---|---|---|---|---|---|
| Popin | drawing | drawing | shown | shown | shown |
| bio.link | blank | blank | shown | shown | shown |
| Lnk.Bio | drawing | drawing | drawing | drawing | shown |
| Beacons | blank | drawing | drawing | drawing | drawing |
The receipt
The middle of 5 runs for each page. Lower is better on every line but the score.
Popinpopin.click/wtomx2
- Lighthouse score
- 96
- Main content shown
- 2.5 s
- First thing on screen
- 1.9 s
- Phone busy
- 0 ms
- Page weight
- 345 KB
- JavaScript
- 10 KB
- Requests
- 10
bio.linkbio.link/biodotlink
- Lighthouse score
- 68
- Main content shown
- 2.2 s
- First thing on screen
- 2.2 s
- Phone busy
- 1,900 ms
- Page weight
- 213 KB
- JavaScript
- 35 KB
- Requests
- 21
Lnk.Biolnk.bio/lnkbio
- Lighthouse score
- 50
- Main content shown
- 4.1 s
- First thing on screen
- 1.0 s
- Phone busy
- 2,520 ms
- Page weight
- 918 KB
- JavaScript
- 285 KB
- Requests
- 34
Beaconsbeacons.ai/beacons
- Lighthouse score
- 37
- Main content shown
- 10.9 s
- First thing on screen
- 2.0 s
- Phone busy
- 1,940 ms
- Page weight
- 5.0 MB
- JavaScript
- 2.6 MB
- Requests
- 134
- Lighthouse score
- Out of a hundred, higher is better.
- Main content shown
- Largest Contentful Paint: when the biggest thing on screen has drawn.
- First thing on screen
- First Contentful Paint: the end of the blank screen.
- Phone busy
- Total Blocking Time: how long the page kept the phone from answering a tap.
- Page weight
- Everything downloaded: page, pictures, fonts, scripts.
- JavaScript
- Script files fetched on their own: code the phone downloads and runs. Scripts written into the page count in its weight.
- Requests
- Separate files fetched to draw the page.
Why the gap
A Popin page is drawn on the server, at the edge, and arrives as one finished document. No app framework has to download and start up before the links work, which is why the phone is not kept busy.
The JavaScript line counts script files fetched on their own. The few small scripts a Popin page has, such as the share button, are written into the page itself, so they count in its weight instead.
Where Popin was not ahead
A receipt lists everything. On the day we measured:
- Lnk.Bio put something on screen sooner, at 1.0 s against Popin's 1.9 s.
- bio.link drew its main content sooner, at 2.2 s against Popin's 2.5 s.
- bio.link's page was lighter, at 213 KB against Popin's 345 KB.
How we measured
- Tool: Lighthouse 13.5.0, performance category only, run from the command line.
- Device: an emulated moto g power (2022), screen 412 by 823.
- Network: Lighthouse's simulated throttling, its "Slow 4G" profile: 150 ms round trip, 1.6 Mbps down, and the processor slowed 4 times.
- Runs: 5 per page, back to back, and every figure is the median. Single runs vary; the median is the honest middle. A run that crashed is left out, not retried.
- Date: 14 October 2026. Pages change, so a later run may differ; the date is part of the result.
- Units: kilobytes and megabytes are thousands and millions of bytes, as transferred.
The pages
Each competitor is measured on its own brand profile, never a person's page. Popin is measured on a published page with a photo header, a name and links.
- Popin popin.click/wtomx2
- bio.link bio.link/biodotlink
- Lnk.Bio lnk.bio/lnkbio
- Beacons beacons.ai/beacons
Who is not on this page, and why
Linktree is not measured. Its robots.txt asks every automated client it does not name to stay off its pages, and a lab tool is one of those.
Run it yourself
Any line above can be checked with Lighthouse itself, one page at a time. Run it a few times and take the middle result:
npx lighthouse@13.5.0 https://popin.click/wtomx2 --only-categories=performance --chrome-flags="--headless=new" Our own run does the same with a small script: it reads each site's robots.txt first, loads one address per provider the number of times above, nothing else, and writes the file this page is drawn from.
node scripts/speed-bench.mjs --runs 5