ScreenshotNeo

BlogComparisons

Best Performance Testing Tools for Websites

Compare website performance testing tools by the question they answer: real-user data, page audits, visual diagnosis, monitoring, or scripted journeys.

By the ScreenshotNeo team4 October 202610 min read

Short answer: Start with Google PageSpeed Insights for a URL-level report that can combine Lighthouse lab diagnostics with real-user field data. Use Lighthouse for focused, repeatable audits; WebPageTest for detailed load timelines and visual comparisons; GTmetrix for reports and recurring monitoring; and Grafana k6 browser for scripted user journeys and automated thresholds. No one tool answers every performance question.

Choose based on the evidence you need. A page audit helps diagnose one load. Field data describes sampled visitors’ experience. A scripted browser journey can track a workflow. Testing many simultaneous users requires a separate workload and load-testing plan.

1. Choose a tool by the question

Tool Best for What it provides Limit to keep in mind
Google PageSpeed Insights A free first look at an individual URL Lighthouse lab diagnostics plus Chrome UX Report (CrUX) field data when there are sufficient samples; mobile and desktop reports. URL-level field data may be unavailable. In that case, PSI may show origin-level data or no field data.
Google Lighthouse Focused audits and repeatable local or automated checks Performance and other page-quality audits through Chrome DevTools, PSI, the command line, or Node workflows. A simulated lab run without user interaction cannot directly measure INP.
WebPageTest Detailed synthetic tests and visual diagnosis Configurable browser and location tests, load details, visual comparisons, Lighthouse and Core Web Vitals reporting. Match test location and profile when comparing results. Features can depend on plan.
GTmetrix Readable reports and recurring monitoring Lighthouse-powered reports, CrUX metrics, waterfalls, visual playback, scheduled monitoring and alerts. Its grade and structure metrics are product-specific. Compare the underlying measurements under matched conditions.
Grafana k6 browser Scripted browser journeys in an automated workflow Browser Web Vitals metrics and threshold checks for workflows you script. Results depend on script behavior, navigation, aggregation and version. This is a different workflow from a one-URL audit.

When you compare website speed tools, treat each report as evidence collected under particular conditions, not as a universal ranking of your site. PageSpeed Insights is often the best starting point because it can put simulated diagnostics beside field data. For a failure you can reproduce, move to Lighthouse or WebPageTest. For a recurring workflow, use k6 browser.

2. Understand field data, lab data, and Core Web Vitals

Lab data comes from a controlled, simulated page load. It is useful for reproducing conditions and finding likely causes. Field data is collected from real users and reflects the devices, networks, and interactions represented in the available sample. A good Lighthouse lab score does not guarantee that visitors have a good experience.

PageSpeed Insights uses Lighthouse for lab diagnostics and CrUX for field data when enough observations are available. Field data may be missing for a specific URL or available only at the origin level. Do not read an absent URL-level dataset as proof that a page is fast or slow. See Google’s PageSpeed Insights documentation.

Google’s current Core Web Vitals are Largest Contentful Paint (LCP), Interaction to Next Paint (INP), and Cumulative Layout Shift (CLS). The good thresholds are:

  • LCP: 2.5 seconds or less.
  • INP: 200 milliseconds or less.
  • CLS: 0.1 or less.

Classify field experience using the 75th percentile, separately for mobile and desktop. A site meets the assessment when the 75th percentile is in the good range for all three metrics, subject to Google’s data-availability rules. These thresholds describe user experience; they are not scores or guarantees for any particular tool or site. See web.dev’s Core Web Vitals guidance.

INP measures responsiveness across interactions, so a page-load simulation without user input cannot directly produce the same evidence as field observations or a test that performs interactions. Use a scripted journey when you need to exercise a meaningful interaction.

3. Run a practical performance testing workflow

  1. Define the question. Decide whether you need real-user experience, a reproducible page diagnosis, visual load behavior, recurring monitoring, or a scripted workflow.
  2. Record the page and conditions. Note the URL, mobile or desktop profile, browser, test location, network profile, cache state and test date where available.
  3. Check field data first when user experience is the concern. Open the URL in PageSpeed Insights. Record whether metrics are URL-level, origin-level, or unavailable.
  4. Run a lab audit to investigate. Use Lighthouse or PSI diagnostics to identify candidate causes. Treat audit opportunities as leads to investigate, not proof of what every visitor experiences.
  5. Inspect loading visually when timing matters. Run WebPageTest or GTmetrix and examine the waterfall and visual progression to see which resources and page elements appear when.
  6. Automate the important journey. If a user must search, sign in, or open a key page, script those actions with k6 browser and define thresholds for the metrics that matter.
  7. Repeat and compare like with like. Use the same device, browser, network, location and cache conditions as far as possible. Repeat surprising results; one run can vary.
  8. Validate with field data after changes. Lab improvements help diagnose the page, while field measurements show whether sampled users’ experience changed.

4. Tool details and runnable examples

PageSpeed Insights: URL-level lab and field report

Open PageSpeed Insights, enter a page URL, and inspect mobile and desktop separately. Check the field-data scope before interpreting it: URL, origin, or unavailable. Then use the Lighthouse diagnostics as investigation pointers. PSI is a hosted report, so there is no local setup required for a manual check.

Lighthouse: local repeatable audit

In Chrome, open the target page, open DevTools, select Lighthouse, choose the relevant categories and device mode, and run the report. For automation, Lighthouse can also be run from its command-line or Node.js workflows; consult the official Lighthouse documentation for current installation and command options. Keep the same browser and device profile for comparisons. A lab audit does not replace field data.

WebPageTest: configurable load analysis

Use WebPageTest when you need to choose a test browser or location and inspect visual comparisons and page-load detail. Save the test profile alongside results so later runs use equivalent settings. Its available options and API access can depend on the plan.

GTmetrix: report history and monitoring

Use GTmetrix when recurring monitoring, alerts, waterfalls, and readable reports fit your workflow. Review the underlying metrics and test conditions in addition to its product-specific grade. Location and API access may depend on plan.

k6 browser: script a real journey

This runnable JavaScript example opens a page, waits for navigation, and prints browser Web Vitals. It illustrates a single journey; adapt the URL, actions and thresholds to your application. Install k6 with its browser support according to the official k6 browser documentation.

import { browser } from 'k6/browser';
import { check } from 'k6';

export const options = {
  scenarios: {
    page_journey: {
      executor: 'shared-iterations',
      vus: 1,
      iterations: 1,
      options: {
        browser: { type: 'chromium' },
      },
    },
  },
  thresholds: {
    browser_web_vital_lcp: ['p(75)<2500'],
    browser_web_vital_inp: ['p(75)<200'],
    browser_web_vital_cls: ['p(75)<0.1'],
  },
};

export default async function () {
  const page = await browser.newPage();
  try {
    const response = await page.goto('https://example.com/');
    check(response, {
      'page returned a successful response': (r) => r && r.status() >= 200 && r.status() < 400,
    });
    await page.waitForLoadState('networkidle');
  } finally {
    await page.close();
  }
}

Thresholds are checks against the data emitted by this script; they do not make one iteration a statistically robust p75 estimate. Use enough representative runs and the appropriate aggregation for your decision. Add user interactions to measure responsiveness in the journey. Browser tests consume more resources than a simple HTTP request, and a single virtual user is not a concurrency or server-capacity test.

5. Compare results without chasing misleading scores

  • Normalize test conditions. Location, browser/device, network, cache state and method can change results. Match them before comparing tools or runs.
  • Separate field from lab. Do not compare a CrUX field percentile directly with one Lighthouse simulation as though they measured the same population and conditions.
  • Use repeated runs for synthetic tests. If one result is surprising, repeat it and inspect variation before drawing a conclusion.
  • Look at metric definitions. A vendor grade or structure score is not a universal standard. Check the underlying LCP, INP, CLS, timings and test setup.
  • Keep the question narrow. Page audits answer how a page load behaved. Scripted checks answer how a journey behaved. Load tests answer how a system handles a defined workload.

6. Website performance troubleshooting

PageSpeed Insights shows no field data

Cause: The URL may not have enough CrUX observations, or the report may not have URL-level data. Fix: Check whether PSI provides origin-level data, and use lab diagnostics for a page-specific investigation. Do not infer real-user performance from missing data.

PageSpeed Insights and GTmetrix show different scores

Cause: The tools can use different locations, devices, network conditions, cache states, measurement methods and run timings. Fix: Match conditions as closely as the tools allow, compare underlying metrics, and repeat runs. Do not treat product grades as interchangeable.

Lighthouse looks good but users report slowness

Cause: A lab simulation may not represent users’ devices, networks, page state or interactions. Fix: Check available field data by device, inspect the reported user journey, and test the relevant interaction. Lab scores alone do not establish field experience.

INP is missing from a lab report

Cause: A page-load simulation without user input cannot measure interaction responsiveness directly. Fix: Use field data where available or a browser workflow that performs the relevant interactions, and interpret its aggregation appropriately.

Repeated runs vary

Cause: Network, server response, cache state, third-party resources, test location and browser conditions vary. Fix: Record the profile, repeat the run, and investigate stable patterns instead of optimizing around one outlier.

A page audit passes, but the site slows under load

Cause: A one-page audit does not create concurrent user demand. Fix: Define a workload and use a load-testing approach for server capacity; keep browser journey metrics as a separate view of user-perceived behavior.

k6 browser thresholds fail or produce confusing results

Cause: The script may not perform the intended journey, may close before relevant work completes, or may have too few observations for a percentile to be meaningful. Version and aggregation choices also matter. Fix: verify navigation and interactions, collect enough representative runs, and check the installed k6 browser documentation for current metric names and threshold syntax.

7. Performance, reliability, and cost considerations

Free entry points such as PSI and Lighthouse are useful for ad hoc diagnosis, but they do not automatically provide a monitoring history or a scripted application journey. Hosted report tools may offer recurring checks, more locations or API access on plan-dependent terms; verify current plan details directly before choosing. The dossier does not establish current prices for these tools.

Automated browser runs require more resources and careful script maintenance than a basic URL audit. Keep journeys small and representative, avoid treating a browser check as a load test, and make thresholds reflect user impact. Use repeated data, matched conditions, and field validation for reliable decisions. None of these tools guarantees a ranking or conversion change from a higher score.

For visual evidence of a page or release, ScreenshotNeo can capture a clean screenshot, but a screenshot is not a performance measurement and does not replace the tools above. ScreenshotNeo is a website screenshot API and MCP server; its capture options include full-page screenshots, device viewports, custom waits and CSS, and screenshots are billed only when the capture is clean. See the ScreenshotNeo API documentation.

8. Or skip the browser setup

For a visual capture alongside performance diagnostics, call the ScreenshotNeo API once:

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
import requests

r = requests.get(
    "https://api.screenshotneo.com/v1/shot",
    params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"},
    timeout=90,
)
r.raise_for_status()
open("shot.webp", "wb").write(r.content)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`Screenshot request failed: ${res.status}`);
await Bun.write('shot.webp', new Uint8Array(await res.arrayBuffer()));

Replace the example URL with the page you want to capture. The service removes cookie banners, newsletter popups and chat widgets before the shot; bot checks, blank pages and failed loads are never billed. An MCP server lets AI agents take screenshots. The free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000 screenshots. Sign up for 1,000 free screenshots a month, with no card.

9. Frequently asked questions

Which tool measures Core Web Vitals?

PageSpeed Insights can show CrUX field data when sufficient observations exist, and Lighthouse provides lab diagnostics. k6 browser can emit browser Web Vitals for scripted journeys. Check whether a report is field or lab data before interpreting it.

Is a PageSpeed score the same as website speed?

No. It is a report score from a particular test method and conditions. Use the reported metrics and field evidence to understand user experience.

Which website performance tool should I use first?

Use PageSpeed Insights for a quick page-level view that may include both lab and field evidence. Choose another tool when you need controlled reproduction, visual detail, monitoring, or a scripted workflow.

Do these tools test how many concurrent users a server can handle?

A page audit does not. k6 browser can automate journeys, but capacity testing requires a separately designed workload and load-testing plan.

Can a screenshot API replace a speed test?

No. A screenshot records visual output. Use a performance testing tool for timings, Web Vitals, waterfalls, or workload behavior.