Chrome DevTools’ Network panel gives you a request-by-request view of what a page loads, how long each operation takes, and where failures occur. This practical workflow shows how to debug slow network requests, inspect API calls, distinguish server delays from browser or DNS problems, and verify that a performance fix actually worked.
Overview
The Network panel is most useful when you treat page speed as a sequence of measurable events rather than a single score. A page may feel slow because the initial document waits on the server, a JavaScript bundle is unnecessarily large, an API request is blocked, a third-party script delays rendering, or a cached resource is not being reused. The panel helps you separate these cases.
To begin, open Chrome DevTools, select Network, and reload the page. Reloading with the panel open records the document request and the resources requested during page startup. If you are investigating an interaction, such as submitting a form or opening a dashboard, clear the existing entries when appropriate and record the action again.
Before drawing conclusions, make the test repeatable. Use the same URL, browser state, viewport, and approximate connection conditions. A request can look different on a warm cache than on a first visit, and local development may not represent production infrastructure. Record whether you are testing a fresh load, a repeat load, or a specific user action.
What to track
1. Request type, status, and initiator
Start with the request list. The name and type indicate whether you are looking at a document, stylesheet, script, image, font, fetch, or another resource. The status code tells you whether the server returned a successful response, a redirect, a client error, or a server error. A request that fails may explain a visible problem even when the page continues loading.
Use the Initiator information to find what caused a request. A script may create an API call, a stylesheet may trigger a font request, or a redirect may lead to another document request. Following this chain is often faster than searching the codebase for a URL. For status-code context, see the HTTP status codes troubleshooting guide.
2. The waterfall and timing phases
The waterfall visualizes when each request starts and how long it remains active. Select a request and open its timing details to break the duration into phases. Labels can vary slightly by browser version, but the underlying questions are consistent:
| Phase or indicator | What it can suggest | What to check next |
|---|---|---|
| Queueing or stalled | The browser is waiting before it can send the request. | Look for connection limits, priority, extensions, or many competing resources. |
| DNS lookup | The hostname is being resolved. | Compare hosts and check whether a slow or unnecessary domain is involved. |
| Initial connection or SSL | The browser is establishing a connection or negotiating security. | Check whether many requests use separate hosts or whether connection setup dominates. |
| Request sent | The browser is transmitting the request. | Inspect request headers, method, and payload size, especially for uploads or large bodies. |
| Waiting for server response | The request was sent, but the first response byte has not arrived. | Investigate application work, database queries, upstream APIs, and server logs. |
| Content download | The response body is arriving. | Check response size, compression, payload shape, and connection throughput. |
A long bar does not always mean the same problem. A long waiting period points toward server or upstream latency, while a long download period may point toward payload size or network capacity. Compare the timing breakdown instead of relying only on the total duration shown in the request list.
3. Size, transfer, and caching
Record both the resource size and the transferred size when they are available. A compressed response can have a smaller transfer size than its decoded resource size, so the two values answer different questions. Large JavaScript bundles, images, fonts, and API responses deserve separate attention because each may require a different fix.
Check whether a resource was served from memory or disk cache, or whether it was revalidated with the server. Cached resources can make repeat visits fast while hiding a slow first-load experience. Conversely, disabled caching during a test can make every request appear slower than a normal user session. Use cache settings intentionally and note them with your test results.
4. Headers, payloads, and previews
For API requests, inspect the request URL, method, query parameters, request headers, payload, response headers, and response body. Confirm that the browser is sending the values you expect and that the server returns the format the frontend handles. A malformed JSON response, unexpected redirect, missing authentication header, or incorrect content type can look like a frontend performance issue when it is actually a request or API contract problem.
If the request is blocked by the browser because of cross-origin rules, use the Network details together with the console error. The CORS debugging workflow explains how to separate a CORS configuration problem from a failed server request.
5. Filters and groups
Filtering reduces noise. Search by file name, domain, resource type, status, or request method. Focus on Fetch/XHR when debugging an API call, JS when investigating bundles, and Img or Font when media or typography appears to delay the page. Filter by a third-party hostname to measure the cost of an external script or service.
Use the request initiator chain and grouping options to connect related activity. The goal is not to inspect every row; it is to identify the few requests that explain the user-visible delay.
Cadence and checkpoints
Network debugging is not only a one-time exercise. Keep a small performance record for important pages or user journeys. A monthly or quarterly review is practical for stable sites, while frequently changing applications may benefit from a check after each major release.
At each checkpoint, record:
- the page or workflow tested;
- whether the test used a cold or warm cache;
- the connection or throttling profile, if one was used;
- the slowest meaningful requests and their timing phases;
- failed requests, redirects, and unusually large resources;
- the change being compared, such as a new bundle, API endpoint, image, or third-party script.
Use throttling to expose problems that a fast local connection can conceal. Treat throttled results as a comparison tool rather than a claim about every visitor’s experience. Run the same scenario before and after a change, and repeat it enough to recognize inconsistent results caused by variable network or server conditions.
How to interpret changes
When a page becomes slower, first classify the change by where time increased.
- DNS or connection time increased: compare the affected hostname with other hosts. A new third-party domain, asset host, or API origin may have introduced extra connection work.
- Waiting time increased: investigate server logs, database queries, application code, and upstream services. A frontend change may have caused an endpoint to receive more data or make additional calls.
- Download time increased: compare response size and compression. Look for oversized JSON, unoptimized images, source maps being loaded unnecessarily, or a bundle that grew after a dependency change.
- More requests appeared: inspect initiators and request duplication. Repeated API calls can come from component lifecycle behavior, retries, polling, or cache misses.
- Requests are blocked or failing: examine the status, response headers, console message, and request payload. Do not treat every red row as a speed issue; it may be a correctness or configuration issue first.
- Repeat loads improved but first loads did not: compare cache behavior and prioritize the resources required for the initial experience.
Be careful with causation. A request appearing late in the waterfall is not automatically the root cause; it may simply have been scheduled after a prerequisite. Likewise, a large request may not affect the initial view if it is lazy-loaded after the page becomes usable. Connect the Network panel to the actual symptom and, when needed, compare it with the Performance panel, server logs, or application traces.
For JSON APIs, formatting the response can make structural problems easier to see. The JSON formatter and validator guide is useful when a response is difficult to inspect or appears malformed.
When to revisit
Revisit this investigation whenever a release changes routing, authentication, API calls, dependencies, images, fonts, caching, or third-party integrations. Also check after infrastructure changes, a migration to a new hosting setup, or a report that a page is slow only for certain users or regions.
For a routine review, choose one important page and one representative workflow. Capture a baseline, apply the same filters and conditions, and compare the request count, slowest phases, response sizes, failed requests, and cache behavior. If a result changes, save the request details or a HAR file according to your team’s privacy practices; network captures can contain tokens, cookies, query parameters, and personal data.
Use this short checklist during the next investigation:
- Reload with DevTools open and confirm the test conditions.
- Find the request that matches the user-visible delay.
- Check status, initiator, timing phases, size, headers, and response.
- Filter out unrelated resources and compare cold versus warm cache behavior.
- Throttle and repeat the same workflow to test whether the result is consistent.
- Classify the issue as browser scheduling, DNS or connection setup, server waiting, download size, caching, third-party activity, or request correctness.
- Make one targeted change, then rerun the baseline comparison.
Keeping these checkpoints turns the Chrome DevTools Network tab from a reactive troubleshooting screen into a repeatable web performance debugging tool. The interface may change over time, but the core practice remains stable: follow the request, measure each phase, connect it to the user’s symptom, and verify the fix under the same conditions.