加入收藏 | 设为首页 | 会员中心 | 我要投稿 焦作站长网 (https://www.0391zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

高性能WEB开发 页面呈现、重绘、回流。

发布时间:2020-03-16 09:46:22 所属栏目:安全 来源:互联网
导读:在讨论页面重绘、回流之前。需要对页面的呈现流程有些了解,页面是怎么把html结合css等显示到浏览器上的,下面的流程图显示了浏览器对页面的呈现的处理流程。可

   

高性能WEB开发 页面呈现、重绘、回流。


    上图可以看到我们执行了2次button的click事件,每次click后都跟一次rendering(页面重绘),2次click函数执行的时间都差不多,0.25ms,0.26ms,但其后的rendering时间就相差一倍多。(这里也可以看出,其实很多时候前端的性能瓶颈并不在于JS的执行,而是在于页面的呈现,这种情况在用JS做到富客户端中更为突出)。我们再看图的下面部分,这是第一次rendering的详细信息,可以看到里面有2行是 Scheduleing layout task,这个就是我们前面讨论过的浏览器优化过的队列,可以看出我们引发2次的flush。
   

   

高性能WEB开发 页面呈现、重绘、回流。


   再看第二次rendering的详细信息,可以看出并没有Scheduleing layout task,所以这次rendering的时间也比较短。


  测试代码2:这个测试跟第一次测试的代码很类似,但加上了对layout的改变,为的是测试回流。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
    <script type="text/javascript">
        var s = document.body.style;
        
var computed;
        
if (document.body.currentStyle) {
          computed 
= document.body.currentStyle;
        } 
else {
          computed 
= document.defaultView.getComputedStyle(document.body, '');
        }
    
function testOneByOne(){
      s.color 
= 'red';
      s.padding 
= '1px';
      tmp 
= computed.backgroundColor;
      s.color 
= 'white';
      s.padding 
= '2px';
      tmp 
= computed.backgroundImage;
      s.color 
= 'green';
      s.padding 
= '3px';
      tmp 
= computed.backgroundAttachment;
    }

    
function testAll() {
      s.color 
= 'yellow';
      s.padding 
= '4px';
      s.color 
= 'pink';
      s.padding 
= '5px';
      s.color 
= 'blue';
      s.padding 
= '6px';

      tmp 
= computed.backgroundColor;
      tmp 
= computed.backgroundImage;
      tmp 
= computed.backgroundAttachment;
    }
    
</script>    
    color test <br />
    <button onclick="testOneByOne()">Test One by One</button>
    <button onclick="testAll()">Test All</button>
</body>        


   用dynaTrace监控如下:

  

高性能WEB开发 页面呈现、重绘、回流。


  相信这图不用多说大家都能看懂了吧,可以看出有了回流后,rendering的时间相比之前的只重绘,时间翻了3倍了,可见回流的高成本性啊。
  大家看到时候注意明细处相比之前的多了个 Calcalating flow layout。


  最后再使用Speed Tracer测试一下,其实结果是一样的,只是让大家了解下2个测试工具:

  测试1:

(编辑:焦作站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读