What this test checks
Load time on a mid-range phone
Median time to the load event across the three phones, on the first visit and on a repeat visit.
Main-thread blocking
Time spent in long JavaScript tasks beyond 50 ms each, during which the phone cannot respond to taps or scrolling.
JavaScript errors
Console errors and uncaught exceptions on each phone, split into errors from your own site and errors from third-party scripts.
Fits the phone screen
Whether the page is wider than the screen on any phone, which forces visitors to scroll sideways.
Tap target size
Visible buttons, links and form controls smaller than 24×24 px, the WCAG 2.2 minimum; links inside running text are exempt.
Readable text size
The share of text set smaller than 12 px, which is hard to read on a phone without zooming.
Mobile screenshot
A screenshot of the first screen on the iPhone SE profile for a quick visual check.
Sample result
A real result for devteam.co.kr, tested 17 hours ago.
Mobile experience
Median repeat-visit load 614 ms on 3 phone profiles, 0 JavaScript errors from your own code.
Load time on a mid-range phone (Good)
Pages load quickly on phones even with a slow CPU.
614 ms repeat · 916 ms first visit
Main thread blocking (Good)
Scripts leave the phone responsive to taps while the page loads.
0 ms
No JavaScript errors (Good)
Your own scripts ran without errors on all devices.
0 own · 0 third-party
Fits the phone screen (Good)
No horizontal scrolling on any device.
Fits
Tap targets large enough (Good)
Buttons and links are easy to tap.
2 small
Readable text size (Good)
Text is legible without zooming.
0% tiny text
| Device | First visit | Repeat visit | Blocking | JS errors | Fits screen |
|---|---|---|---|---|---|
| iPhone SE (3rd gen) 375×667 |
931 ms | 614 ms | 44 ms | 0 | Yes |
| iPhone 15 Pro 393×659 |
908 ms | 592 ms | 0 ms | 0 | Yes |
| Pixel 7 412×839 |
916 ms | 671 ms | 0 ms | 0 | Yes |
Playwright device profiles with a 4× CPU slowdown. Load = navigation start → load event; blocking = long tasks over 50 ms.
How it works
- The test runs in headless Chromium on our test server in Virginia, USA, using Playwright device profiles for iPhone SE (3rd gen, 375×667), iPhone 15 Pro (393×659) and Pixel 7 (412×839).
- Each profile sets the screen size, pixel density, touch support and user agent, and the CPU is slowed down 4× to mimic a mid-range phone.
- Each phone loads the page twice, first with an empty cache and then as a reload, and waits for network activity to settle before measuring.
- The network is not throttled, so load times reflect your server, page weight and the slowed-down CPU.
- Every request the browser makes goes through a network guard that only connects to public IP addresses on ports 80 and 443.
How it is scored
The score uses our item-weighted formula: a pass earns full credit, a warning half and a fail none, with load time, JavaScript errors and screen fit weighted 3×, main-thread blocking 2×, and tap targets and text size 1×. Grades follow our scale: A+ 95+, A 90+, B 80+, C 70+, D 60+, F below 60.
| Check | Good | Needs work | Poor |
|---|---|---|---|
| Repeat-visit load time (median of 3 phones) | 1.5 s or less | 1.5–3.5 s | Over 3.5 s |
| Main-thread blocking (median) | 200 ms or less | 200–600 ms | Over 600 ms |
| JavaScript errors from your own code | None | 1–2 | 3 or more |
| Horizontal overflow | Fits on every phone | — | Wider than the screen on any phone |
| Controls smaller than 24×24 px (median) | 3 or fewer | 4–12 | More than 12 |
| Text smaller than 12 px | 5% or less | 6–20% | Over 20% |
Grades: A+ 95–100 · A 90–94 · B 80–89 · C 70–79 · D 60–69 · F below 60.