Skip to main content.","url":"https://learnpython.academy/tracks/html/html-a7-01","learningResourceType":"Interactive lesson","educationalUse":"instruction","inLanguage":"en","isPartOf":{"@type":"Course","name":"HTML & the platform","url":"https://learnpython.academy/tracks/html"},"isAccessibleForFree":false,"timeRequired":"PT6M"}
📄 HTML & the platform·Module A7 · Lesson 1
TaskBuild a head with one render-blocking stylesheet (/critical.css) and one DEFERRED script (/app.js). Use <link rel='stylesheet' href='/critical.css'> and <script src='/app.js' defer></script>.

The critical rendering path

75 XP6 min
Theory

What happens between "request sent" and "first pixel"

  1. HTML downloads — usually one round-trip.
  2. HTML parses top-to-bottom. On each <link rel="stylesheet"> and <script> (without defer/async), the parser PAUSES.
  3. CSS downloads + parses into the CSSOM.
  4. JS downloads + parses + executes (can mutate DOM).
  5. Render tree = DOM + CSSOM combined → layout → paint.

The first thing painted is "First Contentful Paint" (FCP). Every blocking resource before FCP adds to the user's perceived load time.

Three ways to UN-block

  • <script defer> — download in parallel, run AFTER HTML parsed. Default for anything below the fold.
  • <script async> — download in parallel, run AS SOON AS available (out of order). Use for analytics + truly independent scripts.
  • <link rel="stylesheet" media="print" onload="this.media='all'"> — load CSS without blocking render. For non-critical stylesheets.

What ALWAYS blocks

Stylesheets in the head (with no media="print" trick). Scripts in the head without defer/async. Synchronous <script> tags before </body>.

What doesn't block

  • <script defer> placed anywhere
  • <script async> placed anywhere
  • <link rel="preload"> (preloads, doesn't block)
  • Resources fetched by JS after page load
🔒

Sign up to start coding

Theory is open to everyone. The interactive editor, live preview, and check are unlocked with a 7-day free trial — card required, cancel anytime.

Sign up — free trial →

First 15 lessons in each track are free. No card needed for those.

PreviousNext lesson →

Get one Python or web tip a day — by email

Short, hand-written, no spam. Unsubscribe in one click.