• web前端优化之reflow(减少页面的回流)


    1、什么是reflow?

    reflow(回流)是指浏览器为了重新渲染部分或者全部的文档,重新计算文档中的元素的位置和几何构造的过程。

    因为回流可能导致整个Dom树的重新构造,所以是性能的一大杀手。

    以下操作会引起回流:

    ① 改变窗口大小

    ② font-size大小改变

    ③ 增加或者移除样式表

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

    ⑤ 激活CSS伪类(:hover)

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

    ⑦ js操作dom

    ⑧ offset相关属性计算

    ⑨ 设置style的值

    ......

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

    <style type="text/css">
         .changeStyle {  100px; height: 100px; }
    </style>
    <script type="text/javascript">
         $(document).ready(function () {
             var el = $('id');
             //1
             el.css('width', '100px');
             el.css('height', '100px');
             //2
             el.css({ 'width': '100px;', 'height': '100px;' });
             //3 
             el.addClass('changeStyle');
     
         });
    </script>

    推荐第三种,避免第一种

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

    ② 具有动画效果请使用absolute

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

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

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

    ⑤ 在最末改变元素

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

    ⑥ 动画移动时候,要控制

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

  • 相关阅读:
    静态代码块、非静态代码块、构造函数之间的执行顺序
    Linux跨主机传输文件
    🗒 Linux 系统监控
    Mysql Mode
    Mysql 表锁行锁
    Centos 下修改时区
    Redis 解决内存过大
    Mysql 表达式
    Centos 二进制包安装Mysql5.7
    Vim 快捷键
  • 原文地址:https://www.cnblogs.com/GreenLeaves/p/6509398.html
Copyright © 2020-2023  润新知