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

前端百題斬之從渲染流程認識重繪和回流

開發 前端
今天的主角“重繪和回流”就會導致瀏覽器觸發更新,重新進行渲染繪制,但是兩者稍有不同,重繪不會存在布局階段,而回流會進行重新布局,所以回流代價更高、損耗更大。

[[412967]]

在“瀏覽器的渲染流程”一節中已經詳細闡述了渲染過程的幾個關鍵步驟,其簡要流程圖如下所示:

今天的主角“重繪和回流”就會導致瀏覽器觸發更新,重新進行渲染繪制,但是兩者稍有不同,重繪不會存在布局階段,而回流會進行重新布局,所以回流代價更高、損耗更大。

31.1 重繪

重繪是指頁面中某些元素發生了不影響布局的變化時(如顏色改變),瀏覽器重新繪制的過程。此時由于只需要UI層面的重新像素繪制,因此損耗較少。僅僅引發重繪的操作如下所示(注意:回流必定觸發重繪,但是重繪不一定觸發回流):

  • 改變背景色;
  • 改變文字顏色;
  • 改變邊框顏色;
  • 通過visibility:hidden隱藏元素;
  • ……

31.2 回流

回流是指頁面中某些元素發生變化而影響了布局時(如尺寸、位置改變),瀏覽器需要重新布局并繪制的過程。引發回流的操作如下所示:

  • 頁面初次渲染;
  • 瀏覽器窗口大小改變;
  • 元素尺寸、位置、內容發生改變;
  • 元素字體大小變化;
  • 添加或者刪除可見的 dom 元素;
  • 激活 CSS 偽類(例如::hover);
  • 查詢某些屬性或調用某些方法:
  • clientWidth、clientHeight、clientTop、clientLeft
  • offsetWidth、offsetHeight、offsetTop、offsetLeft
  • scrollWidth、scrollHeight、scrollTop、scrollLeft
  • getComputedStyle() :Window.getComputedStyle()方法返回一個對象,該對象在應用活動樣式表并解析這些值可能包含的任何基本計算后報告元素的所有CSS屬性的值。
  • getBoundingClientRect()
  • scrollTo():scrollTo() 方法可把內容滾動到指定的坐標。

31.3 減少回流和重繪

31.3.1 瀏覽器自身優化策略

由于每次重排都會造成額外的計算消耗,因此大多數瀏覽器都會通過隊列化修改并批量執行來優化重排過程。瀏覽器會將修改操作放入隊列里,直到過了一段時間或者操作達到了一個閾值,才清空隊列。當你獲取布局信息的操作的時候,會強制隊列刷新,比如訪問以下屬性或者使用以下方法:

  • offsetTop、offsetLeft、offsetWidth、offsetHeight
  • scrollTop、scrollLeft、scrollWidth、scrollHeight
  • clientTop、clientLeft、clientWidth、clientHeight
  • getComputedStyle()
  • getBoundingClientRect

以上屬性和方法都需要返回最新的布局信息,因此瀏覽器不得不清空隊列,觸發回流重繪來返回正確的值。因此,在修改樣式的時候,最好避免使用上面列出的屬性,它們都會刷新渲染隊列。如果要使用它們,最好將值緩存起來。

另一優化就是瀏覽器認為position為absolute或fixed的元素更改只會影響其本身和子元素,而static的元素變化則會影響之后的所有元素。原因在于absolute和fixed認為元素從文檔流中清除了,怎么操作是內部的事。例如:對于復雜動畫效果,使用絕對定位讓其脫離文檔流

31.3.2 多次操作變為一次操作

不要一條一條的修改DOM的樣式,盡量使用class進行樣式修改。

把DOM離線修改(批量修改DOM)

(1)使用documentFragment對象在內存里操作DOM

(2)先把DOM給display:none,修改完畢再顯示出來

(3)clone一個DOM節點到內存里,然后想怎么改就怎么改,改完后,和在線的那個的交換一下。

31.3.3 其它

使用css3硬件加速,可以讓transform、opacity、filters(濾鏡)這些動畫不會引起回流重繪(注意:對于動畫的其它屬性,比如background-color這些,還是會引起回流重繪的,不過它還是可以提升這些動畫的性能)

不要把DOM結點的屬性值放在一個循環里當成循環里的變量。不然這會導致大量地讀寫這個結點的屬性。

千萬不要使用table布局。因為可能很小的一個小改動會造成整個table的重新布局。

本文轉載自微信公眾號「執鳶者」,可以通過以下二維碼關注。轉載本文請聯系執鳶者公眾號。

 

責任編輯:武曉燕 來源: 執鳶者
相關推薦

2021-10-19 22:23:05

typeof方式Instanceof

2021-05-09 22:00:59

TypeofInstanceof運算符

2021-07-26 05:01:55

瀏覽器渲染流程

2018-11-14 19:30:57

前端Javascript性能優化

2021-12-03 06:59:23

操作符驗證點屬性

2019-01-16 14:50:19

回流重繪前端

2011-04-25 10:11:57

高性能web開發

2021-05-12 07:04:55

Js變量方式

2021-06-28 07:12:28

賦值淺拷貝深拷貝

2021-05-16 19:23:11

引用類型包裝

2021-06-16 07:03:37

New操作符函數

2021-05-19 07:02:42

JS對象方法

2021-07-05 07:02:33

前端跨域策略

2021-05-30 19:02:59

變量對象上下文

2021-06-09 07:01:30

前端CallApply

2021-06-11 06:54:34

原型構造函數

2022-12-08 15:42:36

瀏覽器重繪回流

2021-11-03 06:57:41

瀏覽器Jsonp安全

2021-07-08 07:01:53

瀏覽器安全前端

2021-07-14 07:00:53

瀏覽器技巧前端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕高清免费日韩视频在线 | 干干干操操操 | 亚洲天天 | 中文字幕一区在线 | 综合二区 | 成人一区二区视频 | 国产在线中文字幕 | 久久免费精品视频 | 欧美日韩一区不卡 | 三级黄视频在线观看 | 这里只有精品999 | 国产精品精品视频一区二区三区 | 日本三级电影免费 | 9999久久| 超碰伊人久久 | 欧洲一区二区三区 | 91精品国产91久久久久游泳池 | 一区二区三区在线播放 | 午夜精品久久久久久久久久久久久 | 亚洲一区二区三区四区五区午夜 | 无码国模国产在线观看 | 第四色影音先锋 | 久久精品国产免费一区二区三区 | 99爱视频 | 另类专区成人 | 久久91精品国产一区二区 | 国产在线视频在线观看 | 91av在线免费看 | 成人亚洲| 国内精品视频在线 | 国产一区久久 | 狠狠躁躁夜夜躁波多野结依 | www.啪啪.com | 午夜免费观看体验区 | 国产一区二区精品在线 | 福利精品 | 热久久性 | 中文字幕不卡视频在线观看 | 婷婷久久精品一区二区 | 毛片入口| 中文字幕亚洲视频 |