01 Performance

Verify every speed claim yourself

Most chat widgets ask you to take their word for it. Pengo’s is small enough to measure in a second. Weigh our script, paste any other one, and see the difference on your visitors’ connections.

Facade: 4.7 KB gzipped, committed fallback.

02 Weigh it

Transfer time at your visitor's connection

Pengo's facade is 4.7 KB gzipped (committed fallback). Drag the slider to see how long that takes on common connections.

Slow 3G 3G 4G Wi-Fi

4G · 9 Mbps

Pengo embed.js 0 ms

4.7 KB gz · committed fallback

03 Methodology

Small on load. Complete on intent.

Pengo splits the widget into three pieces and only loads each one when it is needed.

  1. 01

    Facade paints the bubble

    On page load

    The only script your page loads eagerly. It draws the chat bubble straight away from cached settings, with no network round trip on repeat visits.

  2. 02

    Loader waits its turn

    When the browser is idle, or on intent

    The rest of the widget code is fetched when the browser is idle (within about three seconds) or the moment a visitor hovers, focuses or taps the bubble. It is served from a content-hashed, cacheable URL, so repeat visits cost nothing.

  3. 03

    Chat opens on intent

    Hover, focus, touch or click

    The chat window is only loaded when a visitor shows they want it. Visitors who never chat never pay for it.

Measured at build, not typed in

The facade size on this site is calculated by gzipping the production embed script every time the site is built. If the script grows, this page shows it.

Zero layout shift by design

The bubble is position: fixed, so it never takes part in your page layout. Its contribution to Cumulative Layout Shift is zero, no matter when it appears.

Live measurement, server-side

When you paste a script URL, the Pengo benchmark API fetches it from our server (with SSRF protection and rate limits), gzips it and returns the real size. No stored or stale competitor numbers.

Transfer time, shown honestly

Transfer time is bytes × 8 ÷ connection speed. It leaves out DNS, TLS and server latency, so treat it as the best case for every script, including ours.

04 What we measure

Every number, and how to check it

No benchmark you have to take on faith. Each row says where the number comes from and how to reproduce it.

Metric How it is measured Check it yourself
Facade size (gzipped) Production embed script gzipped at site build DevTools → Network → embed.min.js
Any script’s size (gzipped) Fetched and gzipped live by the benchmark API Paste the URL in the tool above
Transfer time Size × 8 ÷ Slow 3G, 3G, 4G or Wi-Fi bandwidth DevTools → Network throttling
Layout shift (CLS) Fixed-position bubble, outside page layout Lighthouse or PageSpeed Insights
What loads eagerly Only the facade; loader on idle or intent DevTools → Network, filter “pengo”
When the chat window loads On hover, focus, touch or click of the bubble Watch Network while hovering the bubble
05 Run it yourself

Don't trust the bar chart. Open DevTools.

The tool above is our live benchmark. For the full picture on your own site, these four steps take about two minutes.

  1. 01

    Open DevTools

    On any page running Pengo, open the Network tab and reload.

  2. 02

    Find the facade

    Filter for “embed”. The transferred size is the gzipped facade.

  3. 03

    Throttle the connection

    Pick “Slow 3G” and reload. The bubble still appears without moving anything.

  4. 04

    Run Lighthouse

    Compare Performance and CLS with the widget on and off.

06 Questions

Performance questions

Is this the live benchmark?
Yes. The “Weigh it” tool on this page is the live benchmark: paste any chat script URL and Pengo’s benchmark API fetches and gzips it in real time. Our own facade size is measured from the production script every time this site is built.
Why measure gzipped size?
Browsers download scripts compressed, so the gzipped size is what actually travels over your visitor’s connection. We show both the facade size and the time it takes on common connections.
Does a small first script tell the whole story?
Not always. Many widgets load more files after the first one. The paste-a-URL tool measures only the script you paste, so for a complete picture, open DevTools and compare everything a widget loads before the visitor interacts.
What does “zero CLS” mean?
Cumulative Layout Shift measures content jumping around as a page loads. Pengo’s bubble is fixed-position, so it never pushes your content, and its contribution to CLS is zero.
Do visitors who never chat still download the full widget?
The loader is fetched once the browser is idle so the chat is ready when needed, and it is cached after the first visit. The chat window itself only loads when a visitor hovers, focuses, taps or clicks the bubble.

Live chat that stays out of your page's way

Install in five minutes. Your AI agent is answering before your coffee cools.

Free plan forever · 14-day Team trial, no card · Cancel anytime

Start free