Lightpanda
Benchmark Lightpanda fairly: accepted output, loading policy and full process cost
Design an equivalent-work comparison without transplanting upstream speed and memory ratios to an untested workload.
What you will learn
- Only compare runs that satisfy the same output contract.
- Record effective loading, waits and whole-service resources.
- Missing measurements remain unknown.
Before you start
- Basic HTTP, JSON and browser lifecycle knowledge
- An owned fixture with explicit expected output
Explain the chapter’s implementation boundary and verify its proposed task or independent byte-model example.
Key takeaways
- Only compare runs that satisfy the same output contract.
- Record effective loading, waits and whole-service resources.
- Missing measurements remain unknown.
Require equivalent work before calculating a ratio
The README’s benchmark compares browser runs over a specified set of network pages and reports time and memory differences. Treat that as an upstream experiment with its own conditions. A result for a text-oriented crawler cannot automatically predict performance for screenshot-heavy tasks, worker-dependent applications or workflows that need unsupported protocol options.
Define a shared fixture set and an acceptance check for each page: required text, links, dynamic state or visual output. Record which resources were loaded and when the run stopped waiting. If one browser omits work needed for acceptance, its shorter duration should count as a failed task rather than a performance win.
Measure the resource owners you operate
Separate startup from warm-page processing and record concurrency, response sizes, timeouts and errors. The inspected configuration exposes connection and HTTP limits, but configured ceilings are not measured throughput. A system can spend time waiting on network policy, parsing, JavaScript or downstream model processing; a single total cannot identify the cause.
Measure the full service boundary, including any client process and retained artifacts, rather than a convenient heap counter alone. The Browser structure owns V8 state, network machinery and a lazy renderer, so enabling additional output paths can change the resource profile. Keep model cost separate when using an agent mode; no paid model run was performed here.
Record unknowns instead of manufacturing a leaderboard
The sample ledger deliberately uses null for timing, memory and pass rate. Fill it only after a controlled run on the deployment platform. Record browser revision, client revision and effective loading flags alongside measurements so a future update can reproduce the comparison and explain changed results.
For a repository article pipeline, the valuable metric is cost per accepted, complete evidence capture. A fast dump missing a prerequisite or code block creates correction work downstream. No Lightpanda-versus-Chrome benchmark or financial saving is claimed by this series; the deliverable is a falsifiable measurement plan.
Implementation steps
- 1
Build permitted fixtures with explicit acceptance checks.
- 2
Pin both browser and client revisions.
- 3
Separate cold, warm and concurrent runs.
- 4
Report errors and incomplete output beside resource measurements.
Copy-ready example
{"fixture":"owned documentation page","requiredOutput":"complete heading and dynamic text","coldMs":null,"warmMs":null,"peakProcessBytes":null,"accepted":null,"modelCost":null,"comparisonExecuted":false}Frequently asked questions
Can I quote the README ratio as my expected saving?
No. Keep the upstream conditions attached and measure your own accepted workload before estimating savings.
Do configured limits prove capacity?
No. Limits bound behavior; capacity needs measured successful work under a specified load.
Sources
- README.mdSource checked 2026-09-08
- LICENSESource checked 2026-09-08
- DockerfileSource checked 2026-09-08
- build.zig.zonSource checked 2026-09-08
- src/Config.zigSource checked 2026-09-08
- src/browser/Browser.zigSource checked 2026-09-08
- src/server/cdp/domains/target.zigSource checked 2026-09-08
- src/server/cdp/domains/page.zigSource checked 2026-09-08
- src/server/cdp/domains/lp.zigSource checked 2026-09-08
- src/server/cdp/SafeString.zigSource checked 2026-09-08
- src/network/RobotsGate.zigSource checked 2026-09-08
- src/telemetry/telemetry.zigSource checked 2026-09-08