Skip to content
Bugwise
Menu
Web Testing

Performance Basics

Why speed is a quality issue, what Core Web Vitals mean, and how a manual tester measures, explains and reports a slow page with DevTools, Lighthouse and PageSpeed Insights.

30 min beginner Web

It’s Black Friday. A fashion shop launches a new product page with a gorgeous full-screen photo. On the office Wi-Fi it looks perfect. On a phone on a train, customers stare at a blank white screen for six seconds, then the photo slowly paints in, then a promo banner pops in and pushes the “Add to cart” button down just as they tap it. They tap the banner by mistake. Many of them leave.

Nothing was “broken” in the functional sense. Every button worked. But the page failed for the people who mattered most. That’s why performance is a quality issue, and why testers should notice it, measure it and report it well.

Why it matters

  • Users leave. Google’s research found that as mobile page load time goes from 1 to 3 seconds, the chance that a visitor bounces rises by about a third. Slow checkouts mean abandoned carts.
  • Frustration and mistakes. Content that jumps around makes people tap the wrong thing: the wrong product, the wrong amount, an ad.
  • Search ranking. Google uses page experience signals, including Core Web Vitals, as part of its ranking.
  • Cost and fairness. Many users are on cheap phones and expensive mobile data. A 4 MB image costs them real money and battery.

Perceived vs real performance

There are two kinds of “fast”:

Real performancePerceived performance
What it isMeasured time: how many seconds until things loadHow fast it feels to the user
ExamplesLoad time, bytes transferred, server response timeSomething useful appears quickly, skeleton screens, instant feedback on taps
Example bugThe page needs 7.4 MB and 14 requests to show a productThe page shows a blank screen for 3 seconds, even though the total load is only 4 seconds

A page that shows the main content in 1 second and finishes loading the footer later feels faster than one that shows everything at once after 3 seconds. Testers should report both: the numbers, and how it felt.

Core Web Vitals in one table

Core Web VitalsCore Web VitalsGoogle's key page experience metrics: loading (LCP), responsiveness (INP) and visual stability (CLS).Open in glossary → are Google’s three key metrics for user experience. Learn these thresholds; you’ll see them in every tool:

MetricMeasuresGoodNeeds improvementPoor
LCP: Largest Contentful PaintLoading. When the biggest visible element (hero image, headline) appears≤ 2.5 s2.5–4 s> 4 s
INP: Interaction to Next PaintResponsiveness. How long the page takes to visibly react after a tap, click or key press≤ 200 ms200–500 ms> 500 ms
CLS: Cumulative Layout ShiftVisual stability. How much content unexpectedly jumps around≤ 0.10.1–0.25> 0.25

Page load lab

This lab simulates loading a shop page. It starts on Fast 4G with a 4× CPU slowdown. (Lighthouse’s mobile test uses the same 4× CPU slowdown with an even slower network, similar to Slow 4G, to imitate a mid-range phone.) Try this:

  1. Look at the waterfall. Which bar is longest? Notice app.js is marked blocking: nothing appears until it’s done.
  2. Replay the load and watch the filmstrip. When is the screen blank? When does content jump (red ⚡)?
  3. Tap “Add” on the first product and feel the delay. That’s INP.
  4. Turn the fixes on one at a time and see which metric each one improves.
  5. Change the network to Slow 4G or 3G, and the CPU to no throttling. How different does the same page look on a fast laptop?

Page load lab

A simulated load of a shop page. Throttle the network and CPU like in DevTools, switch fixes on, and watch the waterfall and Core Web Vitals react.

Fixes

LCP

3.2 s

Needs improvement

INP (Add tap)

680 ms

Poor

CLS

0.28

Poor

FCP

3.0 s

Poor

Requests

14

on first load

Transferred

7.4 MB

over the network

Network waterfall

FCP LCP Fully loaded waiting
NameSize04.0 s
  • shop.example.com30 KB
  • styles.css60 KBblocking
  • app.js480 KBblocking
  • inter.woff240 KB
  • logo.svg4 KB
  • hero.jpg2.5 MB
  • api/products25 KB
  • promo.js (ads cdn)45 KB
  • product-1.jpg700 KB
  • product-2.jpg700 KB
  • product-3.jpg700 KB
  • product-4.jpg700 KB
  • product-5.jpg700 KB
  • product-6.jpg700 KB
ShopCo
Free delivery over €30 · today only

Summer sale
up to −30%

Bestsellers

Linen shirt

€29

Straw hat

€19

Sandals

€39

Sunglasses

€24

Beach towel

€15

Tote bag

€22
Layout shift +0.04

When products appear, tap “Add” and feel the delay

7.6 s

Filmstrip

  • +0.14at 3.2 s: Hero image loaded without reserved space and pushed the text down
  • +0.10at 3.3 s: Promo banner was inserted above the content
  • +0.04at 7.6 s: Product images without width/height made the cards grow

Simplified model for learning: real browsers prioritize requests and calculate CLS in time windows, but the cause and effect is the same.

What manual testers can observe and measure

The waterfall (DevTools Network panel)

The Network panel (new to it? see DevTools for Testers) lists every request the page makes, with a waterfall showing when each started and finished. Read it like this:

  • Long bars = slow downloads (big files) or slow servers (long waiting time).
  • Waiting (TTFB) in the Timing tab = the server is slow. Report to the backend team.
  • Many bars stacked one after another = requests that depend on each other (a “chain”): script → API → images.
  • Size column: anything over a few hundred KB for an image is suspicious. “(memory cache)” or “(disk cache)” means it wasn’t downloaded.
  • Repeated rows with the same URL = the same data fetched many times.
  • At the bottom: total requests, transferred bytes, and Load time.

Common things to look for

#ProblemWhat you seeTypical severity
1Huge imagesA 3–5 MB photo for a 400 px wide slot. Hurts: LCPHigh
2Render-blocking scripts or CSSBlank screen until a large file in the head downloads. Hurts: FCP, LCPHigh
3Slow API or serverLong “Waiting (TTFB)” bar; spinner for seconds. Hurts: Perceived speed (LCP if it holds the main content)High
4Layout shiftsContent jumps when an image, ad, banner or font loads. Hurts: CLSMedium–High
5Too many requestsDozens of small files, or the same call repeated. Hurts: Load time, server loadMedium
6Slow interactionsTap “Add to cart”, nothing happens for half a second. Hurts: INPHigh
7No cachingSecond visit downloads everything again. Hurts: Load time, data usageMedium
8Memory leakThe tab gets slower and slower after 20 minutes of use, then crashes. Hurts: Responsiveness, crashesMedium–High

Lab data vs field data

  • Lab data comes from a test you run in a controlled setup: Lighthouse, DevTools, WebPageTest. It’s repeatable and great for debugging, but it’s one device, one network, one moment.
  • Field data comes from real users on real devices. Google’s Chrome UX Report (CrUX) collects it from Chrome users who opted in, and PageSpeed Insights shows it at the top of the report (for pages and sites with enough traffic), based on the last 28 days. Core Web Vitals are judged at the 75th percentile: 3 out of 4 visits should be “good”.

If lab and field data disagree, both can be right: maybe your test was on a fast network but real users are on slow phones, or the slow part only happens after interactions that Lighthouse doesn’t do.

Find the culprits

Here’s a recorded waterfall from a slow sneaker product page, as you’d capture it in DevTools. It has five performance problems. Use the filters, sort by size or time, and click requests to read their details.

🐞 Bug hunt: Sneaker product page waterfall

This demo has 5 hidden bugs. Explore it like a tester, then check your findings.

Found0/5

Lighthouse-style summary · Fast 4G, 4× CPU

LCP

5.0 s

Poor

CLS

0.19

Needs improvement

FCP

2.4 s

Needs improvement

Requests

33

5.7 MB transferred

LCP element: img.hero

NameSize04.0 s
Layout shifts⚡

Click a request to see its details, like the Headers and Timing tabs in DevTools. The ⚡ marker on the bottom track is a layout shift.

  1. 1

    Hint: Sort by Size. Then check which element is the LCP element.

  2. 2

    Hint: Which file must finish before anything is painted? Look at the Render-blocking field.

  3. 3

    Hint: Filter by Fetch/XHR and look at the Waiting (TTFB) time of each request.

  4. 4

    Hint: Look at the Layout shifts track and open its details.

  5. 5

    Hint: Filter by Fetch/XHR and count the rows with the same name.

Now decide what to do about each problem:

🔧 Match the fix

For each culprit from the waterfall, choose the best fix and the Core Web Vital it improves.

  1. 1hero-sneakers.jpg is 4.2 MB

  2. 2app.bundle.js (1.1 MB) is render-blocking

  3. 3api/recommendations waits 3.1 s for the server

  4. 4Late promo banner shifts the page by 0.19

  5. 5api/cart/count is requested 20 times

Answer all five to check.

Writing a useful performance bug report

“The page is slow” can’t be fixed. A good performance report is specific and measurable, so a developer can reproduce it and confirm the fix. Include:

  • Conditions: device (or “MacBook, Chrome 4× CPU throttling”), browser and version, network (Wi-Fi, “Fast 4G” throttling), cache disabled or not, logged in or not, first or repeat visit.
  • Numbers: LCP, CLS, INP or TBT, load time, transferred size, and the slow request with its timings. Measure 3–5 times and give the median, because single runs vary.
  • The culprit, if you found it: “hero-sneakers.jpg is 4.2 MB”, “api/recommendations TTFB 3.1 s”.
  • Before/after or comparison: “Was 2.1 s LCP in release 4.12, 5.0 s in 4.13”, or “Competitor page loads in 1.8 s on the same setup”.
  • Evidence: a screen recording or the Performance panel’s screenshots, a Lighthouse report (save as HTML or JSON), and a HAR fileHAR fileA file that records every network request and response a web page made.Open in glossary → exported from the Network panel.

Measurable

Product page: LCP 5.0 s on Fast 4G due to 4.2 MB hero image (was 1.9 s in 4.12)

Chrome (latest), Lighthouse mobile, cache disabled, median of 5 runs. LCP element: img.hero (hero-sneakers.jpg, 4.2 MB, 4.4 s download). Lighthouse report and HAR attached.

Vague

Product page slow

The product page takes forever to load on my phone. Please make it faster.

See How to Write Bug Reports for the general structure.

Tools and how to use them

Lighthouse (in Chrome DevTools)

  1. Open the page in a Chrome Incognito window (extensions can skew results).
  2. Open DevToolsDevToolsDeveloper tools built into browsers for inspecting pages, network traffic and errors.Open in glossary → (F12 or Cmd+Option+I) and go to the Lighthouse tab.
  3. Choose Navigation mode, device Mobile, and the Performance category.
  4. Click Analyze page load. lighthouseLighthouseA free tool in Chrome DevTools that audits a page's performance, accessibility, SEO and best practices.Open in glossary → loads the page with simulated mobile throttling and gives a score from 0 to 100, the metrics, and a list of Insights/Diagnostics like “Improve image delivery” or “Render-blocking requests”.
  5. Run it 3 times: scores vary from run to run. Treat the score as a summary; the individual metrics and diagnostics are what you report.

DevTools Network panel

DevTools Performance panel

  • Open the Performance panel. Its landing view shows live LCP, CLS and INP for your own interactions on the page, so you can measure INP manually: click around and watch the number.
  • Use the CPU throttling setting (4× or 6× slowdown) to imitate a mid-range or low-end phone.
  • Click Record and reload to capture a load with screenshots (a filmstrip), long tasks on the main thread, and a Layout shifts track.
  • In More tools › Rendering, tick Layout shift regions to flash a highlight wherever content shifts.

PageSpeed Insights

Go to pagespeed.web.dev and enter a public URL. The top section shows field data from real Chrome users (if the page has enough traffic); the bottom shows a Lighthouse lab run from Google’s servers. It’s the quickest way to see whether real users have a problem.

Example test cases

TC-PERF-001Product page meets LCP target on a mobile profile

Preconditions

  • Chrome Incognito
  • Lighthouse: Mobile, Navigation, Performance

Steps

  1. Open the product page
  2. Run Lighthouse 3 times
  3. Note LCP and the LCP element for each run

Expected result

Median LCP is 2.5 s or less. The LCP element is the product image or title.

TC-PERF-002No large layout shifts while the page loads

Preconditions

  • DevTools › Rendering › Layout shift regions enabled
  • Network: Slow 4G

Steps

  1. Reload the page
  2. Watch for highlighted regions until loading finishes
  3. Check CLS in the Performance panel

Expected result

CLS is 0.1 or less. Banners, images, ads and fonts do not push visible content around.

TC-PERF-003"Add to cart" responds quickly on a slow device

Preconditions

  • Performance panel open, CPU 4× slowdown

Steps

  1. Wait for the page to load
  2. Tap "Add to cart" 3 times on different products
  3. Read INP in the live metrics

Expected result

Each interaction shows visual feedback within 200 ms (INP ≤ 200 ms).

TC-PERF-004Images are reasonably sized

Preconditions

  • Network panel open, Disable cache ticked

Steps

  1. Reload the page
  2. Filter by Img and sort by Size

Expected result

No image is larger than the agreed budget (e.g. 300 KB). Images below the fold load only when scrolled near.

TC-PERF-005No duplicate API requests on page load

Steps

  1. Reload the page with the Network panel open
  2. Filter by Fetch/XHR
  3. Look for identical URLs

Expected result

Each API endpoint is called once per page load, unless the requirements say otherwise.

TC-PERF-006Repeat visit uses the cache

Preconditions

  • Disable cache NOT ticked

Steps

  1. Load the page once
  2. Navigate away and back, or reload

Expected result

Static files (CSS, JS, fonts, images) come from memory or disk cache; transferred size drops significantly.

Tip: click a test case to expand it.

Checklist

Performance test checklist

0 of 13 checked

Check your understanding

Quick quiz

0/5 answered · 0 correct

  1. 1.What is the "good" threshold for Largest Contentful Paint?

  2. 2.A banner appears late and pushes the product down. Which metric gets worse?

  3. 3.In the Network panel, a request spends 3 s in "Waiting for server response" and 20 ms downloading. What is the likely cause?

  4. 4.Lighthouse shows LCP 1.8 s, but PageSpeed Insights field data says real users see 4.2 s. Which statement is best?

  5. 5.Which detail makes a performance bug report most useful?

Key takeaways

  • Performance is a quality issue: slow and jumpy pages lose users and cause mistakes.
  • Know the Core Web Vitals: LCP ≤ 2.5 s, INP ≤ 200 ms, CLS ≤ 0.1.
  • Always test with network and CPU throttling: your laptop is much faster than most users’ phones.
  • In the waterfall, look for huge files, render-blocking scripts, slow server waits (TTFB), repeated requests and late content that shifts the layout.
  • Lab data (Lighthouse, DevTools) helps you debug; field data (PageSpeed Insights / CrUX) shows what real users experience.
  • Report performance bugs with conditions, numbers from several runs, the culprit, a comparison and evidence (Lighthouse report, HAR, recording).
  • Load and stress testing (JMeter, k6) is a separate specialty.

Finished this page?Nice work, this page is complete!

Mark it as done to track your progress. It's saved in this browser, no account needed.

Its review cards are now in Bites ⚡
Esc

Type to search the whole site.