国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

瀏覽器渲染機制

這篇具有很好參考價值的文章主要介紹了瀏覽器渲染機制。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

學習渡一課程、參考 必須明白的瀏覽器渲染機制 - 掘金

渲染機制的流程

HTML解析

布局

分層

繪制

分塊

光柵化

HTML解析 - Parse HTML

解析html會生成一個 dom樹和cssom樹

?瀏覽器渲染機制,javascript,前端,javascript,學習

document.styleSheets? 可以看到cssom樹?

?瀏覽器渲染機制,javascript,前端,javascript,學習瀏覽器渲染機制,javascript,前端,javascript,學習

渲染阻塞

在渲染的過程中,遇到一個script標記時,就會停止渲染,去請求腳本文件并執(zhí)行腳本文件,因為瀏覽器渲染和 JS 執(zhí)行共用一個線程,而且這里必須是單線程操作,多線程會產(chǎn)生渲染 DOM 沖突。JavaScript的加載、解析與執(zhí)行會嚴重阻塞DOM的構(gòu)建。只有等到腳本文件執(zhí)行完畢,才會去繼續(xù)構(gòu)建DOM。

js不單會阻塞DOM構(gòu)建,還會導致CSSOM也阻塞DOM的構(gòu)建,如果JavaScript腳本還操作了CSSOM,而正好這個CSSOM還沒有下載和構(gòu)建,瀏覽器甚至會延遲腳本執(zhí)行和構(gòu)建DOM,直至完成其CSSOM的下載和構(gòu)建,然后再執(zhí)行JavaScript,最后在繼續(xù)構(gòu)建DOM

因此script的位置很重要,在實際使用過程中遵循以下兩個原則:

  • CSS 優(yōu)先:引入順序上,CSS 資源先于 JavaScript 資源。
  • JS置后:我們通常把JS代碼放到頁面底部,且JavaScript 應盡量少影響 DOM 的構(gòu)建

渲染

當我們生成DOM樹和CSSOM樹后,我們需要將這兩顆樹合并成渲染樹,渲染步驟包括樣式、布局、繪制

樣式計算

主線程會遍歷得到DOM樹,依次為樹中每個節(jié)點計算出它最終的樣式,稱之為Computed Style

這一過程中,很多預設值會變成絕對值,比如 red會變成rgb(255,0,0)相對單位會變成覺得單位 em 變成px。

布局

瀏覽器拿到渲染樹后,就會從渲染樹的根節(jié)點開始遍歷,然后確定每個節(jié)點對象在頁面上的確切大小與位置,通常這一行為也被稱為“自動重排”。布局階段的輸出是一個盒子模型,它會精確地捕獲每個元素在屏幕內(nèi)的確切位置與大小,所有相對測量值都將轉(zhuǎn)換為屏幕上的絕對像素。這一過程也可稱為回流。

?分層

分層是占用內(nèi)存空間的,主線程會使用一套復雜的策略對整個布局樹進行分層,分層的好處在于,將來某一個層改變后,僅會對該層進行后續(xù)處理,重而提升效率。

瀏覽器渲染機制,javascript,前端,javascript,學習

?繪制和光柵化

在繪制或光柵化階段,瀏覽器將在布局階段計算的每個框轉(zhuǎn)換為屏幕上的實際像素。繪畫包括將元素的每個可視部分繪制到屏幕上,包括文本、顏色、邊框、陰影和替換的元素(如按鈕和圖像)。瀏覽器需要非??斓赝瓿蛇@項工作。

性能優(yōu)化策略

在我們了解瀏覽器的渲染機制后,DOM 和 CSSOM 結(jié)構(gòu)構(gòu)建順序,我們可以針對性能優(yōu)化問題給出一些方案,提升頁面性能。

回流(reflow)與重繪(repaint)

當元素的樣式發(fā)生變化時,瀏覽器需要觸發(fā)更新,重新繪制元素。這個過程中,有兩種類型的操作,即重繪與回流。

  • 重繪(repaint): 當元素樣式的改變不影響布局時,瀏覽器將使用重繪對元素進行更新,此時由于只需要UI層面的重新像素繪制,因此損耗較少
  • 回流(reflow): 當元素的尺寸、結(jié)構(gòu)或觸發(fā)某些屬性時,瀏覽器會重新渲染頁面,稱為回流。此時,瀏覽器需要重新經(jīng)過計算,計算后還需要重新頁面布局,因此是較重的操作。會觸發(fā)回流的操作:
  • 添加或刪除可見的DOM元素
  • 元素的位置發(fā)生變化
  • 元素的尺寸發(fā)生變化(包括外邊距、內(nèi)邊框、邊框大小、高度和寬度等)
  • 內(nèi)容發(fā)生變化,比如文本變化或圖片被另一個不同尺寸的圖片所替代。
  • 頁面一開始渲染的時候(這肯定避免不了)
  • 瀏覽器的窗口尺寸變化(因為回流是根據(jù)視口的大小來計算元素的位置和大小的

注意:回流一定會觸發(fā)重繪,而重繪不一定會回流,重繪的開銷較小,回流的代價較高

因此為了減少性能優(yōu)化,我們可以盡量避免回流或者重繪操作 css

  • 避免使用table布局
  • 將動畫效果應用到position屬性為absolute或fixed的元素上

javascript

  • 避免頻繁操作樣式,可匯總后統(tǒng)一 一次修改
  • 盡量使用class進行樣式修改
  • 減少dom的增刪次數(shù),可使用 字符串 或者 documentFragment 一次性插入
  • 極限優(yōu)化時,修改樣式可將其display: none后修改
  • 避免多次觸發(fā)上面提到的那些會觸發(fā)回流的方法,可以的話盡量用 變量存住
async和defer的作用是什么?有什么區(qū)別?

defer 和 async 屬性的區(qū)別:

瀏覽器渲染機制,javascript,前端,javascript,學習

其中藍色線代表JavaScript加載;紅色線代表JavaScript執(zhí)行;綠色線代表 HTML 解析 1)情況1 <scriptsrc="script.js"> 沒有 defer 或 async,瀏覽器會立即加載并執(zhí)行指定的腳本,也就是說不等待后續(xù)載入的文檔元素,讀到就加載并執(zhí)行。

2)情況2 (異步下載) async 屬性表示異步執(zhí)行引入的 JavaScript,與 defer 的區(qū)別在于,如果已經(jīng)加載好,就會開始執(zhí)行——無論此刻是 HTML 解析階段還是 DOMContentLoaded 觸發(fā)之后。需要注意的是,這種方式加載的 JavaScript 依然會阻塞 load 事件。換句話說,async-script 可能在 DOMContentLoaded 觸發(fā)之前或之后執(zhí)行,但一定在 load 觸發(fā)之前執(zhí)行。

3)情況3 <scriptdefersrc="script.js">(延遲執(zhí)行) defer 屬性表示延遲執(zhí)行引入的 JavaScript,即這段 JavaScript 加載時 HTML 并未停止解析,這兩個過程是并行的。整個 document 解析完畢且 defer-script 也加載完成之后(這兩件事情的順序無關),會執(zhí)行所有由 defer-script 加載的 JavaScript 代碼,然后觸發(fā) DOMContentLoaded 事件。

defer 與相比普通 script,有兩點區(qū)別:

  • 載入 JavaScript 文件時不阻塞 HTML 的解析,執(zhí)行階段被放到 HTML 標簽解析完成之后;
  • 在加載多個JS腳本的時候,async是無順序的加載,而defer是有順序的加載

js優(yōu)化可以在script標簽加上 defer屬性 和 async屬性用于在不阻塞頁面文檔解析的前提下,控制腳本的下載和執(zhí)行

其他: CSS 標簽的 rel屬性 中的屬性值設置為 preload 能夠讓你在你的HTML頁面中可以指明哪些資源是在頁面加載完成后即刻需要的,最優(yōu)的配置加載順序,提高渲染性能文章來源地址http://www.zghlxwxcb.cn/news/detail-682048.html

首屏優(yōu)化加載
  • 減少首屏CGI的計算量:比如在微信8.8無現(xiàn)金日H5開發(fā)中,前端希望拿到用戶的個人信息、消費記錄、排名三類數(shù)據(jù),如果只通過一個CGI來處理,那么后臺響應時間肯定會變長;由于在H5的首屏中,只包含了用戶信息,消費記錄、排名都在第2屏和第3屏,此時其實可以利用異步的方式來拿消費記錄、排名的數(shù)據(jù)。
  • 頁面瘦身:壓縮HTML、CSS、JavaScript。
  • 減少請求:CSS、JavaScript文件數(shù)盡量少,甚至當CSS、JS的代碼不多時,可以考慮直接將代碼內(nèi)嵌到頁面中。
  • 多用緩存:緩存能大幅度降低頁面非首次加載的時間。
  • 少用table布局,瀏覽器在渲染table時會消耗較多資源,而且只有table里有一點變化,整個table都會重新渲染。
  • 做預加載:部分H5頁面首屏可能要下載較多的靜態(tài)資源,比如圖片,這時為了避免加載時出現(xiàn)“難看”的頁面,用預加載(loading的方式)做一個過渡

到了這里,關于瀏覽器渲染機制的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 前端秘法進階篇----這還是我們熟悉的瀏覽器嗎?(瀏覽器的渲染原理)

    前端秘法進階篇----這還是我們熟悉的瀏覽器嗎?(瀏覽器的渲染原理)

    目錄 一.瀏覽器渲染原理 二.渲染時間點 三.渲染流水線 1.解析html(Parse HTML) 1.1解析成DOM樹(document object model) 1.2解析成CSSOM樹(css?object model) 2.樣式計算(Recalculate Style) 3.布局(Layout) 4.分層(Layer) 5. 繪制(Paint) 6.分塊(Tiling) 7. 光柵化(Raster) 8. 畫(Draw) 四.附加面試題 1.什么是 reflow? 2.什

    2024年02月21日
    瀏覽(21)
  • 【前端八股文】瀏覽器系列:性能優(yōu)化——HTML、CSS、JS、渲染優(yōu)化

    【前端八股文】瀏覽器系列:性能優(yōu)化——HTML、CSS、JS、渲染優(yōu)化

    本系列目錄:【前端八股文】目錄總結(jié) 是以《代碼隨想錄》八股文為主的筆記。詳情參考在文末。 代碼隨想錄的博客_CSDN博客-leecode題解,ACM題目講解,代碼隨想錄領域博主 性能優(yōu)化,從以下幾個方面來進行。 避免HTML中直接寫CSS viewport加速頁面渲染 使用語義化標簽 減少標簽的

    2023年04月20日
    瀏覽(53)
  • 前端面試的話術集錦第 7 篇:高頻考點(瀏覽器渲染原理 & 安全防范)

    這是記錄 前端面試的話術集錦第七篇博文——高頻考點(瀏覽器渲染原理 安全防范) ,我會不斷更新該博文。??? 注意:該章節(jié)都是?個?試題。 1.1.1 瀏覽器接收到HTML?件并轉(zhuǎn)換為DOM樹 當我們打開?個??時,瀏覽器都會去請求對應的 HTML ?件。雖然平時我們寫代碼時

    2024年02月03日
    瀏覽(26)
  • 前端面試:【瀏覽器與渲染引擎】Web APIs - DOM、XHR、Fetch、Canvas

    嗨,親愛的讀者!當我們在瀏覽器中瀏覽網(wǎng)頁時,我們常常會與各種Web API打交道。這些API允許我們與網(wǎng)頁內(nèi)容、服務器資源和圖形進行交互。本文將深入探討一些常見的Web API,包括DOM、XHR、Fetch和Canvas,以幫助你了解它們的用途和如何使用它們。 1. DOM(文檔對象模型): 用

    2024年02月11日
    瀏覽(21)
  • 談一談瀏覽器與Node.js中的JavaScript事件循環(huán),宏任務與微任務機制

    談一談瀏覽器與Node.js中的JavaScript事件循環(huán),宏任務與微任務機制

    JavaScript是一個單線程非阻塞的腳本語言。這代表代碼是執(zhí)行在一個主線程上面的。但是JavaScript中有很多耗時的異步操作,例如AJAX,setTimeout等等;也有很多事件,例如用戶觸發(fā)的點擊事件,鼠標事件等等。這些異步操作并不會阻塞我們代碼的執(zhí)行。例如: 可以看到,上述代

    2024年02月12日
    瀏覽(21)
  • Java教程:如何讀取服務器文件并推送到前端并下載,圖片格式以瀏覽器渲染模式

    Java教程:如何讀取服務器文件并推送到前端并下載,圖片格式以瀏覽器渲染模式

    ----在我們做文件上傳時,通常會保存文件的相對路徑在數(shù)據(jù)庫中,然后返回前端http訪問路徑,來對文件進行下載或圖片預覽功能,但是有時候我們并不想直接返回文件訪問地址給前端,這就用到了Java當中的文件輸入輸出流,將文件以流的方式響應給瀏覽器,并渲染出圖片或

    2024年02月03日
    瀏覽(29)
  • 前端高頻面試題 js中堆和棧的區(qū)別和瀏覽器的垃圾回收機制

    前端高頻面試題 js中堆和棧的區(qū)別和瀏覽器的垃圾回收機制

    棧(stack) :是棧內(nèi)存的簡稱,棧是自動分配相對固定大小的內(nèi)存空間,并由系統(tǒng)自動釋放,棧數(shù)據(jù)結(jié)構(gòu)遵循FILO(first in last out)先進后出的原則,較為經(jīng)典的就是乒乓球盒結(jié)構(gòu),先放進去的乒乓球只能最后取出來。 堆(heap) :是堆內(nèi)存的簡稱,堆是動態(tài)分配內(nèi)存,內(nèi)存大小不固

    2024年02月11日
    瀏覽(32)
  • JS-27 前端數(shù)據(jù)請求方式;HTTP協(xié)議的解析;JavaScript XHR、Fetch的數(shù)據(jù)請求與響應函數(shù);前端文件上傳XHR、Fetch;安裝瀏覽器插件FeHelper

    JS-27 前端數(shù)據(jù)請求方式;HTTP協(xié)議的解析;JavaScript XHR、Fetch的數(shù)據(jù)請求與響應函數(shù);前端文件上傳XHR、Fetch;安裝瀏覽器插件FeHelper

    早期的網(wǎng)頁都是通過后端渲染來完成的,即服務器端渲染(SSR,server side render): 客戶端發(fā)出請求 - 服務端接收請求并返回相應HTML文檔 - 頁面刷新,客戶端加載新的HTML文檔; 服務器端渲染的缺點: 當用戶點擊頁面中的某個按鈕向服務器發(fā)送請求時,頁面本質(zhì)上只是一些數(shù)

    2024年02月16日
    瀏覽(42)
  • 瀏覽器渲染原理

    瀏覽器渲染原理

    當你在地址欄輸入內(nèi)容回車后,瀏覽器進程中的UI線程會捕捉輸入內(nèi)容,如果訪問的是網(wǎng)址,會啟動一個網(wǎng)絡線程來進行DNS解析;后面連接服務器獲取數(shù)據(jù);如果輸入的不是網(wǎng)址而是,就會使用默認配置的搜索引擎來進行查詢 網(wǎng)絡進程獲取到數(shù)據(jù)后會使用safeBrowsing檢查

    2024年02月07日
    瀏覽(67)
  • 瀏覽器渲染流程

    瀏覽器渲染流程

    解析HTML,生成DOM樹,解析CSS,生成CSSOM樹 將DOM樹和CSSOM樹結(jié)合,生成渲染樹(Render Tree) Layout(回流):根據(jù)生成的渲染樹,進行回流(Layout),得到節(jié)點的幾何信息(位置,大?。?Painting(重繪):根據(jù)渲染樹以及回流得到的幾何信息,得到節(jié)點的絕對像素 Display:將像素發(fā)送給GPU,展示在

    2024年02月09日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包