Home Web Front-end HTML Tutorial CSS asynchronous loading technology does not affect page rendering_html/css_WEB-ITnose

CSS asynchronous loading technology does not affect page rendering_html/css_WEB-ITnose

Jun 24, 2016 am 11:44 AM

This article demonstrates a technique that downloads style sheets asynchronously to prevent their download from blocking the rendering of the page, thereby allowing visitors to obtain information content as quickly as possible.

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 (crash outright 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 group 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 is also acceptable ). 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.

Once the stylesheet 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:

This method of loading CSS will deliver useful information to 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

This technique 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 performance of the first draw of fonts is an issue, they are blocking resources and will make the text they are applied to The font is not visible when 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 pressed surface:

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,...')}

main.css contains all the style rules that need to be applied to the site. The following is the declaration of the font:

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

When the font is being downloaded, the first matching backup response The back font (in this case Lucida Grande) is used to render the content of the page. Once the font stylesheet is applied, Merriweather is 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 diagram shown below; note that DOMContentLoaded is triggered 450ms earlier, and the resource downloads faster after using non-blocking technology:

Graphics that simulate 3G networks. Blocked font is shown at the top. The bottom shows non-blocking fonts.

Deploy it to a test server and run it on a 3G connection. The webpagetest construct produces 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 separating JavaScript from core CSS Enhanced styling.

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 .

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

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
1 months ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat Commands and How to Use Them
1 months 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)

What is the purpose of the <progress> element? What is the purpose of the <progress> element? Mar 21, 2025 pm 12:34 PM

The article discusses the HTML &lt;progress&gt; element, its purpose, styling, and differences from the &lt;meter&gt; element. The main focus is on using &lt;progress&gt; for task completion and &lt;meter&gt; for stati

What is the purpose of the <datalist> element? What is the purpose of the <datalist> element? Mar 21, 2025 pm 12:33 PM

The article discusses the HTML &lt;datalist&gt; element, which enhances forms by providing autocomplete suggestions, improving user experience and reducing errors.Character count: 159

What are the best practices for cross-browser compatibility in HTML5? What are the best practices for cross-browser compatibility in HTML5? Mar 17, 2025 pm 12:20 PM

Article discusses best practices for ensuring HTML5 cross-browser compatibility, focusing on feature detection, progressive enhancement, and testing methods.

What is the purpose of the <meter> element? What is the purpose of the <meter> element? Mar 21, 2025 pm 12:35 PM

The article discusses the HTML &lt;meter&gt; element, used for displaying scalar or fractional values within a range, and its common applications in web development. It differentiates &lt;meter&gt; from &lt;progress&gt; and ex

How do I use HTML5 form validation attributes to validate user input? How do I use HTML5 form validation attributes to validate user input? Mar 17, 2025 pm 12:27 PM

The article discusses using HTML5 form validation attributes like required, pattern, min, max, and length limits to validate user input directly in the browser.

What is the viewport meta tag? Why is it important for responsive design? What is the viewport meta tag? Why is it important for responsive design? Mar 20, 2025 pm 05:56 PM

The article discusses the viewport meta tag, essential for responsive web design on mobile devices. It explains how proper use ensures optimal content scaling and user interaction, while misuse can lead to design and accessibility issues.

What is the purpose of the <iframe> tag? What are the security considerations when using it? What is the purpose of the <iframe> tag? What are the security considerations when using it? Mar 20, 2025 pm 06:05 PM

The article discusses the &lt;iframe&gt; tag's purpose in embedding external content into webpages, its common uses, security risks, and alternatives like object tags and APIs.

Is HTML easy to learn for beginners? Is HTML easy to learn for beginners? Apr 07, 2025 am 12:11 AM

HTML is suitable for beginners because it is simple and easy to learn and can quickly see results. 1) The learning curve of HTML is smooth and easy to get started. 2) Just master the basic tags to start creating web pages. 3) High flexibility and can be used in combination with CSS and JavaScript. 4) Rich learning resources and modern tools support the learning process.

See all articles