// Web Performansı — 2026-10-30 — 8 min

How Does a Web Page Actually Load in the Browser? What Happens in Those Few Seconds

Web PerformansıTarayıcıDNSBackend

You type a URL and hit enter, then a page appears in under a second. Here's the real chain of steps a browser runs to make that happen.

You type an address into the browser, hit enter, and the page loads before a second even passes. Inside that loading process, dozens of things actually happen in sequence: a name gets translated into an address, a handshake happens with a server, hundreds of files get downloaded, a document gets processed line by line, and all of it turns into the shape you see on screen. This post walks through exactly how a web page loads in the browser — what it's actually doing, where speed gets won, and where it gets lost.

##The Moment You Hit Enter: DNS and Making the Connection

The address you type, say "example.com", is a name for humans, but the internet itself runs on IP addresses — a string of numbers like 93.184.216.34. The system that does this translation is called DNS (Domain Name System), and it works like a layered phone book: the browser first checks its own cache, then the operating system's cache, then asks your internet provider's DNS server, which — if it still doesn't know — starts from the root servers, walks down to the ".com" servers, and finally reaches the server responsible for your actual domain. If nothing is cached anywhere, this whole chain can take 20-120 milliseconds; if it's cached, it's effectively instant.

Once the browser has the IP address, it opens a TCP connection with the server — a three-step handshake that's basically "hello, can you hear me, yes I can hear you too" (SYN, SYN-ACK, ACK). If the site uses HTTPS (which is almost every site today), a TLS handshake rides on top of that connection: the browser and server agree on which encryption method to use, verify the server's identity through a certificate, and settle on a session key. DNS, TCP, and TLS together can add up to 100-400 milliseconds that happen before any page content shows up — invisible to the user, but not a cost you can skip.

##How Does the HTML From the Server Turn Into a Page?

Once the connection is open, the browser requests the HTML document, and the first bytes typically arrive (Time to First Byte, or TTFB) within 100-500 milliseconds — depending on how loaded the server is, whether it has to run a database query, and whether the response is coming from a CDN or a distant server. The moment HTML starts arriving, the browser begins reading it top to bottom and turning it into a tree structure called the DOM (Document Object Model) — a hierarchy where every tag and every piece of text is a node.

But HTML alone isn't enough. As the browser reads it, every time it encounters a stylesheet link, a script tag, or an image tag, it kicks off a separate download request for that file. A modern page typically has 40-150 separate requests across CSS, JavaScript, fonts, and images. Not all of these download at once — the browser limits how many connections it opens to a single domain at the same time (around six, depending on the browser), which is why a huge number of tiny files can sometimes be slower than a handful of larger ones.

##The Critical Rendering Path: Why a Page Sometimes Sits on a Blank Screen

Once the DOM exists, CSS files produce a similar tree called the CSSOM — a map of which element has which style. The browser merges the two into a render tree, then calculates exactly where and how big every element should be on screen (layout), and finally actually paints the pixels (paint) and combines the layers (composite). These four steps — DOM, CSSOM, layout, paint — are called the critical rendering path, and they're exactly what determines when a page becomes visible.

This is where the blank screen comes from: CSS is render-blocking by default — the browser refuses to paint anything until it knows how the page is supposed to look, which makes sense, because otherwise you'd see an unstyled page flash before the styled version appears (this is called a flash of unstyled content). JavaScript, by default, stops HTML parsing entirely while it downloads and runs, because a script can change the page itself and the browser has to execute it and see the result before continuing. A large JavaScript file sitting in the head without an async or defer attribute can technically delay the rest of the page from appearing for seconds — which also answers why some sites seem to load in pieces instead of all at once.

##A Real Example: The Load Timeline of a Product Page

Let's make this concrete. Take a typical mid-sized e-commerce product page and walk through its timeline step by step:

  • 0-80ms: DNS resolution finishes if it wasn't already cached, and the TCP and TLS handshakes complete.
  • 80-250ms: The server processes the request, pulls the product data from the database, and the first byte of HTML arrives.
  • 250-600ms: As the HTML downloads and gets parsed, requests start for CSS, critical JavaScript, and font files; the browser hasn't painted anything yet while it waits on render-blocking CSS.
  • 600-900ms: The CSSOM and DOM merge into a render tree, layout gets calculated, and the first pixel gets painted — the user finally sees something (First Contentful Paint).
  • 900-1800ms: Non-render-blocking resources continue — images, product gallery scripts, recommendation widgets — and the page becomes visually complete (Largest Contentful Paint).
  • 1800-2500ms: The remaining JavaScript finishes running, and buttons actually become clickable (Time to Interactive).

The important observation here: the moment a user says "the page is loaded" isn't the same moment the browser finishes its last task. A page can look visually complete while still being unresponsive to clicks — which is exactly why metrics like Core Web Vitals don't look at a single "loaded" moment but track several: First Contentful Paint, Largest Contentful Paint, and Interaction to Next Paint.

##What Actually Determines Load Speed — and Where You Win It Back

Looking at the timeline above, speed gets won or lost in a handful of specific places:

  • Server response time (TTFB): faster database queries, server-side caching, and putting the server or a CDN geographically closer to the user.
  • Resource count and size: compressing images and using modern formats (WebP/AVIF), stripping unused CSS and JavaScript, and cutting down the number of fonts.
  • Render-blocking resources: deferring non-critical CSS, marking scripts as defer or async, and inlining critical CSS directly into the HTML.
  • Connection count: using HTTP/2 or HTTP/3, which let many requests share a single connection instead of hitting the old browser connection limit.
  • Browser caching and CDNs: serving static files from servers geographically close to the user, and skipping the download entirely on a second visit.

A good TTFB target

100-300 ms

Average mobile page weight

2-3 MB

A healthy Largest Contentful Paint target

under 2.5 seconds

Simultaneous connections per domain (HTTP/1.1)

~6

These numbers aren't a hard law, just roughly accepted industry thresholds — the real result depends on the user's connection speed, device, and the server's geographic location. But they're useful as direction: if your TTFB is over 300ms, look at the server side first; if your LCP is over 2.5 seconds, look at images and render-blocking resources first.

##Giving the Browser a Heads-Up: What preconnect, preload, and prefetch Actually Do

Because the browser discovers resources by reading the HTML, it does nothing for a resource until that resource's need shows up somewhere in the middle of the document — it waits its turn before even starting the request. Developers can shorten this delay by giving the browser hints ahead of time. A preconnect hint tells the browser to finish the DNS, TCP, and TLS setup for a domain before the HTML actually needs a resource from it — useful for a third-party font provider or payment processor on a separate domain, and it can save a meaningful fraction of a second. A preload hint means "I will definitely need this file, download it now instead of waiting its normal turn" — typically used for a hero image or a critical font. A prefetch hint is a softer signal: "the user will probably go to this next page, download it now while bandwidth is idle," so the next click opens instantly. Used correctly, these three hints shorten the critical rendering path; used carelessly — like preloading everything — they confuse the browser's priority order and end up delaying the one resource that actually mattered.

##Frequently Asked Questions

>Does page load speed actually affect SEO?

Yes, directly. Google uses Core Web Vitals (LCP, Interaction to Next Paint, Cumulative Layout Shift) as one of its ranking signals — it's not the sole factor, content quality still weighs far more, but between two pages of equal quality the faster one gets a small edge. The more concrete effect shows up on the user side: independent measurements repeatedly show abandonment rates climbing sharply once load time goes from one second to three.

>How does browser caching speed up a second visit?

When a server sends a file, it can attach headers saying "this file won't change for a while, don't ask again." The browser stores that file on disk, and the next time you visit the same site, unchanging files like CSS, JavaScript, and the logo get served straight from disk instead of being requested from the server at all. That's why the gap between a first visit and a second visit to the same site is usually enormous — on the second visit there's almost nothing left to download.

>Does a CDN actually make a difference for a small site?

It depends on who's visiting. If most visitors are near the country where the server lives, a CDN's gain is limited, because the distance is already short. But if visitors are geographically spread out — say the server is in Europe and part of the audience is in the US or Asia — a CDN can serve static files from a point near each visitor and save hundreds of milliseconds, and the cost of that is usually negligible for small sites, since most CDNs cover that kind of traffic in their free tier.

>Why does a page load slower on mobile than on desktop?

Three things stack on top of each other: mobile connections (especially weaker 4G or Wi-Fi) carry noticeably higher latency than a wired or strong desktop connection, mobile processors run JavaScript meaningfully slower than desktop processors, and most sites design images for a desktop screen and ship the same or similar size to mobile. Combine all three, and the real load time on mobile can easily run two to three times longer than the same page on desktop.

>How do HTTP/2 and HTTP/3 change page speed?

Under HTTP/1.1, the browser could only open around six connections to a single domain at once, so a lot of small files sat waiting in a queue. HTTP/2 can send dozens of requests over a single TCP connection at the same time through multiplexing, so files no longer wait on each other for a connection slot. HTTP/3 goes further and replaces TCP with a UDP-based protocol called QUIC, which — especially on mobile networks with packet loss — stops the whole connection from stalling because of one lost packet. In practice, moving to HTTP/2 is one of the single biggest wins available after TTFB, because it usually requires nothing more than a server configuration change.

Every link in this chain — from DNS to render — decides how fast a web app actually feels; improving load speed is rarely one big change, it's finding and closing a handful of small bottlenecks in this exact chain, one at a time. If you want to talk through where something's stuck on a real project, my contact page is open; if you're curious how caching specifically fits into this chain, I've written about that too.

// LET'S WORK

Planning a similar SaaS product?

We can define scope, MVP milestones, and a realistic delivery timeline together.

> CONTACT