成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如果要做優化,CSS提高性能的方法有哪些?

新聞 前端
作為頁面渲染和內容展現的重要環節, css 影響著用戶對整個網站的第一體驗

 

一、前言

每一個網頁都離不開 css ,但是很多人又認為, css 主要是用來完成頁面布局的,像一些細節或者優化,就不需要怎么考慮,實際上這種想法是不正確的,作為頁面渲染和內容展現的重要環節, css 影響著用戶對整個網站的第一體驗。

因此,在整個產品研發過程中, css 性能優化同樣需要貫穿全程

二、實現方式

實現方式有很多種,主要有如下:

  • 內聯首屏關鍵CSS
  • 異步加載CSS
  • 資源壓縮
  • 合理使用選擇器
  • 減少使用昂貴的屬性
  • 不要使用@import

內聯首屏關鍵CSS

在打開一個頁面,頁面首要內容出現在屏幕的時間影響著用戶的體驗,而通過內聯 css 關鍵代碼能夠使瀏覽器在下載完 html 后就能立刻渲染

而如果外部引用 css 代碼,在解析 html 結構過程中遇到外部 css 文件,才會開始下載 css 代碼,再渲染

所以, CSS 內聯使用使渲染時間提前

注意:但是較大的 css 代碼并不合適內聯(初始擁塞窗口、沒有緩存),而其余代碼則采取外部引用方式

異步加載CSS

在 CSS 文件請求、下載、解析完成之前, CSS 會阻塞渲染,瀏覽器將不會渲染任何已處理的內容

前面加載內聯代碼后,后面的外部引用 css 則沒必要阻塞瀏覽器渲染。這時候就可以采取異步加載的方案,主要有如下:

  • 使用javascript將link標簽插到head標簽最后
  1. // 創建link標簽 
  2. const myCSS = document.createElement( "link" ); 
  3. myCSS.rel = "stylesheet"
  4. myCSS.href = "mystyles.css"
  5. // 插入到header的最后位置 
  6. document.head.insertBefore( myCSS, document.head.childNodes[ document.head.childNodes.length - 1 ].nextSibling ); 
  • 設置link標簽media屬性為noexis,瀏覽器會認為當前樣式表不適用當前類型,會在不阻塞頁面渲染的情況下再進行下載。加載完成后,將 media 的值設為 screen 或 all ,從而讓瀏覽器開始解析CSS
  1. <link rel="stylesheet" href="mystyles.css" media="noexist" onload="this.media='all'"
  • 通過rel屬性將link元素標記為alternate可選樣式表,也能實現瀏覽器異步加載。同樣別忘了加載完成之后,將rel設回stylesheet
  1. <link rel="alternate stylesheet" href="mystyles.css" onload="this.rel='stylesheet'"

資源壓縮

利用 webpack 、 gulp/grunt 、 rollup 等模塊化工具,將 css 代碼進行壓縮,使文件變小,大大降低了瀏覽器的加載時間

合理使用選擇器

css 匹配的規則是從右往左開始匹配,例如 #markdown .content h3 匹配規則如下:

  • 先找到h3標簽元素
  • 然后去除祖先不是.content的元素
  • 最后去除祖先不是#markdown的元素

如果嵌套的層級更多,頁面中的元素更多,那么匹配所要花費的時間代價自然更高

所以我們在編寫選擇器的時候,可以遵循以下規則:

  • 不要嵌套使用過多復雜選擇器,最好不要三層以上
  • 使用id選擇器就沒必要再進行嵌套
  • 通配符和屬性選擇器效率最低,避免使用

減少使用昂貴的屬性

在頁面發生重繪的時候,昂貴屬性如 box-shadow / border-radius / filter /透明度/ :nth-child 等,會降低瀏覽器的渲染性能

不要使用@import

css樣式文件有兩種引入方式,一種是 link 元素,另一種是 @import

@import 會影響瀏覽器的并行下載,使得頁面在加載時增加額外的延遲,增添了額外的往返耗時

而且多個 @import 可能會導致下載順序紊亂

比如一個css文件 index.css 包含了以下內容: @import url("reset.css")

那么瀏覽器就必須先把 index.css 下載、解析和執行后,才下載、解析和執行第二個文件 reset.css

其他

  • 減少重排操作,以及減少不必要的重繪
  • 了解哪些屬性可以繼承而來,避免對這些屬性重復編寫
  • cssSprite,合成所有icon圖片,用寬高加上backgroud-position的背景圖方式顯現出我們要的icon圖,減少了http請求
  • 把小的icon圖片轉成base64編碼
  • CSS3動畫或者過渡盡量使用transform和opacity來實現動畫,不要使用left和top屬性

三、總結

css 實現性能的方式可以從選擇器嵌套、屬性特性、減少 http 這三面考慮,同時還要注意 css 代碼的加載順序

責任編輯:張燕妮 來源: 博客園
相關推薦

2019-03-14 15:38:19

ReactJavascript前端

2015-03-18 09:59:14

CSSCSS提高渲染性

2010-06-13 15:42:37

MySQL性能優化

2010-06-03 09:39:24

優化MySQL性能

2021-07-14 14:06:06

CSS前端瀏覽器

2012-02-13 16:09:40

Java

2021-08-13 09:06:52

Go高性能優化

2012-11-14 11:07:24

網絡優化

2010-07-16 13:48:08

SQL Server合

2011-05-24 15:15:12

mysql性能

2019-03-01 11:03:22

Lustre高性能計算

2020-09-14 08:59:11

SAN存儲存儲區域網絡

2019-03-18 15:35:45

WebCSS前端

2010-07-29 10:19:18

提高DB2 IMPOR

2019-05-21 09:40:47

Elasticsear高性能 API

2009-06-29 18:22:43

TomcatJSP頁面

2020-11-02 12:47:56

性能優化

2022-01-14 11:39:46

BOLTFacebookLLVM

2021-08-02 08:34:20

React性能優化

2009-01-05 10:00:11

JSP優化Servlet性能優化
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 色网在线观看 | 亚洲电影一区 | 国产精品久久久久免费 | 久久成人精品一区二区三区 | 精品久久久久久亚洲精品 | 91精品国产99 | 精品在线一区 | 在线免费观看视频黄 | 精品国产18久久久久久二百 | www久久久 | 日韩一区二区三区在线视频 | 久久久久久久久久久久亚洲 | 国产四区 | 国产精品精品视频一区二区三区 | 99久久免费精品视频 | 亚洲一区二区三区免费视频 | 国产亚洲精品久久午夜玫瑰园 | 欧美成人免费在线视频 | 日韩视频一区 | 99视频在线看| 精品国产乱码 | 中文字幕第90页 | 国产精品一码二码三码在线 | 福利视频亚洲 | 成人激情视频在线 | 蜜月aⅴ免费一区二区三区 99re在线视频 | 亚洲精品久久久久久首妖 | 国产在线观看 | 国产亚洲精品一区二区三区 | 99爱国产 | 日韩在线精品视频 | 精品视频一区二区三区在线观看 | 精品久久国产 | 日韩精品一区二区三区视频播放 | 日韩免费在线观看视频 | 久久精品国产免费看久久精品 | 国产一级免费视频 | 岛国毛片在线观看 | 中文字幕日韩欧美一区二区三区 | 国产精品午夜电影 | 亚洲一区二区免费 |