zoukankan      html  css  js  c++  java
  • 【web前端优化之reflow】减少页面的回流

    前言

    昨天看网课的时候,听到这个词语,但是不懂什么意思,所以今天百度了一下,以下内容转载自https://www.imooc.com/article/51623。。。。。

    什么是reflow?

    这个单词字面意思就是回流,这里举一个例子:

    我们这里有个dom树:

    复制代码

     1 <p> 2     <span class="title"></span> 3     <label class="checkbox"> 4         <input type="checkbox" value="足球" /> 5         red 6     </label> 7     <label class="checkbox"> 8         <input type="checkbox" value="篮球" /> 9         black10     </label>11     <label class="checkbox">12         <input type="checkbox" value="乒乓" />13         english中文14     </label>15 </p>

    复制代码

    我们如果删除了其中一个节点,比如第四行的节点,这棵树肯定不会就这么倒了,所以会形成一个新的dom树,这就是回流:

    回流是指浏览器为了重新渲染部分或者全部的文档而重新计算文档中元素的位置和几何构造的过程。
    因为回流可能导致整个dom树的重新构造,所以是性能的一大杀手

    以下操作会引起回流:

    ① 改变窗口大小

    ② font-size大小改变

    ③ 增加或者移除样式表

    ④ 内容变化(input中输入文字会导致)

    ⑤ 激活CSS伪类(:hover)

    ⑥ 操作class属性,新增或者减少

    ⑦ js操作dom

    ⑧ offset相关属性计算

    ⑨ 设置style的值

    ......

    reflow与repaint是减缓js的几大主要原因,尤其是reflow更是性能杀手,所以我们应该想法避免。

    减少页面回流

    ① 一起变化

    如果要改变一个元素的样式,可以将所有样式集中在一个class上面一次变化,而不是变化几次:

    复制代码

     1 <style type="text/css"> 2     .changeStyle {  100px; height: 100px; } 3 </style> 4 <script type="text/javascript"> 5     $(document).ready(function () { 6         var el = $('id'); 7         //1 8         el.css('width', '100px'); 9         el.css('height', '100px');10         //211         el.css({ 'width': '100px;', 'height': '100px;' });12         //3 13         el.addClass('changeStyle');14 15     });16 </script>

    复制代码

    以上几种做法,我这里弱弱的推荐第三种,避免第一种。

    ② 具有动画效果请使用absolute

    因为absolute元素的改变对其它元素的回流影响不大,所以我们的动画效果的元素还是将他搞成absolute吧。

    ③ 避免使用表格布局(记住只是布局哦,我们数据还是应该用表格的)

    ④ 请绝对不要使用CSS表达式,性能杀手啊,特别是IE

    ⑤ 在最末改变元素

    因为回流是自上而下的,所以下不及上,我们在最后面修改信息对全局影响越少。

    ⑥ 动画移动时候,要控制

    比如我们拖动元素时候,我是在他x或者y坐标改变5px才操作,这样虽说降低了平滑度,但是对性能有提高。

    结语


    作者:慕UI4062818
    链接:https://www.imooc.com/article/51623
    来源:慕课网

  • 相关阅读:
    美国贷款买饭的房屋保险
    ArrayList和数组间的相互转换
    JList动态添加元素
    美国交往礼仪
    刘元普双生贵子(但行好事,莫问前程)
    CountDownLatch与CyclicBarrier
    彻底理解Java的feature模式
    Java中的Future模式原理自定义实现
    浅谈Java Future接口
    Future接口和Callable接口以及FeatureTask详解
  • 原文地址:https://www.cnblogs.com/lzl-mbl/p/10157190.html
Copyright © 2011-2022 走看看