zoukankan      html  css  js  c++  java
  • 重绘和回流

    1、浏览器把获取到的html代码解析成1个Dom树。

    2、浏览器把样式解析成样式结构体,在解析过程中会去掉各自浏览器不能识别的样式比如-moz,-webkit等。

    3、2者结合后构建呈现render tree。

    4、render tree构建完毕,浏览器就可以根据render tree绘制页面。

    其中脚本执行过程可能阻塞Dom的解析和构建和阻塞css处理,(比如遇到同步一个document.write或者javascript脚本查询任何元素的计算样式)。结果导致Dom和CssDom的构建频繁的交织在一起,Dom构建在javascript执行完毕前无法进行,而javascript在cssDom构建完成前也无法进行。

    首次加载的渲染时间、脚本执行都会受到样式表的阻塞,因此必须让css以最快的速度下载。也就是为什么要使用的“样式放在head里,js脚本放在最后/body前”。

    重绘和回流

    1、当render tree中的元素的尺寸、显隐等改变而需要重新构建,称为回流。每个页面至少需要一次回流,也就是页面第一次加载的时候。

    2、当render tree中的元素的属性改变只影响外观、风格,而不影响布局,称为重绘。

    那么回流必定引起重绘,而重绘不一定引起回流。

    任何对render tree元素的操作都会引起重绘或者回流,所以减少对render tree的操作能减少重绘、回流。

    比如:javascript修改元素style属性,如果已经定义好的样式,用js操作改变className;

    新建一个最外层的大div,这个div会首先添加所有新元素,最后才把这个div append到页面上;

    或者先display:none隐藏元素,然后对这个元素进行操作,最后显示该元素;

    有些属性值可以定义到变量中进行缓存,需要用的时候读取这个变量。

  • 相关阅读:
    C# winform 学习(三)
    (Java实现) 均分纸牌
    (Java实现) 拦截导弹
    Delphi从内存流中判断图片格式(好多相关文章)
    Qt之QTableView显示富文本(使用了QAbstractTextDocumentLayout和QTextDocument)
    MAC和PHY的区别(网线上传递的是模拟信号)
    Qt之模型/视图(自定义按钮)(重绘QStyleOptionButton)
    QQ音乐的请求
    Log4j、Log4j 2、Logback、SFL4J、JUL、JCL的比较
    LRU Cache
  • 原文地址:https://www.cnblogs.com/wanbi/p/4176090.html
Copyright © 2011-2022 走看看