Developers often encounter network performance issues described as queued or stalled requests while analyzing web applications. These issues occur due to browser-imposed resource limits, prioritization of other requests, or internal constraints. This document explores these behaviors across popular browsers, explains why they occur, and provides guidance on how to observe and troubleshoot them effectively.
Why Queued and Stalled Requests Occur
Network requests can be delayed for several reasons, depending on the browser and its underlying engine. Common causes include:
- Connection limits: Browsers typically restrict the number of simultaneous connections per origin. For instance, most browsers, such as Chrome, Edge, and Opera, use the Chromium engine, which limits connections to six per origin in HTTP/1.1.
- Resource contention: Requests are queued if higher-priority requests are being processed or if the browser is waiting to allocate disk cache space.
- Throttling: Internal mechanisms, such as rate limiting or resource prioritization, can lead to delays in processing lower-priority requests.
Browser Configuration Details
The following table summarizes information about major browsers, their engines, maximum concurrent connections, and whether the connection count is configurable. Links are provided to the official pages or resources for each browser.
Browser Name | Engine | Max Concurrent Connections | Configurable? |
---|---|---|---|
Chrome | Chromium | 6 per origin (HTTP/1.1) | No |
Edge | Chromium | 6 per origin (HTTP/1.1) | No |
Opera | Chromium | 6 per origin (HTTP/1.1) | No |
Firefox | Gecko | 6 per origin (HTTP/1.1) | No |
Chromium | Chromium | 6 per origin (HTTP/1.1) | No |
Observing Queueing and Stalling by Engine
Each browser engine provides tools to analyze network request delays. Here's how to observe queueing and stalling using the Chromium and Gecko engines.
Chromium (Chrome, Edge, Opera, Chromium)
- Open the browser's DevTools by pressing
Ctrl+Shift+I
(Windows/Linux) orCmd+Opt+I
(Mac). - Go to the Network tab and reload the page to capture network requests.
- Select a request and navigate to the Timing section to view timing phases:
- Queueing: Time waiting for resources like a connection slot or CPU.
- Stalled: Delays caused by resource contention or throttling.
Sources:
Gecko (Firefox)
- Open Firefox Developer Tools with
Ctrl+Shift+E
(Windows/Linux) orCmd+Opt+E
(Mac). - Navigate to the Network panel and reload the page to capture requests.
- Select a request and go to the Timings tab to see the breakdown:
- Waiting: Similar to "queueing" in Chromium-based browsers.
- Blocked: Equivalent to "stalling," indicating resource delays.
Summary
Queued and stalled network requests are common challenges in web development caused by browser-imposed limits, resource contention, and prioritization mechanisms. While these behaviors are not configurable, developers can use tools like Chromium's DevTools or Firefox's Network Monitor to analyze and mitigate delays. Optimizing asset loading, reducing concurrent requests, and adhering to best practices are effective strategies for minimizing these issues and improving application performance.