成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

瀏覽器渲染原理

lpjustdoit / 2883人閱讀

摘要:瀏覽器會使用它來判斷文檔類型,決定使用何種協(xié)議來解析,以及切換瀏覽器模式。如果文件代碼不合法,那么瀏覽器解析時便會出一些差錯。瀏覽器的工作流程解析,生成樹,解析生產(chǎn)根據(jù)生成的和構建渲染樹根據(jù)渲染樹,計算每個節(jié)點在屏幕上的位置,尺寸等信息。

什么是DOCTYPE及作用
DTD是一系列的語法規(guī)則,用來定義XML或(X)HTML的文件類型。瀏覽器會使用它來判斷文檔類型,決定使用何種協(xié)議來解析,以及切換瀏覽器模式。
DOCTYPE是用來聲明文檔類型和DTD規(guī)范的,一個主要的作用是文件的合法性驗證。如果文件代碼不合法,那么瀏覽器解析時便會出一些差錯。
瀏覽器的工作流程

解析HTML,生成DOM樹,解析CSS生產(chǎn)CSSOM

根據(jù)生成的DOM和CSSOM構建渲染樹Render tree

根據(jù)渲染樹,計算每個節(jié)點在屏幕上的位置,尺寸等信息。

將渲染樹繪制到屏幕上

注意:渲染對象和Dom元素相對應,但這種對應關系不是一對一的,不可見的Dom元素不會被插入渲染樹,例如head元素。另外,display屬性為none的元素也不會在渲染樹中出現(xiàn)(visibility屬性為hidden的元素將出現(xiàn)在渲染樹中)。
重排(reflow)和重繪(repaint)
當頁面元素的幾何屬性發(fā)生改變時會發(fā)生重排,當元素的屬性的該變沒有影響到幾何屬性時發(fā)生重繪。重排一定會發(fā)生重繪,但重繪不一定會引起重排。
什么時候發(fā)生重排

添加或刪除可見的DOM元素

元素位置發(fā)生該變

元素的尺寸發(fā)生該變(包括:外邊距,內(nèi)邊距,邊框厚度,寬度,高度等屬性)

內(nèi)容改變,例如文本內(nèi)容該變,或圖片被另外一張不同尺寸的圖片代替

頁面渲染器初始化

由于每次重排都會產(chǎn)生計算消耗,大多數(shù)瀏覽器通過隊列化修改并批量執(zhí)行來優(yōu)化重排過程,獲取布局信息的操作會導致隊列刷新,如下面的這些屬性和方法需要返回最新的布局信息,所以瀏覽器會刷新渲染隊列并引發(fā)重排,應盡量避免使用。

clientWidth、clientHeight、clientTop、clientLeft

offsetWidth、offsetHeight、offsetTop、offsetLeft

scrollWidth、scrollHeight、scrollTop、scrollLeft

scrollIntoView()、scrollIntoViewIfNeeded()

getComputedStyle()

getBoundingClientRect()

scrollTo()

什么時候發(fā)生重繪
當頁面中元素樣式的該變不影響布局時,發(fā)生重繪。比如:該變color,background,visibility等
思考下面兩段代碼:
代碼一:

var foo = document.getElementById("fooBar");
foo.style.color = "blue";
foo.style.marginTop = "30px";

代碼二:

var foo = document.getElementById("fooBar");
foo.style.color = "blue";
var margin = parseInt(foo.style.marginTop);
foo.style.marginTop = (margin + 10) + "px";

上面兩端代碼分別發(fā)生多少次重排和重繪?
代碼一:一次重排和重繪;代碼二:一次重排和一次重排和重繪
為什么會這樣呢?
當修改一個DOM節(jié)點時,修改的操作會先緩存到隊列,隊列中的修改會在下次UI線程執(zhí)行時批量更新。修改過的節(jié)點會被標記為‘臟’(Dirty),獲取臟節(jié)點的屬性會導致隊列中的更新操作立刻執(zhí)行。所以第二段代碼的不同之處在于var margin = parseInt(foo.style.marginTop);引發(fā)了一次重排。
如何減少重排和重繪的次數(shù)

避免對同一個DOM節(jié)點進行讀和寫操作的交叉進行。

使用display:none臨時從文檔中移除,添加完元素后在顯示它

使用document fragment

為需要修改的節(jié)點創(chuàng)建一個備份,然后對副本進行操作,修改完后用其代替舊節(jié)點(cloneNode)

使用position為absolute或fixed的元素創(chuàng)建動畫

window.requestAnimation()

虛擬DOM庫

參考資料:
How browsers work
《高性能JavaScript》

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://m.hztianpu.com/yun/97950.html

相關文章

  • 渲染原理到性能優(yōu)化(一)

    摘要:有人會說,會用就行了,知道渲染原理有必要么其實渲染原理決定著性能優(yōu)化的方法,只有在了解原理之后,才能完全理解為什么這樣做可以優(yōu)化性能。性能優(yōu)化結合渲染原理,通過實際例子,看看如何優(yōu)化組件。 前言 以下,是我在2018 React Conf 的分享內(nèi)容,希望對大家有所幫助??梢韵仍诠倬W(wǎng)下載我的ppt對照看,效果更佳哦~。 很多人都使用過React,但是很少人能說出它內(nèi)部的渲染原理。有人會...

    heartFollower 評論0 收藏0
  • JavaScript 工作原理之十一-渲染引擎及性能優(yōu)化小技巧

    摘要:在中渲染樹中的每個節(jié)點即是一個渲染器或者渲染器對象。計算的樣式每個渲染器對象代表一個矩形區(qū)域通常是和一個節(jié)點的盒模型相對應。坐標系統(tǒng)是相對于根渲染器的。根渲染器的定位為和大小即為瀏覽器窗口的可視化部分比如。渲染器作廢其在屏幕上的矩形區(qū)域。 原文請查閱這里,略有刪減,本文采用知識共享署名 4.0 國際許可協(xié)議共享,BY Troland。 本系列持續(xù)更新中,Github 地址請查閱這里。 ...

    GraphQuery 評論0 收藏0
  • JavaScript 工作原理之十一-渲染引擎及性能優(yōu)化小技巧

    摘要:在中渲染樹中的每個節(jié)點即是一個渲染器或者渲染器對象。計算的樣式每個渲染器對象代表一個矩形區(qū)域通常是和一個節(jié)點的盒模型相對應。坐標系統(tǒng)是相對于根渲染器的。根渲染器的定位為和大小即為瀏覽器窗口的可視化部分比如。渲染器作廢其在屏幕上的矩形區(qū)域。 原文請查閱這里,略有刪減,本文采用知識共享署名 4.0 國際許可協(xié)議共享,BY Troland。 本系列持續(xù)更新中,Github 地址請查閱這里。 ...

    Allen 評論0 收藏0
  • JavaScript 工作原理之十一-渲染引擎及性能優(yōu)化小技巧

    摘要:在中渲染樹中的每個節(jié)點即是一個渲染器或者渲染器對象。計算的樣式每個渲染器對象代表一個矩形區(qū)域通常是和一個節(jié)點的盒模型相對應。坐標系統(tǒng)是相對于根渲染器的。根渲染器的定位為和大小即為瀏覽器窗口的可視化部分比如。渲染器作廢其在屏幕上的矩形區(qū)域。 原文請查閱這里,略有刪減,本文采用知識共享署名 4.0 國際許可協(xié)議共享,BY Troland。 本系列持續(xù)更新中,Github 地址請查閱這里。 ...

    RyanQ 評論0 收藏0
  • 用WEB技術棧開發(fā)NATIVE應用(二):WEEX 前端SDK原理詳解

    摘要:依舊采取傳統(tǒng)的開發(fā)技術棧進行開發(fā),同時在終端的運行體驗不輸。首先來看下前端開發(fā)框架目前與構成了三大最流行的前端開發(fā)框架,具有組件化以及三大特性,還學習的,引入了狀態(tài)管理模塊。 摘要: WEEX依舊采取傳統(tǒng)的web開發(fā)技術棧進行開發(fā),同時app在終端的運行體驗不輸native app。其同時解決了開發(fā)效率、發(fā)版速度以及用戶體驗三個核心問題。那么WEEX是如何實現(xiàn)的?目前WEEX已經(jīng)完全開...

    ls0609 評論0 收藏0
  • [面試專題]一線互聯(lián)網(wǎng)大廠面試總結

    摘要:道阻且長啊前端面試總結前端面試筆試面試騰訊一面瀏覽器工作原理瀏覽器的主要組件包括用戶界面包括地址欄后退前進按鈕書簽目錄瀏覽器引擎用來查詢及操作渲染引擎的接口渲染引擎渲染界面和是基于兩種渲染引擎構建的,使用自主研發(fā)的渲染引擎,和都使用網(wǎng)絡用來 道阻且長啊TAT(前端面試總結) 前端 面試 筆試 面試 騰訊一面 1.瀏覽器工作原理 瀏覽器的主要組件包括: 用戶界面- 包括地址欄、后退/前...

    lemanli 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<