Why would you do that?! – Web Performance and Site Speed Consultant - The Legend of Hanuman

Why would you do that?! – Web Performance and Site Speed Consultant


Written by on CSS Wizardry.

Table of Contents
  1. What is blocking=render?
  2. Blocking Status
    1. Blocking Files
    2. async, defer, and type=module
  3. Blocking Web Fonts
  4. A/B Testing and Experimentation
  5. tl;dr

WebKit have recently announced their intent to
implement the blocking=render
attribute for

The blocking=render attribute allows developers to explicitly mark a resource
as render blocking, but… why on earth would you want to do that?!

The short answer is: generally, you wouldn’t. Unless you know you need
this behaviour, you don’t need it.

But how do you know if you do need it? Read on…

What is blocking=render?

The spec says:

A blocking attribute explicitly indicates that certain operations should be
blocked on the fetching of an external resource. The operations that can be
blocked are represented by possible blocking tokens, which are strings listed
by the following table […]
— 2.5.8 Blocking attributes

Currently, there is only one token specified: render. The spec is extensible
so that other values could be added as the need arises—potential scenarios that
have been
discussed
include parse, load, and even a negation to encourage the opposite, such as
blocking=!render.

Blocking Status

Generally speaking, when loading resources into web pages, there are three
possible blocking states:

  1. Non-blocking: From a performance perspective, this is the most desirable.
    The resource is fetched and processed asynchronously while the browser is
    free to work on whatever other tasks there may be. The two key tasks that are
    not blocked are rendering and parsing.
  2. Render blocking: The next-best option for the performance conscious is
    render blocking. Files that are render blocking prohibit the browser from
    presenting the page, but do permit the browser to at least construct it.
  3. Parser blocking: The worst case scenario is a file that prevents the
    browser from even building the page. All parsing and rendering is blocked
    while the resource is fetched. Files that are parser blocking are inherently
    also render blocking—the browser can’t present a page that it can’t even
    construct.

Visually, this is how that process looks for each scenario:

Comparison of non-blocking, render-blocking, and parser-blocking resources in web performance. A visual breakdown of how different loading strategies affect rendering, parsing, and blocking behaviour in the browser.
A non-, render-, and parser-blocking file in an HTML document. Imagine the
downloading file (pink) is in the —even though you can
never see tags or their children, they still get
rendered just like any other HTML, they’re just set to display:
none;
. That said, these diagrams also apply to a downloading file (pink)
that is in the middle of the . HTML is parsed
line-by-line and is very predictable. We ❤️ HTML.

Blocking Files

The two main file types that impact the blocked status of a web page are
stylesheets and scripts. In their default states:

  • : This will block the rendering of
    subsequent content, but not its parsing. The browser is free to continue
    parsing the HTML and building out the DOM, but cannot display any of it until
    app.css is fully fetched and parsed. Stylesheets are render blocking.