Table of Contents
Use non-blocking CSS to load fonts
Summary
Home Web Front-end HTML Tutorial Loading CSS does not affect page rendering_html/css_WEB-ITnose

Loading CSS does not affect page rendering_html/css_WEB-ITnose

Jun 24, 2016 am 11:43 AM

Loading CSS without affecting page rendering

This article demonstrates a technique that downloads style sheets asynchronously to prevent their download from blocking the rendering of the page as much as possible Let visitors get information quickly.

Warning! I post this with good intentions, but it is not responsible for making people who read it aware of the problems that will be encountered below. The community quickly gave me a lot of feedback (some feedback I'm grateful), and it became increasingly obvious that the technology wasn't as stable as I'd hoped. Rather than having as much success testing and exploiting it as I had, many developers were experiencing it in both IE and Firefox. issues (direct crash in FF beta) while others report success in Chrome and Safari. My advice right now: don't use it for products. I plan to address this feedback and update this article with any relevant information.

The principles behind these techniques are not new. For example, the Filament technical team has published a lot of content about loading CSS and fonts. I wrote this article to record my thoughts and opinions on loading non-blocking resources.

The trick to trigger asynchronous style downloading is to use a element and set an unavailable value for the media attribute (I used media="none", but any other value will also work ). When a media query evaluates to false, the browser will still download the style sheet, but will not wait for the style sheet resources to be available before rendering the page.

<link rel="stylesheet" href="css.css" media="none">
Copy after login

Once the style sheet is downloaded, the media attribute must be set to a usable value so that the style rules can be applied to the html document. The onload event can be used to switch the media attribute to all:

<link rel="stylesheet" href="css.css" media="none" onload="if(media!='all')media='all'">
Copy after login

This method of loading CSS will deliver useful information to your visitors much faster than the standard method. Crucial CSS can still be loaded in the usual blocking way (or you can handle it inline for ultimate performance), while non-critical styles can be slowly downloaded and rendered during the parsing/rendering process. It will be applied at a later stage.

This technique uses JavaScript, but you can also encapsulate an equivalent blocking element in a

<link rel="stylesheet" href="css.css" media="none" onload="if(media!='all')media='all'">
Copy after login

This technology has a side effect. When a non-blocking style sheet finishes loading, the document is redrawn to reflect any new style rules it defines. Injecting new styles into the page will trigger content reflow, but this will only be a problem during the first load of the page without historical cache. As with anything related to performance, you're going to want to make the necessary adjustments when the need to control the cost of a reflow outweighs the potential speed advantage.

Use non-blocking CSS to load fonts

The first draw performance of fonts is an issue, they are blocking resources and will make the text they are applied to invisible while the font is downloaded . Using the non-blocking link in the above example, it is possible to download the stylesheet containing the font data behind the scenes without blocking the rendering of the surface:

<link rel="stylesheet" href="main.css"><link rel="stylesheet" href="font.css" media="none" onload="if(media!='all')media='all'">
Copy after login

font.css contains a base64-encoded WOFF version of the Merriweather font .

@font-face {  font-family: Merriweather;  font-style: normal;  font-weight: 400;  src: local('Merriweather'), url('data:application/x-font-woff;charset=utf-8;base64,...')}
Copy after login

main.css contains all the style rules that need to be applied to the site. Here is the declaration for the font:

body {  font-family: Merriweather, "Lucida Grande", ...;}
Copy after login

While the font is being downloaded, the first matching fallback font (in this case, Lucida Grande) is used to render the content of the page. . Once the font stylesheet is applied, Merriweather will be used. I try to ensure that the fallback font shares similar layout characteristics to the preferred font so that the inevitable reflow is as subtle as possible .

I tested blocking versus non-blocking using my Google Analytics Debugger site in Chrome over a simulated 3G network connection. The local test produced the network graph as shown below; note that DOMContentLoaded is triggered 450ms earlier, and the resources are downloaded faster after using non-blocking technology:

Graphic of simulated 3G network. Blocked font is shown at the top. The bottom shows non-blocking fonts.

Deploying it to a test server and running the webpagetest construct on a 3G connection produced the following timeline:

3G timeline. Blocking fonts are displayed at the top and non-blocking fonts are displayed at the bottom.

Both methods took 2.8 seconds to completely render the page, but the non-blocking method drew 1 second earlier than the normal blocking method. Running the same test with the main stylesheet inline shows a 0.7 second time advantage when non-blocking CSS is applied to handle fonts:

3G timeline of main CSS content . Displays blocking fonts at the top and non-blocking fonts at the bottom.

This technique works really well for fonts, but I also recommend keeping an eye on the new CSS font loading module, which will give us more control over font loading.

Summary

Loading fonts is an example of applying non-blocking techniques, but it can also be used for other purposes, such as decoupling JavaScript-enhanced styles from core CSS.

I've started to experiment with the idea of ​​splitting styles into frames (core layout) and presentation (everything else), which would allow important page layouts to block page rendering, while visible style data is delayed for a while .

This article address: http://www.oschina.net/translate/loading-css-without-blocking-render

Original address: http://keithclark .co.uk/articles/loading-css-without-blocking-render/

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Roblox: Bubble Gum Simulator Infinity - How To Get And Use Royal Keys
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers Of The Witch Tree - How To Unlock The Grappling Hook
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusion System, Explained
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1669
14
PHP Tutorial
1273
29
C# Tutorial
1256
24
HTML: The Structure, CSS: The Style, JavaScript: The Behavior HTML: The Structure, CSS: The Style, JavaScript: The Behavior Apr 18, 2025 am 12:09 AM

The roles of HTML, CSS and JavaScript in web development are: 1. HTML defines the web page structure, 2. CSS controls the web page style, and 3. JavaScript adds dynamic behavior. Together, they build the framework, aesthetics and interactivity of modern websites.

The Future of HTML, CSS, and JavaScript: Web Development Trends The Future of HTML, CSS, and JavaScript: Web Development Trends Apr 19, 2025 am 12:02 AM

The future trends of HTML are semantics and web components, the future trends of CSS are CSS-in-JS and CSSHoudini, and the future trends of JavaScript are WebAssembly and Serverless. 1. HTML semantics improve accessibility and SEO effects, and Web components improve development efficiency, but attention should be paid to browser compatibility. 2. CSS-in-JS enhances style management flexibility but may increase file size. CSSHoudini allows direct operation of CSS rendering. 3.WebAssembly optimizes browser application performance but has a steep learning curve, and Serverless simplifies development but requires optimization of cold start problems.

The Future of HTML: Evolution and Trends in Web Design The Future of HTML: Evolution and Trends in Web Design Apr 17, 2025 am 12:12 AM

The future of HTML is full of infinite possibilities. 1) New features and standards will include more semantic tags and the popularity of WebComponents. 2) The web design trend will continue to develop towards responsive and accessible design. 3) Performance optimization will improve the user experience through responsive image loading and lazy loading technologies.

HTML: Building the Structure of Web Pages HTML: Building the Structure of Web Pages Apr 14, 2025 am 12:14 AM

HTML is the cornerstone of building web page structure. 1. HTML defines the content structure and semantics, and uses, etc. tags. 2. Provide semantic markers, such as, etc., to improve SEO effect. 3. To realize user interaction through tags, pay attention to form verification. 4. Use advanced elements such as, combined with JavaScript to achieve dynamic effects. 5. Common errors include unclosed labels and unquoted attribute values, and verification tools are required. 6. Optimization strategies include reducing HTTP requests, compressing HTML, using semantic tags, etc.

HTML vs. CSS vs. JavaScript: A Comparative Overview HTML vs. CSS vs. JavaScript: A Comparative Overview Apr 16, 2025 am 12:04 AM

The roles of HTML, CSS and JavaScript in web development are: HTML is responsible for content structure, CSS is responsible for style, and JavaScript is responsible for dynamic behavior. 1. HTML defines the web page structure and content through tags to ensure semantics. 2. CSS controls the web page style through selectors and attributes to make it beautiful and easy to read. 3. JavaScript controls web page behavior through scripts to achieve dynamic and interactive functions.

HTML vs. CSS and JavaScript: Comparing Web Technologies HTML vs. CSS and JavaScript: Comparing Web Technologies Apr 23, 2025 am 12:05 AM

HTML, CSS and JavaScript are the core technologies for building modern web pages: 1. HTML defines the web page structure, 2. CSS is responsible for the appearance of the web page, 3. JavaScript provides web page dynamics and interactivity, and they work together to create a website with a good user experience.

HTML: Is It a Programming Language or Something Else? HTML: Is It a Programming Language or Something Else? Apr 15, 2025 am 12:13 AM

HTMLisnotaprogramminglanguage;itisamarkuplanguage.1)HTMLstructuresandformatswebcontentusingtags.2)ItworkswithCSSforstylingandJavaScriptforinteractivity,enhancingwebdevelopment.

What is the difference between <strong>, <b> tags and <em>, <i> tags? What is the difference between <strong>, <b> tags and <em>, <i> tags? Apr 28, 2025 pm 05:42 PM

The article discusses the differences between HTML tags , , , and , focusing on their semantic vs. presentational uses and their impact on SEO and accessibility.

See all articles