# Playwright Bandwidth: 1,000 Products, 68.45% Fewer Bytes

[All guides](https://proxylane.dev/blog) 

RESEARCH · 6 MIN READ

Three paired runs on Books to Scrape: 1,000 matching products, 18.38 MB versus 5.80 MB. Download the records, charts and reproducible Playwright code.

**Founder, ProxyLane** Published September 22, 2026

On this page [What came back](https://proxylane.dev/blog/playwright-product-bandwidth-benchmark#what-came-back)  [All three results](https://proxylane.dev/blog/playwright-product-bandwidth-benchmark#all-three-results)  [Where the bytes went](https://proxylane.dev/blog/playwright-product-bandwidth-benchmark#where-the-bytes-went)  [Price the measured bytes](https://proxylane.dev/blog/playwright-product-bandwidth-benchmark#price-the-measured-bytes)  [How we measured it](https://proxylane.dev/blog/playwright-product-bandwidth-benchmark#how-we-measured-it)  [Reproduce the result](https://proxylane.dev/blog/playwright-product-bandwidth-benchmark#reproduce-the-result)  [Use the finding on your workload](https://proxylane.dev/blog/playwright-product-bandwidth-benchmark#use-the-finding-on-your-workload)

**Residential proxies from $2/GB**

Non-expiring traffic, location targeting and rotating or sticky sessions for your existing tools.

 [Sign up](https://proxylane.dev/register?interest=proxies)

Blocking images, fonts and media cut browser-observed transfer by **68.45%**, while preserving every field of **1,000 product records**, in our Playwright experiment on Books to Scrape. Across three paired repeats, default resource loading transferred about **18.38 MB** per catalogue; blocking those resources transferred **5.80 MB**.

 

This is a measured result on a fictional, static scraping sandbox with the browser cache disabled. It measures completed-request HTTP bytes, not provider-billed traffic or performance on protected stores.

 

 

[Download records](https://proxylane.dev/assets/research/playwright-bandwidth/2026-09-22/records.csv)  |  [View code](https://github.com/ProxyLane/proxy-examples/tree/playwright-bandwidth-2026-09-22/research/playwright-bandwidth)  |  [Full-size chart](https://proxylane.dev/assets/research/playwright-bandwidth/2026-09-22/transfer-by-repeat.svg)

 

## What came back

 

These are the first three captured products. Both modes returned the same title, product URL, price, availability and rating for every record.

 

| Product | Price | Availability | Rating |
| --- | --- | --- | --- |
| [A Light in the Attic](https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html) | £51.77 | In stock | 3/5 |
| [Tipping the Velvet](https://books.toscrape.com/catalogue/tipping-the-velvet_999/index.html) | £53.74 | In stock | 1/5 |
| [Soumission](https://books.toscrape.com/catalogue/soumission_998/index.html) | £50.10 | In stock | 1/5 |

 

Source: Books to Scrape, captured 22 September 2026. These are the sandbox's fictional listing values, not live retail offers. The  [CSV](https://proxylane.dev/assets/research/playwright-bandwidth/2026-09-22/records.csv)  includes the URL, catalogue page, navigation start time, mode and repeat. Its 6,000 rows represent the same 1,000 products observed in two modes across three repeats.

 

## All three results

 

Each row below covers the full catalogue in both modes. MB uses decimal units. Reduction is calculated from unrounded bytes; downloadable tables retain exact counts.

 

| Repeat | Default MB | Blocked MB | Reduction |
| --- | --- | --- | --- |
| 1 | 18.380 | 5.799 | 68.451% |
| 2 | 18.380 | 5.799 | 68.449% |
| 3 | 18.380 | 5.799 | 68.450% |

 

The median reduction was **68.45%**. All 150 page pairs matched, with 1,000 unique product URLs in each mode per repeat.

 

There were **301 navigation attempts and 300 accepted results**. In repeat 3, the first lean-mode attempt at page 37 failed with `net::ERR_NETWORK_CHANGED`; its one permitted retry succeeded. The failed attempt captured no completed-request bytes. That does not establish zero network consumption: partial failed transfers are outside this measurement.

 

[Exact totals](https://proxylane.dev/assets/research/playwright-bandwidth/2026-09-22/repeat-totals.csv)  and  [every attempt](https://proxylane.dev/assets/research/playwright-bandwidth/2026-09-22/attempt-observations.csv)  are available separately.

 

## Where the bytes went

 

 

Per catalogue, default loading averaged **10.365 MB of images** and **2.216 MB of fonts**. Blocking removed their completed-request transfer. Scripts remained at about **3.642 MB**, stylesheets at **1.852 MB** and HTML at **0.305 MB** in both modes. No completed media requests were recorded, so this run establishes no separate benefit from blocking media.

 

We kept CSS, JavaScript and API requests enabled. This was a combined resource rule, not separate experiments attributing an effect to each type.  [Open the chart](https://proxylane.dev/assets/research/playwright-bandwidth/2026-09-22/resource-breakdown.svg)  for readable labels.

 

## Price the measured bytes

 

Using the mean observed transfer across the repeats gives these **modelled consumption costs per 1,000 accepted records**:

 

| Published rate | Default | Blocked |
| --- | --- | --- |
| $6.50/GB | $0.1195 | $0.0377 |
| $2.50/GB | $0.0459 | $0.0145 |

 

The  [rates checked on 22 September 2026](https://proxylane.dev/pricing)  require different purchases: $6.50 for 1 GB, or $2,500 for 1 TB. The fractions above are neither the checkout price nor an observed invoice.

 

The calculation is `observed bytes / 1,000,000,000 × USD per GB`. It excludes unmeasured failed transfers, connection/proxy/TLS overhead and compute. Use  [billing reconciliation](https://proxylane.dev/blog/proxy-bandwidth-billing)  before treating a browser measurement as paid traffic.

 

## How we measured it

 

We collected all 50 listing pages, 20 products each, three times per mode. Each page was paired with its counterpart; the order alternated. Navigations ran serially with a 300 ms gap, through an authenticated proxy. The manifest records the requested sticky-session configuration; exit location and continuity were not independently verified.

 

Both modes opened fresh browser contexts, blocked service workers and installed catch-all routing. This matters because  [Playwright routing disables HTTP cache](https://playwright.dev/docs/api/class-browsercontext#browser-context-route) . Comparing an intercepted run with ordinary cached browsing would introduce another variable.

 

The lean rule blocked only `image`, `font` and `media`. We waited for load, used fonts and in-flight requests, then validated the records. Default-mode images had to finish loading. Chrome blocked the sandbox's mixed-content jQuery request in both modes without a security override.

 

Transfer sums  [Playwright's request and response header/body sizes](https://playwright.dev/docs/api/class-request#request-sizes)  for completed requests across all attempts. No accepted page had missing byte observations. The run used Playwright 1.62.1 and Chrome 153.0.8010.53, from 12:46 to 13:17 UTC on 22 September 2026.

 

## Reproduce the result

 

The  [public repository](https://github.com/ProxyLane/proxy-examples/tree/playwright-bandwidth-2026-09-22/research/playwright-bandwidth)  contains the frozen runner, validators, raw observations and chart generator. Download the  [complete kit](https://proxylane.dev/assets/research/playwright-bandwidth/2026-09-22/reproducibility-kit.zip)  and  [checksums](https://proxylane.dev/assets/research/playwright-bandwidth/2026-09-22/SHA256SUMS)  if you prefer an archive.

 

From the kit's root, install the locked dependencies and run the validator:

 

```sh
npm ci
node --test research/playwright-bandwidth/core.test.mjs
```

 

To recollect, securely load `PROXY_URL` into your environment and follow the repository's browser setup and runner commands. To check the published numbers without making network requests, run its Python analyzer against the included dataset.

 

Two earlier full attempts stopped on proxy authentication and transport failures. Their data and the protocol change are preserved in the  [execution history](https://github.com/ProxyLane/proxy-examples/blob/playwright-bandwidth-2026-09-22/research/playwright-bandwidth/EXECUTION-HISTORY.md) ; none were spliced into this completed run.

 

## Use the finding on your workload

 

The  [sandbox operator](https://sites.toscrape.com/)  provides these pages for scraping practice. An HTTP client can collect this static catalogue without a browser or proxy. Our result answers a narrower question: how much browser resource loading costs when the required output is a text record.

 

For your own permitted target, define the required fields first, compare the same URLs in both modes, and reject missing or changed records before calculating savings. Keep XHR and scripts that supply the data. A page that loses a price or stock value has failed, however small its transfer becomes. The  [resource-blocking guide](https://proxylane.dev/blog/reduce-playwright-proxy-bandwidth)  covers that decision; the  [Playwright setup guide](https://proxylane.dev/blog/playwright-proxy)  covers connecting an existing browser workflow.

 

These three consecutive repeats on one image-heavy site do not predict savings, availability or anti-bot success elsewhere.

 

**Cite this study:** ProxyLane, “Playwright Bandwidth: 1,000 Products, 68.45% Fewer Bytes,” 22 September 2026. Include the static-sandbox and cache-disabled scope when quoting the result.

 

## Sources and further reading

- [https://sites.toscrape.com/](https://sites.toscrape.com/)

- [https://playwright.dev/docs/api/class-request#request-sizes](https://playwright.dev/docs/api/class-request#request-sizes)

- [https://playwright.dev/docs/api/class-browsercontext#browser-context-route](https://playwright.dev/docs/api/class-browsercontext#browser-context-route)

- [https://proxylane.dev/pricing](https://proxylane.dev/pricing)

[Sign up](https://proxylane.dev/register?interest=proxies)

## Keep reading

[Use cases · 3 min read

### Amazon Scraper API vs Proxy: Choose a Product Data Source

Distinguish authorized Amazon APIs, licensed product data and proxy-based page checks by record quality and access rights.

 Read guide](https://proxylane.dev/blog/amazon-scraper-api-vs-proxy)   [Integrations · 5 min read

### Apify Custom Proxy Setup: Use Your Own Residential Route

Connect a buyer-owned proxy to an Apify Actor, keep the session boundary clear, and validate records instead of counting requests.

 Read guide](https://proxylane.dev/blog/apify-custom-proxy)   [Proxy fundamentals · 6 min read

### Australia Residential Proxies: Verify the AU Exit and State-Level Result

Separate Australian egress from en-AU content, AUD pricing, GST display, postcode validation and the state delivery context.

 Read guide](https://proxylane.dev/blog/australia-residential-proxies)

Canonical source: https://proxylane.dev/blog/playwright-product-bandwidth-benchmark

Documentation index: https://proxylane.dev/llms.txt
