Skip to Content

BotBrowser Performance Benchmark

Performance data comparing BotBrowser fingerprint protection overhead against stock Chromium, and evaluating Per-Context Fingerprint scalability.

Key Findings

QuestionAnswer
How much overhead does BotBrowser add?Near-zero. Speedometer 3.0 shows <1% difference in both headed and headless modes, within run-to-run variance.
Are fingerprint APIs slower?No. Canvas, WebGL, Navigator, Screen, and Font APIs show identical latency with or without fingerprint profiles on macOS, Linux, and Windows.
How does Per-Context Fingerprint scale?At 50 concurrent profiles: 29% less memory, 57% fewer processes, 2x faster creation vs launching 50 separate browser instances. Full fingerprint isolation verified.

Single Instance Performance

Standard Benchmark Suites

All benchmarks run locally (no network dependency). Each test runs 3 times; median reported.

Test Environment: macOS (Apple M4 Max, 16 cores, 64GB RAM)

ModeBenchmarkStock ChromeBotBrowser + AndroidDifference
HeadlessSpeedometer 3.042.8 (±0.31)42.7 (±0.25)-0.2%
HeadedSpeedometer 3.041.8 (±0.21)42.1 (±0.17)+0.7%

Methodology: Warm-up run (discarded) + 3 measurement runs with interleaved test order (Stock → BB → Stock → BB → Stock → BB) to eliminate thermal/cache bias. Scores shown as median ± stddev.

Result: BotBrowser’s fingerprint protection adds no measurable overhead to JavaScript and DOM performance. Differences of 0.1-0.3 points are well within run-to-run variance. Consistent across both headed and headless modes.

Fingerprint API Overhead

Individual API latency measured over 1,000 iterations each, median reported (milliseconds).

APIStock ChromeBB + AndroidBB + WindowsBB + macOS
Canvas2D toDataURL()0.50.50.50.5
Canvas2D getImageData()0.00.00.00.0
WebGL getParameter(RENDERER)0.00.00.00.0
WebGL getSupportedExtensions()0.00.00.00.0
WebGL getShaderPrecisionFormat()0.00.00.00.0
WebGL readPixels()0.20.20.20.2
AudioContext Offline Render + Hash3.92.93.23.7
Navigator userAgent0.00.00.00.0
Navigator platform0.00.00.00.0
Screen width + height0.00.00.00.0
performance.now()0.00.00.00.0
Font measureText() (50 fonts)0.00.00.00.0
Intl DateTimeFormat.resolvedOptions0.00.00.00.0

Result: Fingerprint protection adds zero overhead on all tested APIs. Canvas, WebGL, Navigator, Screen, and Font APIs show identical latency with or without a fingerprint profile. AudioContext variance (2.9-3.9ms) is within normal fluctuation.

Page Load Time

Median load time for a locally-intercepted page (milliseconds).

ConfigurationLoad Timevs Stock
Stock Chrome (no profile)29.7ms-
BotBrowser + Android101.6ms+72ms
BotBrowser + Windows102.9ms+73ms
BotBrowser + macOS105.9ms+76ms

Note: The additional ~72-76ms comes from one-time profile initialization (reading and applying fingerprint configuration on first page load). All three profile types show similar overhead, indicating no significant difference between cross-platform profiles.


Scale Performance: Per-Context vs Multi-Instance

The core value proposition for enterprise users: running N different fingerprint profiles simultaneously.

Architecture Comparison

ArchitectureHow It Works
Multi-InstanceLaunch N separate browser processes, each with a different --bot-profile
Per-Context (ENT Tier 3)Launch 1 browser, create N BrowserContexts, each assigned a different profile via CDP BotBrowser.setBrowserContextFlags

Resource Usage at Scale

Test Environment: macOS (Apple M4 Max, 16 cores, 64GB RAM), Headless mode

ScaleMI MemoryPC MemorySavingsMI ProcessesPC ProcessesMI Create TimePC Create TimeSpeedup
116,055 MB14,022 MB13%1401361,667ms627ms2.7x
1023,345 MB19,586 MB16%21215011,434ms4,854ms2.4x
2530,133 MB23,781 MB21%32017428,205ms14,415ms2.0x
5040,218 MB28,553 MB29%49221057,891ms28,946ms2.0x

Per-Context memory savings increase with scale as the shared browser/GPU/network processes are amortized across more contexts.

Canvas Fingerprint Isolation

Each context/instance receives a unique noise seed, producing distinct canvas fingerprints. Verified across all scale levels:

ArchitectureScaleUnique HashesStatus
Multi-Instance1010/10PASS
Multi-Instance2510/10PASS
Multi-Instance5010/10PASS
Per-Context1010/10PASS
Per-Context2510/10PASS
Per-Context5010/10PASS

Per-Context Fingerprint provides the same fingerprint isolation as running separate browser instances, while sharing infrastructure resources.

Scaling Characteristics

Multi-Instance (N browsers):

  • Memory grows linearly: each browser adds ~400-800MB
  • Process count grows linearly: ~7-10 processes per browser
  • Creation time grows linearly: ~1s per browser

Per-Context (1 browser, N contexts):

  • Memory grows sub-linearly: contexts share browser/GPU/network processes
  • Process count grows more slowly: shared processes are reused
  • Creation time grows sub-linearly: no browser startup overhead per context

At 50 Concurrent Profiles

Multi-Instance: 40,218 MB memory | 492 processes | 57.9s to create Per-Context: 28,553 MB memory | 210 processes | 28.9s to create ────────────────────────────────────────────────── Savings: 29% memory | 57% processes | 2.0x faster

Context Lifecycle Performance

Continuous create/destroy cycle test (200 iterations):

MetricValue
Context creation (median)278ms
Context creation (p95)369ms
Context destruction (median)7.9ms
Context destruction (p95)16ms
Memory trend (200 cycles)Stable (no persistent growth)

Context creation is lightweight (~280ms) and destruction is near-instant (~8ms). Memory remains stable over 200 create/destroy cycles with no persistent memory leaks observed.


Cross-Platform Verification

BotBrowser supports applying any platform’s fingerprint on any host OS. Tested on macOS, Linux, and Windows.

Fingerprint API Latency: macOS Host

All values in milliseconds (median of 1,000 iterations). Headless mode.

APIStock ChromeBB + AndroidBB + WindowsBB + macOS
Canvas2D toDataURL()0.50.50.50.5
WebGL readPixels()0.20.20.20.2
AudioContext Render3.92.93.23.7
All other APIs0.00.00.00.0

Fingerprint API Latency: Linux Host

Tested in both headless and headed modes.

APIHeadless StockHeadless BBHeaded StockHeaded BB
Canvas2D toDataURL()0.30.30.30.3
WebGL readPixels()0.10.10.10.1
AudioContext Render8.57.19.07.7
Font measureText()0.10.10.10.1
All other APIs0.00.00.00.0

Fingerprint API Latency: Windows Host

Tested in both headless and headed modes.

APIHeadless StockHeadless BBHeaded StockHeaded BB
Canvas2D toDataURL()1.81.81.61.5
Canvas2D getImageData()0.70.60.60.6
WebGL readPixels()0.50.70.60.6
AudioContext Render10.59.18.910.8
Font measureText()0.30.30.30.3
All other APIs0.00.00.00.0

Note: The Windows test environment uses software rendering (no discrete GPU), resulting in higher Canvas/WebGL baseline latency compared to macOS. The relative overhead between Stock and BotBrowser remains zero.

Page Load: Windows Host

ModeStock ChromeBotBrowser + Android
Headless28.7ms27.9ms (-0.8ms)
Headed27.9ms27.1ms (-0.8ms)

Page Load: Linux Host

ModeStock ChromeBotBrowser + Android
Headless7.4ms8.4ms (+1.0ms)
Headed8.6ms6.9ms (-1.7ms)

Result: Fingerprint protection overhead is zero for all core APIs across all three platforms and both rendering modes.


Methodology

Test Configuration

SettingValue
Chrome version145
AutomationPlaywright (playwright-core)
Benchmark deploymentLocal HTTP server (no network dependency)
Test categoriesSpeedometer 3.0, Fingerprint API micro-benchmarks (13 APIs), Page load timing, Per-Context vs Multi-Instance scale

How to Reproduce

All benchmark scripts are available in docs/benchmarks/:

ScriptPurpose
bench-baseline.jsSingle-instance benchmark (Speedometer + Fingerprint API + Page load)
bench-scale.jsPer-Context vs Multi-Instance scale test
run-all.jsFull automated orchestration
fingerprint-bench.htmlFingerprint API overhead test page
config.jsPlatform detection and path configuration
utils.jsShared utilities (stats, memory sampling)

To run them:

# 1. Clone benchmark suites locally cd docs/benchmarks ./setup-benchmarks.sh # 2. Install dependencies npm install # 3. Set environment variables export BROWSER_PATH=/path/to/botbrowser/chrome export PROFILES_BASE=/path/to/your/profiles # 4. Run baseline benchmark (single instance) node scripts/bench-baseline.js --mode headless # 5. Run scale benchmark (per-context vs multi-instance) node scripts/bench-scale.js --mode headless --max-scale 50

Statistical Method

  • Benchmark suites: Warm-up run (discarded) + 3 interleaved measurement runs per configuration, median ± stddev reported
  • Fingerprint APIs: 1,000 iterations per API, median reported
  • Page loads: 10 measurements per configuration, median reported
  • Scale tests: Single run per scale level (deterministic setup)

Environment Details

macOS (primary test platform):

  • Apple M4 Max (16 cores), 64GB RAM
  • macOS 15.3, arm64

Linux (cross-platform verification):

  • Ubuntu 22.04, x64

Windows (cross-platform verification):

  • Intel Xeon (20 cores / 40 threads), 64GB RAM
  • Windows 11, x64

Summary

BotBrowser’s fingerprint protection engine is designed for production workloads:

  1. Zero measurable overhead on Speedometer 3.0: headless 42.7 vs 42.8 (-0.2%), headed 42.1 vs 41.8 (+0.7%)
  2. Zero fingerprint API overhead. Canvas, WebGL, Navigator, Screen, Font APIs show identical latency on macOS, Linux, and Windows, in both headed and headless modes
  3. Per-Context Fingerprint provides resource savings at scale with full fingerprint isolation:
    • 29% less memory at 50 concurrent profiles
    • 2x faster profile creation
    • 57% fewer OS processes
    • 100% canvas fingerprint isolation verified (each context produces a unique hash)
  4. Consistent across platforms, tested on macOS arm64, Linux x64, and Windows x64 with identical results

For enterprise users running concurrent fingerprint profiles, Per-Context Fingerprint (ENT Tier 3) delivers the same privacy protection with lower infrastructure cost and verified fingerprint isolation between contexts.

Related guides: Performance Optimization


Legal Disclaimer & Terms of Use Responsible Use Guidelines . BotBrowser is for authorized fingerprint protection and privacy research only.