ScreenshotNeo

BlogHow-to

How to Check Network Strength and Load Images More Efficiently

Use DevTools to diagnose slow image requests, then serve responsive image sizes and load each image at the right time.

By the ScreenshotNeo team4 October 20268 min read

To check how network conditions affect image loading, open your browser’s DevTools, inspect the Network panel’s image requests, and reload the page with network throttling enabled. Compare request start times, transferred sizes, and priorities. Then reduce unnecessary image bytes with responsive srcset and sizes, lazy-load images below the fold, and keep the main visible image eager. A throttled browser test shows how your page behaves under a simulated connection; it does not measure a visitor’s Wi-Fi or cellular signal strength.

1. Diagnose slow image loading in DevTools

  1. Open the page in Chrome, Firefox, or another browser with developer tools. Open DevTools and select the Network panel.
  2. Enable the option to preserve the log if you need to follow requests across navigation, and make sure the browser cache is disabled if you want a comparable cold-load capture.
  3. Filter requests to images, then reload the page. Inspect the request URL, start time, duration, transferred size, and priority. Identify the largest image and the first important image visible to the reader.
  4. Use the Network panel’s throttling control to simulate a slower connection. Reload and observe whether the visible image starts promptly and whether offscreen images compete for bandwidth.
  5. Repeat at a narrow viewport and at the same viewport after each change. Compare the same page, cache state, and throttle profile.

There is no universal browser number that tells a site owner a visitor’s network strength. The useful diagnostic is how the page’s actual requests behave under a range of controlled conditions. DevTools resource priority and waterfall timing can help find images that are oversized, requested too early, or delaying visible content. See web.dev’s guidance on optimizing LCP.

What to record

Observation What it can indicate What to try
Large transferred image size on a small viewport The page may be sending a desktop-sized file to a mobile slot. Provide responsive candidates with srcset and an accurate sizes value.
Many offscreen image requests begin immediately Images the reader may not reach are competing with visible content. Use native lazy loading for below-the-fold images.
The main visible image starts late It may be lazy-loaded, discovered late, or competing with other high-priority work. Keep it eager; consider a high fetch priority hint only if the waterfall supports it.
Long wait before an image response begins The delay may be in request scheduling, connection setup, or the server response, rather than image decoding alone. Inspect timing details and compare against other resources and network profiles.
Small file but slow visual appearance Transfer size may not be the only bottleneck; decoding, layout, or late discovery may matter. Inspect the page’s performance trace and image dimensions as well as the network waterfall.

Throttling is a controlled simulation. It is useful for comparing page changes, but it does not reproduce every user’s radio conditions, device, browser, or real network path. Use field performance data as well as lab tests when it is available.

2. Serve an image sized for its rendered slot

Use srcset to offer width candidates and sizes to tell the browser how wide the image will be rendered at different viewport sizes. The browser can choose a candidate using the display context, pixel density, and network conditions. You can author these candidates yourself; a managed image service is optional.

<img
  src="/images/article-800.jpg"
  srcset="/images/article-400.jpg 400w,
          /images/article-800.jpg 800w,
          /images/article-1200.jpg 1200w"
  sizes="(max-width: 600px) 100vw, (max-width: 1000px) 80vw, 800px"
  width="1200"
  height="800"
  alt="A person reviewing a page on a laptop"
>

The sizes list should describe the image’s actual CSS layout. In this example, it fills the viewport on screens up to 600 pixels, takes 80% of the viewport up to 1000 pixels, and otherwise occupies an 800-pixel slot. Adjust those values to match your design. Intrinsic width and height help reserve space and reduce layout shifts.

When using density descriptors instead of width descriptors, specify alternatives for the same displayed dimensions, for example srcset="icon.png 1x, icon@2x.png 2x". Do not mix width descriptors (w) and density descriptors (x) in the same srcset. See web.dev’s responsive images guide.

Google Chrome’s web.dev article reports that serving desktop-sized images to mobile devices can use 2–4 times more data than needed. Treat that as the article’s comparison, not a guaranteed saving for every image, device, or page.

Markup or managed resizing?

Approach Useful when Tradeoff
Author srcset and sizes You want direct control over candidates and already have image variants. You need to produce and maintain appropriate variants and keep markup aligned with the layout.
Image delivery service Your site needs dynamic width variants or a managed image-delivery workflow. You depend on the service and its configuration. Cloudflare documents a width=auto option for automatic width selection.

A CDN or image service is not required to use responsive images. Cloudflare’s documentation describes its image transformation options at Transform images via URL; review current service documentation before adopting a specific option.

3. Load each image at the right time

Native lazy loading is appropriate for images that are below the fold and not needed immediately. Add loading="lazy" to those images:

<img
  src="/images/related-story.jpg"
  loading="lazy"
  width="800"
  height="533"
  alt="A related story illustration"
>

Keep images already visible, especially the likely Largest Contentful Paint (LCP) image, eager. Do not add loading="lazy" to the hero image just to defer requests. web.dev states: “Never lazy-load your LCP image, as that will always lead to unnecessary resource load delay, and will have a negative impact on LCP.” If testing shows the likely LCP image needs a priority hint, consider fetchpriority="high" for that image only:

<img
  src="/images/hero-1200.jpg"
  srcset="/images/hero-600.jpg 600w, /images/hero-1200.jpg 1200w"
  sizes="100vw"
  fetchpriority="high"
  width="1200"
  height="700"
  alt="The page’s main subject"
>

Use the hint sparingly. Raising one resource’s priority can affect competing resources. Confirm the result in the request waterfall instead of setting high priority on many images. Browser lazy-loading thresholds are implementation heuristics and can vary; do not rely on a fixed distance from the viewport.

4. Validate changes across viewports and conditions

  1. Capture a baseline in DevTools for a desktop and mobile viewport.
  2. Record the visible image’s start time and priority, total image transfer, and any large offscreen requests.
  3. Apply one change at a time: responsive candidates, lazy loading for below-the-fold images, or a priority hint for the likely LCP image.
  4. Repeat the reload with the same cache and throttling settings. Check that mobile receives an appropriate candidate and that the main image is not delayed.
  5. Review field performance data when available. A lab simulation helps isolate changes; field data reflects a wider set of real devices and connections.

Lazy loading can reduce initial requests and data for images a reader never reaches, while responsive candidates can avoid transferring unnecessarily large files. Deferring the image that makes the page feel loaded can have the opposite effect. Validate both bytes saved and visible-content timing.

Or skip the browser setup

For capturing a webpage as an image, ScreenshotNeo is a website screenshot API and MCP server. One GET request returns a PNG, JPEG, WebP, or PDF; see the ScreenshotNeo API documentation.

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,
)
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}`);
const bytes = new Uint8Array(await res.arrayBuffer());
await import('node:fs/promises').then(fs => fs.writeFile('shot.webp', bytes));

ScreenshotNeo accepts cookie or consent banners like a visitor and removes more than 60 known consent platforms, newsletter popups, and chat widgets before capture; each step can be turned off. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and response headers report the page verdict and billing status. Its MCP server lets Claude, Cursor, and other MCP clients use take_screenshot, get_page_info, and capture_pdf. The free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000 screenshots. Every feature is on every plan. Learn more at ScreenshotNeo, then sign up for 1,000 free screenshots a month with no card.

Troubleshooting

Symptom Likely cause Fix
Mobile still downloads the largest candidate sizes describes a wider slot than the CSS layout, or candidate widths are too far apart. Make sizes match the rendered slot and provide candidates around the sizes your layout uses. Inspect the selected request in DevTools.
The hero image appears later after adding lazy loading The visible or LCP image was marked lazy. Remove loading="lazy" from the hero and other immediately visible images; retest its request priority.
Many images show high priority A high priority hint was applied too broadly. Limit fetchpriority="high" to the single likely critical image when the waterfall supports it.
Images shift the page as they load The browser does not have reserved dimensions before image decode. Set intrinsic width and height, or reserve the image’s aspect ratio in CSS.
Throttling results vary between reloads Cache state, request scheduling, page content, and browser heuristics can differ. Use consistent viewport, cache settings, and throttle profile; compare several captures and use field data where available.
An image is missing after switching candidates A candidate URL may be wrong, inaccessible, or have a format/server issue. Open the failed request in DevTools, check its status and response, and verify every URL in srcset.

Performance, reliability, and cost considerations

  • Bytes: Responsive candidates target the displayed size and pixel density, reducing wasted transfer when the original is oversized. The actual savings depend on the page’s images and viewports.
  • Request competition: Lazy loading below-the-fold images can keep initial work focused on visible content. Lazy-loading the LCP image can delay it; a high priority hint can also change scheduling for other resources.
  • Reliability: Keep image URLs valid and test candidate variants. A missing candidate can cause a broken image, while incorrect intrinsic dimensions can produce layout shifts.
  • Cost: Smaller transfers can reduce bandwidth usage, but the impact on hosting or image-service charges depends on your provider’s pricing and traffic. A managed image service may reduce variant-generation work, but it introduces a service dependency and its own costs. Compare current plan terms before choosing one.
  • Measurement: Throttled tests are repeatable experiments, not guarantees of field experience. Use both controlled lab checks and real-user performance data when possible.

FAQ

How do I check my internet speed or network strength?

For a website you maintain, inspect its requests and test under throttled profiles to learn how it behaves under slower conditions. That does not measure an individual visitor’s signal strength; use a suitable connection test on that device for a personal internet-speed check.

Should I lazy-load every image?

No. Lazy-load images below the fold. Leave the main visible and likely LCP image eager so the browser can request it promptly.

Do I need an image CDN to serve responsive images?

No. You can create image variants and use srcset and sizes directly. A managed service is an option when dynamic resizing or delivery management fits your workflow.

Does network throttling reproduce a real mobile connection?

It provides a controlled simulation for comparing page behavior. It cannot reproduce every device, browser, carrier, or local network condition.