zoukankan      html  css  js  c++  java
  • 浏览器渲染原理及渲染阻塞

    输入URL到页面加载显示完成发生了什么?

    DNS解析
    TCP连接
    发送HTTP请求
    服务器处理请求并返回HTTP报文
    浏览器解析渲染页面
    连接结束

    渲染过程

    阻塞

    渲染阻塞

    定义:CSSOM负责存储渲染信息,浏览器就必须保证在合成渲染树之前,CSSOM是完备的(指所有的CSS(内联、内部和外部)都已经下载并解析完),只有CSSOM和DOM的解析完全结束,浏览器才会进入下一步的渲染,这就是CSS阻塞渲染,在不完备之前,页面是空白的。

    CSS性能优化

    首屏关键CSS 内联!

    内联CSS样式提前页面渲染时间
    首屏关键CSS:https://github.com/filamentgroup/criticalCSS

    异步加载CSS

    古老方法:

    • js动态创建Link标签
    • 使用link标签内的media属性,设置为不匹配的媒体类型(print/noexist),降低加载优先级;结束后要设置回来
    <link rel="stylesheet" href="mystyles.css" media="noexist" onload="this.media='all'">
    
    • 使用 link 标签内的 rel 属性,设置为可选样式表(alternate stylesheet),结束后设置回来
    <link rel="alternate stylesheet" href="mystyles.css" onload="this.rel='stylesheet'">
    

    一般:
    rel="preload" 进行异步加载

    <link rel="preload" href="mystyles.css" as="style" onload="this.rel='stylesheet'">
    

    文件压缩

    去除无用的CSS

    1. 提取公共类
    2. 去除没有用到的CSS

    选择器的使用

    昂贵属性少用

    重绘与重排优化

    1. 重排:整个页面重新渲染
      导致重排
    • 改变font-size/font-family
    • 改变元素尺寸或位置
    • 通过js改变css类
    • 通过js获取dom元素的位置属性(width/height/top/left等等)
    • css伪类激活
    • 窗口大小改变或者滚动条滚动

    ! Flex重排快

    1. 重绘:元素外观属性变化时,重新绘制元素
      避免不必要的重绘

    优化:

    1. 批量修改属性
    2. 批量修改DOM——将元素脱离文档流进行系列修改,然后放回去
      • display:none
      • document fragment构建子树
      • cloneNode,然后替换
    3. 设置position脱离文档流

    不用@import

    js阻塞

  • 相关阅读:
    Ubuntu16.04下同时安装Anaconda2与Anaconda3
    ansible 常用模块
    docker 笔记 (7) 限制容器
    linux 磁盘
    docker 笔记 (6)搭建本地registry
    docker 笔记 (5)常用命令
    docker 笔记(4) Dockerfile 常用的指令
    NGINX下配置CACHE-CONTROL
    mysql二进制安装
    [Selenium] Explicit wait 方法
  • 原文地址:https://www.cnblogs.com/qiuqiubai/p/12652880.html
Copyright © 2011-2022 走看看