Skip to content

Browser vs protocol load — the tradeoff

Protocol load testing and browser-level load testing answer different questions. If you pick the wrong one for your question, you waste money (browser VUs are expensive), get misleading data (protocol metrics miss client-side failures), or both. This page lays out the full tradeoff so you can choose one, or combine them.

DimensionProtocol load (JMeter / k6 / Taurus HTTP)Real-browser (Taurus selenium / wdio)
What it measuresRaw HTTP response time: server processing + networkFull end-user experience: server + render + JS + third-party
VU costLow: thousands of VUs per CPU coreHigh: 1 full Chrome process per VU; 10–100× more resource-intensive
Max practical VU countHundreds to thousands on a single runner5–50 VUs per runner before CPU/memory saturates
Startup timeNear-instant10–30 s per Chrome instance cold-start
RealismSimulated, HTTP level onlyHigh: JS execution, rendering, third-party scripts, web fonts
Core Web VitalsNot available (no browser pipeline)Available: LCP, CLS, INP, TTFB from the browser
JavaScript errorsNot detectedDetected as assertion failures or uncaught exceptions
SPA hydration correctnessNot testableTestable
Third-party script impactNot capturedCaptured
Scenario complexityHigh: multi-step flows, correlation, data parameterizationHigh: full browser scripting with explicit waits
Result interpretationSimple: response time = server timeHarder: response time includes render; compare to protocol baseline
CI suitabilityExcellent: fast, deterministic, low costModerate: slower start, more resource-intensive, less deterministic
Best forThroughput ceiling, soak/endurance, API regressionReal UX, Core Web Vitals gate, SPA journey correctness
  • Throughput ceiling. The maximum RPS the server can sustain before latency climbs or errors appear.
  • Latency under concurrency. How server-side response time degrades as the VU count rises.
  • Error rate at scale. HTTP 4xx/5xx rates under realistic or peak load.
  • Database / queue / cache bottlenecks. These show up as rising latency in protocol metrics.
  • API regression. Whether a new deploy changed response time compared with a baseline.

Protocol load does not catch rendering failures, JavaScript errors, slow LCP from a large hero image, or the 500 ms a third-party chat widget adds to TTI.

  • Real page load time, including JS parsing, hydration and render.
  • Core Web Vitals. LCP, CLS, INP and TTFB as a real browser sees them.
  • Front-end regressions. A new JS bundle size or layout change that pushes LCP past your SLO.
  • SPA navigation correctness. Client-side route transitions, lazy-loaded chunks, hydration mismatches.
  • Third-party script overhead. Analytics, chat widgets, consent banners, A/B testing scripts.
  • Visual bugs under load. Elements that fail to render when the API slows down.

Browser testing does not scale to high VU counts at a reasonable cost. It is the wrong tool for finding the server throughput ceiling.

  • You want to know how many concurrent users the API can handle.
  • You are running a soak or endurance test over hours.
  • You are finding the breakpoint / capacity ceiling.
  • You need 500+ VUs.
  • Your CI time budget is tight (< 5 min).
  • Your application is mainly a JSON API used by a mobile app or another service.
  • You need to measure or gate on Core Web Vitals.
  • Your application is a content-heavy SPA where rendering takes significant time.
  • You need to check that a user journey completes correctly, not only that HTTP returns a 200 status.
  • You have third-party scripts that matter for UX and cannot be simulated.
  • You want a pre-release UX gate at a low VU count (2–10 browsers).

The hybrid load architecture pattern uses both at once: many protocol VUs stress the backend while a few browser VUs sample the front-end experience. One coordinated MaxoPerf run answers both questions: “how much load can the server handle?” and “what does a user see during peak load?”

Test typeProtocol VUsBrowser VUsRationale
Pre-release UX gate03–5Pure browser check, no load needed
Hybrid peak simulation200–5003–10Backend stress + UX measurement
Core Web Vitals baseline02–3Minimal browser runs for reliable CWV data
Throughput / breakpoint200–20000Pure capacity; a browser adds no value here
SPA journey regression05–10Correctness check, not a throughput measurement

Do:

  • Use browser VUs when the question is about UX or Core Web Vitals.
  • Start with protocol load for any scale or throughput question. It is faster, cheaper and more stable.
  • Use the hybrid pattern when you need both answers in one run.

Don’t:

  • Run 100+ browser VUs to generate load. Use protocol VUs for that.
  • Compare browser test response times directly with protocol test response times. They measure different things.
  • Drop browser testing because it is expensive. 3–5 browser VUs give you real UX data that protocol tests cannot.