Benchmarks

Performance measurements for Crawlingo's standard and stealthy fetch modes, auto-match scoring, streaming datasets, and selector types.

5 min read Updated July 2026
Methodology: All benchmarks run on a Linux x86_64 VM (8 vCPU, 16 GB RAM). HTTP target is an internal echo server with ≤1ms response time to measure Crawlingo overhead. Auto-match benchmarks use synthetic DOM trees of varying size. Streaming benchmarks use a URL list pointing to the echo server.

Request Throughput

Standard (HTTP/2, 50 concurrent)3,500 req/s
3,500 r/s
Stealthy (TLS fingerprint, 50 concurrent)1,800 req/s
1,800 r/s
Scrapy (Python async, 50 concurrent)~500 req/s
500 r/s
Playwright (browser-based)~50 req/s
50 r/s
ModeThroughputp50p95p99Memory
Standard (50 concurrent)3,50012 ms45 ms120 ms2.4 MB
Stealthy (50 concurrent)1,80028 ms95 ms250 ms3.1 MB

Selector Performance

Selector TypeThroughput
CSS850K ops/s
XPath310K ops/s
Regex1.2M ops/s
Text Anchor2.1M ops/s
After/Before1.8M ops/s

Auto-Match Scoring Time

Time to score all candidate nodes when a selector fails (Jaro-Winkler + Jaccard via Rayon parallel scoring).

DOM SizeScoring Time
100 nodes45 μs
1,000 nodes380 μs
10,000 nodes3.2 ms

Streaming Dataset Memory Usage

URL CountPeak MemoryElapsed Time
100 URLs8 MB0.8 s
1,000 URLs42 MB7.5 s
10,000 URLs85 MB72 s

Full Comparison Table

MetricCrawlingoScrapyPlaywright
Throughput (50 concurrent)3,500 req/s~500 req/s~50 req/s (browser)
p50 latency12 ms~120 ms~800 ms
p99 latency120 ms~2 s~8 s
Memory (idle session)2.4 MB~50 MB~200 MB
Self-healing selectorsBuilt-inManualManual
Stealth TLSBuilt-in(full browser)
Change detectionBuilt-in
Selector types5 (CSS/XPath/Regex/Text/Anchor)2 (CSS/XPath)3 (CSS/XPath/text)
Multi-SDKPython, Node.js, RustPython onlyJS, Python, C#, Java
Open sourceMITBSDApache 2.0