Skip to main content

Command Palette

Search for a command to run...

How a Browser Works: A Beginner-Friendly Guide to Browser Internals

Updated
14 min read

Understanding what happens behind the scenes when you visit a website

The Question is: What Happens When You Type a URL?

You're sitting at your computer, typing https://chaicode.com into your browser's address bar. You press Enter.

What happens next?

In the blink of an eye, a webpage appears on your screen. But between pressing Enter and seeing that page, your browser performs an incredible series of steps—fetching files, parsing code, building structures, calculating layouts, and painting pixels.

Let's take a journey through this process, step by step.

What is a Browser? (Beyond "It Opens Websites")

Think of a web browser as a sophisticated translator and artist.

When you visit a website, the browser:

1. Fetches the website's files (HTML, CSS, JavaScript) from a server

2. Translates those files into something it understands

3. Builds a visual representation

4. Paint that representation on your screen

It's like having a personal assistant who:

- Goes to a library (the internet) to get a book (the website)

- Reads the book in a foreign language (HTML/CSS/JS)

- Understands what the book means

- Draws a beautiful picture based on that understanding

- Shows you the picture (the webpage)

The Main Parts of a Browser

A browser isn't just one thing—it's a collection of specialized components working together. Think of it like a restaurant:


┌─────────────────────────────────────────┐
│         USER INTERFACE                   │
│  (The Dining Room - What You See)        │
│  - Address bar, tabs, buttons            │
└─────────────────────────────────────────┘
                    ↓
┌─────────────────────────────────────────┐
│         BROWSER ENGINE                   │
│  (The Manager - Coordinates Everything)  │
└─────────────────────────────────────────┘
                    ↓
┌─────────────────────────────────────────┐
│         RENDERING ENGINE                 │
│  (The Chef - Creates the Visual Meal)    │
│  - Parses HTML/CSS                       │
│  - Builds DOM/CSSOM                      │
│  - Renders the page                      │
└─────────────────────────────────────────┘
                    ↓
┌─────────────────────────────────────────┐
│         NETWORKING LAYER                 │
│  (The Delivery Service - Gets Files)     │
│  - HTTP requests                         │
│  - Downloads resources                   │
└─────────────────────────────────────────┘
                    ↓
┌─────────────────────────────────────────┐
│         JAVASCRIPT ENGINE                │
│  (The Interactive Waiter - Adds Life)     │
│  - Executes JavaScript                   │
│  - Handles interactivity                 │
└─────────────────────────────────────────┘

Let's explore each part:

The User Interface (What You See)

The User Interface (UI) is everything you interact with directly:

- Address bar (where you type URLs)

- Tabs (for multiple pages)

- Back/Forward buttons

- Bookmarks bar

- Menu buttons

This is the "face" of the browser—the part you see and click. It's like the steering wheel and dashboard of a car. You use it to control the browser, but the real work happens under the hood.

Browser Engine vs Rendering Engine

These two terms often confuse beginners. Here's the simple distinction:

Browser Engine (The Manager)

- Coordinates all the other parts

- Manages the flow of data between components

- Decides what to do and when

- Think of it as a project manager overseeing everything

Rendering Engine (The Artist)

- Specifically handles HTML, CSS, and visual rendering

- Parses HTML and CSS files

- Builds the visual representation

- Paints pixels on your screen

- Think of it as the artist who creates the final painting

Popular Rendering Engines:

- Blink (used in Chrome, Edge, Opera)

- Gecko (used in Firefox)

- WebKit (used in Safari)

The browser engine uses the rendering engine to display web pages, but it also coordinates with the networking layer, JavaScript engine, and UI.

Networking - How Browsers Fetch Files

When you type a URL and press Enter, the browser needs to fetch the website's files. This is the networking layer's job.

Step-by-Step: Fetching a Website

1. You type: https://chaicode.com

2. Browser breaks down the URL:

  • Protocol: https://

  • Domain: chaicode.com

  • Path: / (default)

3. DNS Lookup (Domain Name System):

  • Browser asks: "What's the IP address for chaicode.com?"

  • DNS responds: "It's 93.184.216.34"

4. Browser makes an HTTP request:

  • Connects to the server at that IP

  • Asks for the HTML file

5. Server responds:

  • Sends back HTML file

  • Browser receives it

6. Browser reads HTML:

  • Finds links to CSS files

  • Finds links to JavaScript files

  • Finds links to images

7. Browser fetches additional resources:

  • Downloads CSS files

  • Downloads JavaScript files

  • Downloads images

  • All in parallel (at the same time!)

What Gets Fetched?

When you visit a website, the browser typically downloads:

1. HTML file - The structure of the page

2. CSS files - The styling (colors, fonts, layout)

3. JavaScript files - The interactivity

4. Images - Photos, icons, graphics

5. Fonts - Custom typography

6. Other assets - Videos, audio, etc.

The browser is smart—it downloads multiple files simultaneously to speed things up!

HTML Parsing and DOM Creation

Once the browser receives the HTML file, it needs to understand it. This process is called parsing.

What is Parsing? (A Simple Analogy)

Imagine you're reading a recipe:

Recipe text:

"Mix flour and eggs. Add sugar. Bake for 30 minutes."

Your brain parses this into:

- Step 1: Mix (flour + eggs)

- Step 2: Add (sugar)

- Step 3: Bake (30 minutes)

Parsing is breaking down text into meaningful pieces that can be understood and used.

HTML Parsing Example

HTML Code:

<html>
  <head>
    <title>My Page</title>
  </head>
  <body>
    <h1>Welcome</h1>
    <p>Hello world!</p>
  </body>
</html>

Browser parses this into a tree structure:


        html
       /    \
    head    body
     |      /  \
   title   h1   p
     |      |    |
  "My Page" "Welcome" "Hello world!"

This tree structure is called the DOM (Document Object Model).

What is the DOM?

DOM = Document Object Model

The DOM is a tree-like representation of your HTML page. Each HTML element becomes a node in the tree:

- <html> → Root node

- <head>, <body> → Child nodes

- <title>, <h1>, <p> → Further nested nodes

- Text content → Leaf nodes

Visual Representation:


        ┌─────────┐
        │  html   │ ← Root
        └────┬────┘
             │
      ┌──────┴──────┐
      │             │
  ┌───┴───┐    ┌───┴───┐
  │ head  │    │ body  │
  └───┬───┘    └───┬───┘
      │            │
  ┌───┴───┐    ┌───┴────┐
  │ title │    │   h1   │
  └───────┘    └────────┘

Why is the DOM Important?

- JavaScript uses the DOM to interact with page elements

- The browser uses the DOM to understand the page structure

- Changes to the DOM update what you see on screen

CSS Parsing and CSSOM Creation

While the browser is parsing HTML, it's also parsing CSS files. CSS gets converted into a similar tree structure called the CSSOM.

What is CSSOM?

CSSOM = CSS Object Model

Just like the DOM represents HTML structure, the CSSOM represents CSS rules in a tree format.

CSS Code:

body {

  font-size: 16px;

  color: black;

}

h1 {

  color: blue;

  font-size: 24px;

}

p {

  color: gray;

}

CSSOM Tree Structure:

        StyleSheet
             │
        ┌────┴────┐

        │         │

    body{}     h1{}    p{}

     │          │       │

font-size    color   color

color        font-size

How CSSOM Works

The browser reads CSS rules and creates a tree where:

- Each CSS rule becomes a node

- Properties (like color, font-size) are attached to those nodes

- The browser understands which styles apply to which elements

Important: CSS parsing happens in parallel with HTML parsing, but CSSOM must be complete before rendering can begin (because styles affect how elements look).

Part 6: How DOM and CSSOM Come Together

The DOM and CSSOM are separate trees, but the browser needs to combine them to create the final visual representation.

Creating the Render Tree

The browser merges DOM and CSSOM into a Render Tree:

DOM Tree          CSSOM Tree          Render Tree

   │                  │                    │

   └─── Combine ──────┘                    │

                                           │

        ┌──────────────────────────────────┘

        │

    Elements that will

    be displayed on screen

    with their styles

What Goes into the Render Tree?

Only elements that will be visually displayed:

- Visible elements (like <div>, <p>, <h1>)

- Elements with their computed styles

- NOT included: <head>, <script>, hidden elements

Example:

DOM has:

- <html>

- <head> (not visible)

- <body>

- <h1>

- <p>

- <script> (not visible)

Render Tree has:

- <html> (with styles)

- <body> (with styles)

- <h1> (with styles)

- <p> (with styles)

The render tree is the browser's "blueprint" for what to draw on screen.

Layout (reflow), painting, and display

Now the browser knows what to display and how it should look. The final steps are calculating positions, painting pixels, and showing them to you.

Step 1: Layout (Also Called Reflow)

Layout is calculating where each element should be positioned on the screen.

The browser asks questions like:

- How wide should this element be?

- Where should it be positioned?

- How much space does it need?

- How do elements relate to each other?

Visual Example:

Before Layout:        After Layout:

┌──────────┐          ┌─────────────────┐

│  Header  │          │ Header (100% w)  │

└──────────┘          ├─────────────────┤

┌────┐ ┌────┐         │ Sidebar │ Main  │

│Nav │ │Main│   →     │ (200px) │(flex) │

└────┘ └────┘         └─────────────────┘

┌──────────┐          ┌─────────────────┐

│  Footer  │          │ Footer (100% w) │

└──────────┘          └─────────────────┘

The browser calculates:

- Exact pixel positions

- Widths and heights

- Margins and padding

- How elements flow around each other

Step 2: Painting

Painting is filling in the pixels with colors, images, and text.

The browser "paints" each element:

- Background colors

- Borders

- Text

- Images

- Shadows

- Gradients

Think of it like a paint-by-numbers:

1. Layout tells you WHERE to paint

2. CSSOM tells you WHAT colors to use

3. Painting fills in the pixels

Painting Layers:

The browser paints in layers:

Layer 1: Background
Layer 2: Borders
Layer 3: Text
Layer 4: Images
Layer 5: Overlays

Step 3: Display

Finally, the painted pixels are sent to your graphics card, which displays them on your monitor.

Render Tree → Layout → Paint → Graphics Card → Monitor → Your Eyes

Understanding Parsing: A Simple Math Example

Let's understand parsing with a simple math expression:

The Expression

2 + 3 * 4

How a Parser Sees It

Step 1: Break into tokens

[2] [+] [3] [*] [4]

Step 2: Understand relationships

- * has a higher priority than +

- So: 3 * 4 happens first

- Then: 2 + 12

Step 3: Build a tree

        +

       / \

      2   *

         / \

        3   4

Step 4: Calculate

- Start at the bottom: 3 * 4 = 12

- Move up: 2 + 12 = 14

- Result: 14

How This Relates to HTML Parsing

HTML parsing works similarly:

HTML:

<div>
  <p>Hello</p>
</div>

Parser breaks it down:

1. Token: <div>

2. Token: <p>

3. Token: Hello

4. Token: </p>

5. Token: </div>

Parser builds tree:

 div

     │

     p

     │

  "Hello World"

Parser understands:

- div contains p

- p contains text "Hello."

- This creates the DOM structure

The Complete Flow: From URL to Pixels

Let's put it all together in one complete journey:

┌─────────────────────────────────────────────────────────────┐

│ 1. USER ACTION                                               │

│    You type: https://example.com and press Enter            │

└─────────────────────────────────────────────────────────────┘

                        ↓

┌─────────────────────────────────────────────────────────────┐

│ 2. NETWORKING                                                │

│    - DNS lookup (find server IP)                            │

│    - HTTP request (ask for HTML)                            │

│    - Receive HTML file                                      │

│    - Find CSS/JS/image links in HTML                        │

│    - Download all resources in parallel                     │

└─────────────────────────────────────────────────────────────┘

                        ↓

┌─────────────────────────────────────────────────────────────┐

│ 3. PARSING                                                   │

│    HTML Parser:                                              │

│    - Reads HTML text                                        │

│    - Breaks it into tokens                                 │

│    - Builds DOM tree                                        │

│                                                              │

│    CSS Parser:                                               │

│    - Reads CSS text                                        │

│    - Breaks it into rules                                  │

│    - Builds CSSOM tree                                      │

└─────────────────────────────────────────────────────────────┘

                        ↓

┌─────────────────────────────────────────────────────────────┐

│ 4. RENDER TREE CREATION                                      │

│    - Combine DOM + CSSOM                                    │

│    - Create render tree (only visible elements)             │

│    - Attach computed styles to each element                 │

└─────────────────────────────────────────────────────────────┘

                        ↓

┌─────────────────────────────────────────────────────────────┐

│ 5. LAYOUT (REFLOW)                                           │

│    - Calculate positions of all elements                    │

│    - Determine widths, heights, margins                     │

│    - Figure out how elements flow                           │

└─────────────────────────────────────────────────────────────┘

                        ↓

┌─────────────────────────────────────────────────────────────┐

│ 6. PAINTING                                                  │

│    - Fill in pixels with colors                             │

│    - Draw borders, backgrounds, text                        │

│    - Render images and graphics                             │

└─────────────────────────────────────────────────────────────┘

                        ↓

┌─────────────────────────────────────────────────────────────┐

│ 7. DISPLAY                                                   │

│    - Send painted pixels to graphics card                   │

│    - Graphics card sends to monitor                         │

│    - You see the webpage!                                   │

└─────────────────────────────────────────────────────────────┘

Total Time: Usually less than a second for a simple page!

Happy Learning! 🚀

Have questions about how browsers work? Drop them in the comments!