Home  >  Article  >  Web Front-end  >  CSS performance optimization notes

CSS performance optimization notes

大家讲道理
大家讲道理Original
2016-11-10 15:45:121431browse

When I was doing an internship on a mobile project, I implemented an animation effect. There was no problem debugging it on iPhone and Chrome, but it was a huge problem when testing it on an Android machine worth about a thousand yuan. The lag was very obvious, and I was puzzled and vomited blood. , died.

This sad story is the introduction of this article. I really understand that CSS has a very obvious impact on user experience, and a little carelessness can lead to a big pitfall. Next, let’s talk about CSS performance optimization.


Loading performance

  • Reduce file size, compress code

  • Reduce blocking loading, don’t use import

  • to improve concurrency (I don’t quite understand this)

Selector performance


The impact on overall performance is negligible, but the focus on selectors is more for standardization, maintainability, and robustness. For specific implementation, please refer to this sharing from Github: GitHub's CSS Performance by Jon Rohan

Rendering performance


Rendering performance is the most important focus of CSS optimization. Let’s first understand the browser’s rendering mechanism.

Browser rendering mechanism

The process of browser rendering and displaying web pages is roughly divided into the following steps:

        1. Parse HTML (HTML Parser)

  2. Build DOM Tree (DOM Tree)

3. Render Tree Construction (Render Tree)

        4. Painting Render Tree (Painting)

CSS performance optimization notes

Choose high-cost styles carefully

What CSS properties are high-cost? It is those properties that require the browser to perform a lot of calculations before drawing.

  • box-shadows

  • border-radius

  • transparency

  • transforms

  • CSS filters (performance killer)

Avoid excessive reflow (Reflow)

Simple Explain Reflow: When an element changes, it will affect the document content or structure, or the position of the element. This process is called Reflow.

CSS performance optimization notes

How to reduce Reflow

1. Don’t modify the DOM style one by one, define the class in advance, and then modify the className of the DOM 2. Modify the DOM offline, for example: first DOM for display :none (one Reflow), then you modify it 100 times, and then display it

      3. Don’t put the attribute values ​​​​of the DOM node in a loop as variables in the loop

  4. Try not to modify it as much as possible DOM with a relatively large impact range

      5. Use absolute positioning for animated elements absolute / fixed

  6. Do not use table layout, a small change may cause the entire table to be re-layout

Avoid excessive redrawing (Repaints)

When the element changes, it will not affect the position of the element on the page (such as background-color, border-color, visibility). The browser will only apply the new style to redraw the element. This process It's called Repaint.

CSS performance optimization notes

Optimize animations

CSS3 animation is the top priority for optimization. In addition to the above two points,

reduce Reflow and Repaints

, you also need to pay attention to the following aspects.

Enable GPU hardware acceleration

GPU (Graphics Processing Unit) is image processor. GPU Hardware acceleration refers to applying the graphics performance of GPU to hand over some graphics operations in the browser to the GPU to complete, because GPU is specially designed for processing graphics , so it has speed and energy consumption More efficient.
GPU acceleration can be applied not only to 3D, but also to 2D. Here, GPU acceleration usually includes the following parts: Canvas2D, Layout Compositing , CSS3 transformations , CSS3 3D transformations , WebGL and Video ( video).

/*
 * 根据上面的结论
 * 将 2d transform 换成 3d
 * 就可以强制开启 GPU 加速
 * 提高动画性能
 */div {  transform: translate(10px, 10px);}div {  transform: translate3d(10px, 10px, 0);}

It should be noted that turning on hardware acceleration will also have additional overhead. See this article The Good and Bad of CSS Hardware Acceleration

Statement:
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