The Pixel Pipeline

by Patryk Ziemkowski​ / Apptension

How is single frame rendered?

"What are the intermediate steps that browser takes to render the webpage I've coded? "

– You

Document Object Model

Parse HTML

CSS Object Model

Parse Stylesheet

DOM + CSSOM = Render Tree

span.first::after {
    content: '';
}

Recalculate Style

Layout (aka Reflow)

<html> <body>

<div>

<p>

<span>

<span:after>

<span>

Layout

Vector to raster

Paint

1. save
    2. translate
    3. drawRectangle
    4. drawRectangle
    5. drawRectangle
    6. drawText
    7. drawText
    8. save
        9. clipPath
        10. drawRoundedRectangle
    11. restore
    12. drawPath
    13. save
        14. clipRoundedRectangle
        15. drawBitmap
    16. restore
    17. translate
18. restore

Composite

Composite Layers

Pipeline flows

Complete

No layout

No layout no paint

CSS Triggers

Forced Synchronous Layout

Example page

Layout thrashing

const paragraphs = document.querySelectorAll('p');
const greenBlock = document.querySelectorAll('.block');

for (let p = 0; p < paragraphs.length; p++) {
    const blockWidth = greenBlock.offsetWidth;
    paragraphs[p].style.width = blockWidth + 'px';
}

The fix

const paragraphs = document.querySelectorAll('p');
const greenBlock = document.querySelectorAll('block');

const blockWidth = greenBlock.offsetWidth;

for (let p = 0; p < paragraphs.length; p++) {
    paragraphs[p].style.width = blockWidth + 'px';
}

Q & A

Related resources:

The Pixel Pipeline - Meet.js Summit 2017

By Patryk Ziemkowski

The Pixel Pipeline - Meet.js Summit 2017

  • 1,933