--- slug: resource-loading-pipeline type: concept summary: "Chromium's two-tier scheduler (Blink's ResourceLoadScheduler in the renderer plus the network service's ResourceScheduler in the network process) that decides when and in what order a page's subresources are requested, upstream of the Rendering Pipeline." created: 2026-06-25 updated: 2026-06-25 last_link_verified: 2026-06-25 related: rendering-pipeline: relation: precedes note: "The Resource Loading Pipeline requests the bytes; the Rendering Pipeline turns them into pixels. Rendering's Parse stage begins only once this pipeline has delivered the response, and the Rendering Pipeline explicitly defers network fetches to this subsystem." rail-performance-model: relation: complements note: "RAIL's Load budget is the deadline this pipeline schedules against; getting the critical resources requested first is how the load budget is met or missed." multi-process-architecture: relation: builds-on note: "Resource loading is centralized in the browser/network process; the multi-process decision is the reason the second scheduling tier lives outside the renderer at all." url-loader-factory: relation: complements note: "The URLLoaderFactory Trust Boundary is the trust-boundary view of the same fetch path this concept describes from the scheduling angle." main-thread-starvation: relation: complements note: "The preload scanner runs off the renderer's main thread specifically so subresource discovery does not contend with the main-thread stages Main Thread Starvation describes." --- # Resource Loading Pipeline > **Concept** > > Vocabulary that names a phenomenon. *Chromium's two-tier scheduling path (Blink's `ResourceLoadScheduler` in the renderer plus the network service's `ResourceScheduler` in the network process) that decides when and in what order a page's subresources are requested, distinct from the Rendering Pipeline that turns the fetched bytes into pixels.* > **📝 Scope** > > The [Rendering Pipeline](rendering-pipeline.md) deliberately stops at the boundary this concept names: "Network fetches happen upstream of Parse and are governed by the network stack, the resource fetcher, and the priority hints API; they are not stages of the rendering pipeline." The Resource Loading Pipeline is that upstream subsystem. It governs *requesting* bytes; rendering governs *consuming* them. ## What It Is A page is rarely a single document. A typical page is one HTML response plus dozens or hundreds of subresources: stylesheets, scripts, fonts, images, and the data those scripts go on to fetch. The order and timing of those requests determine how fast the page becomes usable, and that ordering is not left to the order the parser happens to encounter the tags. Two schedulers shape it. Tier one runs inside the renderer process. Blink's `ResourceLoadScheduler` (`third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.cc`) holds requests the renderer has discovered and releases them according to per-resource priority and throttling state. Its most consequential input arrives before the parser does any work: the renderer's *preload scanner* tokenizes the incoming HTML on a background thread, races ahead of the main HTML parser, and starts fetching the subresources it finds (stylesheets, scripts, hero images) while the main thread is still busy. A `