• <noscript id="ggggg"><dd id="ggggg"></dd></noscript>
    <small id="ggggg"></small> <sup id="ggggg"></sup>
    <noscript id="ggggg"><dd id="ggggg"></dd></noscript>
    <tfoot id="ggggg"></tfoot>
  • <nav id="ggggg"><cite id="ggggg"></cite></nav>
    <nav id="ggggg"></nav>
    成人黃色A片免费看三更小说,精品人妻av区波多野结衣,亚洲第一极品精品无码,欧美综合区自拍亚洲综合,久久99青青精品免费观看,中文字幕在线中字日韩 ,亚洲国产精品18久久久久久,黄色在线免费观看

    高效前端之再探頁面渲染優(yōu)化

    2021-4-2    前端達(dá)人

    首先仍然不得不提的是 “在客戶端拿到 HTML 后的處理”:

    • 從上到下解析 HTML 文檔生成DOM樹;
    • 加載解析樣式構(gòu)建CSSOM樹;
    • 加載并執(zhí)行JavaScript代碼;
    • 根據(jù)DOM樹和CSSOM樹,生成 render 樹;
    • 渲染;
    • 布局;
    • 繪制

    我們可能很多次聽到過:“要盡可能地減少重排和重繪,因?yàn)樗鼈儠绊憺g覽器性能。”
    但,為什么呢?

    事實(shí)上,一個頁面是由許多層級組成的(就像千層餅一樣) —— 這里的“層級”指的是“ DOM 元素渲染層(Layer)”。一個頁面在構(gòu)建完 render tree 到展現(xiàn)在我們面前還經(jīng)歷了一個“特別的流程”:

    1. 瀏覽器會先獲取DOM樹并依據(jù)樣式將其分割成多個獨(dú)立的渲染層
    2. CPU 將每一層繪制進(jìn)位圖中
    3. 將位圖作為紋理上傳至 GPU(顯卡)繪制
    4. GPU 將所有的渲染層緩存并復(fù)合多個渲染層最終形成我們的圖像(如果下次上傳的渲染層沒有發(fā)生變化,GPU 就不需要對其進(jìn)行重新繪制)

    (:從上面的步驟我們可以知道:布局是CPU處理的,而繪制是由GPU完成的
    就像這張圖說的(from Firefox的3D View插件的頁面Layers層級圖)
    layer-index

    問題就發(fā)生在上面所說流程的第2、4步中。大家試想一下:如果我們把那些會發(fā)生復(fù)雜運(yùn)動/變化或一直發(fā)生大量重排重繪的元素提起出來,單獨(dú)放在一個渲染層觸發(fā),那它就不會連累其他元素了!

    那什么情況下會觸發(fā)渲染層呢?
    比如 video 、WebGL 、Canvas 、CSS3 3D 、CSS濾鏡 、z-index大于某個相鄰節(jié)點(diǎn)的值 的元素都會觸發(fā)新的Layer —— 這里要理解一點(diǎn):它并不單單指 z-index!這里極力推薦張鑫旭大大的這一篇文章:深入理解CSS中的層疊上下文和層疊順序
    比較簡單的方法是,給元素加上下面的樣式:

    transform: translateZ(0); backface-visibility: hidden; 
    
    • 1
    • 2

    我們把容易觸發(fā)重排重繪的元素單獨(dú)觸發(fā)渲染層,讓它與那些“靜態(tài)”元素隔離,讓 GPU 分擔(dān)更多的渲染工作,我們通常把這樣的措施成為硬件加速,或者是 GPU 加速。大家之前肯定聽過這個說法 —— 就比如CSS中的 will-change 。

    不論是重排還是重繪,都會阻塞瀏覽器。要提高網(wǎng)頁性能,就要降低重排和重繪的頻率和成本,近可能少地觸發(fā)重新渲染。正如我們上面提到的:重排是由 CPU 處理的,而重繪是由 GPU 處理的,CPU 的處理效率遠(yuǎn)不及 GPU,并且重排一定會引發(fā)重繪,而重繪不一定會引發(fā)重排。所以在性能優(yōu)化工作中,我們更應(yīng)當(dāng)著重減少重排的發(fā)生。


    還有什么可以優(yōu)化的?

    1. CSS 屬性讀寫分離:瀏覽器沒次對元素樣式進(jìn)行讀操作時,都必須進(jìn)行一次重新渲染(重排 + 重繪),所以我們在使用 JS 對元素樣式進(jìn)行讀寫操作時,最好將兩者分離開,先讀后寫,避免出現(xiàn)兩者交叉使用的情況
    2. 通過切換 class 或者 style.csstext 屬性去批量操作元素樣式
    3. DOM 元素離線更新:當(dāng)對 DOM 進(jìn)行相關(guān)操作時,例、appendChild 等都可以使用 documentFragment 對象進(jìn)行離屏操作,帶元素“組裝”完成后再一次插入頁面,或者使用 display:none 對元素隱藏,在元素“消失”后進(jìn)行相關(guān)操作,然后再顯示出來
    4. visibility: hidden 是個好東西,它既有display的隱藏,又有opacity的占位。而且它還支持移動動畫
    5. 圖片在渲染前指定大小:因?yàn)?img 元素是內(nèi)聯(lián)元素,所以在加載圖片后會改變寬高,嚴(yán)重的情況會導(dǎo)致整個頁面重排,所以最好在渲染前就指定其大小,或者讓其脫離文檔流

    日歷

    鏈接

    個人資料

    存檔

    主站蜘蛛池模板: 久久99精品国产精品| 国内精品久久久久久久小说| 欧美一区二区丝袜高跟鞋| 国产精品资源一区二区| 日韩成人无码v清免费| 国产日韩欧美综合| 国产人成777在线视频直播| 久久人妻无码一区二区| 久久亚洲乱码中文字幕熟女| 国内精品伊人久久久久AV一坑 | 亚洲国产欧美中文丝袜日韩| 国产AV秘 无码一区二区三区| 成人性生交大片免费网站| 日韩免费中文字幕| 国模小黎自慰337P人体| 国产剧情无码中文字幕在线观看不卡视频| 国产精品尤物在线观看| 亚洲是图一区二区视频| 亚洲国产午夜成人福利AV| 国产精品中文字幕视频| 永久免费无码网站在线观看| 国产男女猛烈视频在线观看| 国产高清在线精品一区不卡| 久久毛片少妇高潮| 国内国产区免费视频| 亚洲男人的天堂久久精品| 亚洲午夜免费福利视频| 又粗又硬又黄又爽的免费视频| 亚洲综合久久久久久888| 久久综合香蕉国产蜜臀AV| 免费精品国产人妻av| 无码人妻丰满熟妇区免费| 四虎影视一区二区精品| 波多野结衣一区二区三区视频| 国产中文字幕在线精品 | 98视频精品全部国产| 九九久久99综合一区二区| 国产精品热久久无码av| 丝袜调教91Porn| 人妻丝袜无码专区视频网站| 在线视频 一区 色|