agent-browser v0.33.1 vs Playwright v1.62.0 Benchmark run: 2026-07-29 UTC Files ----- workflows.json Tiny deterministic workflow benchmark: cold and warm. agent-browser-unbatched.json Separate-command agent-browser warm check. playwright-cli-run-code.json Warm Playwright CLI workflows collapsed into one run-code invocation. snapshot-scale.json Warm snapshot-only benchmark with generated 1,000-row and 5,000-row semantic DOM fixtures. memory.json RSS measurements for one loaded tiny page. source/ Benchmark harnesses, Playwright helpers, configs and fixture generator. The source files preserve the exact absolute paths used in this container rather than pretending to be a polished portable benchmark package. Adjust those paths when reproducing elsewhere. Versions and provenance ----------------------- agent-browser: v0.33.1, commit 6dcea79b4b567a5671f1e1164807204f69542a5c Build: cargo build --release --locked --manifest-path cli/Cargo.toml Binary SHA-256: 011a517cc2e85f8cb25d8ee01a7e4ed5ec7f3295570542501b885455276278ec Playwright npm package: playwright@1.62.0 Tarball: https://registry.npmjs.org/playwright/-/playwright-1.62.0.tgz Tarball SHA-1: eddedb94b0e492a6c7425a602b0eadea35c71526 CLI invocation: node /node_modules/playwright/cli.js cli Browser: Chrome for Testing 151.0.7922.34, Playwright revision 1234 Browser SHA-256: e11fc9ce65c96313476f7ee9844b6fb6a9220fb048693cfe9eee00acf4170a9f Both products used this exact browser executable. Runtime ------- OS: Arch Linux, kernel 7.1.4-arch1-1 x86_64 CPU: Intel Core i9-14900K, 32 logical CPUs Node: v26.5.0 Rust: 1.97.1 Workflow method --------------- - A deterministic HTTP fixture ran on loopback. - All tools had to reach and validate the same final DOM state. - Cold workflow cases used a fresh browser while the respective control daemon/runtime was available. - Cold: 2 warmups, 10 measured runs, balanced rotating order, 400 ms teardown cooldown. - Warm: one persistent browser, 3 warmups, 20 measured runs. - agent-browser used its native batch command for the main warm table; a separate 20-run check repeated the same flows as ordinary unbatched commands. - Playwright CLI was measured with its default 500 ms settle, with settle set to 0, and with each warm workflow collapsed into one run-code invocation. - The ordinary Playwright CLI sequence automatically snapshots after every command; run-code emits only the final command snapshot. - Playwright library timings are an in-process lower bound, not a CLI measurement. Snapshot scale method --------------------- - Generated pages contained 1,000 or 5,000 repeated semantic rows. - Each row had a heading, paragraph, link and button. - The browser and page stayed loaded; only snapshot generation and serialization were timed. - Completeness was checked by asserting that the final item appeared in every snapshot. - 1,000 rows: 2 warmups and 10 runs. - 5,000 rows: 2 warmups and 5 runs. Memory method ------------- - One tiny fixture page was loaded in a persistent browser. - RSS was read from /proc five times and the middle sample reported. - Control-plane RSS and Chrome-process RSS were summed separately. - RSS double-counts shared pages and is not PSS; use the figures as comparative process-footprint measurements, not physical-memory accounting. Caveats ------- This benchmark measures one Linux host and controlled fixtures. It does not establish universal performance on public websites, different operating systems, Firefox/WebKit, cloud browser providers, hostile SPAs, nested frames, or shadow-heavy applications. The raw samples are retained in the JSON files so medians are auditable.