zoukankan      html  css  js  c++  java
  • 浅谈浏览器渲染

    今天在slideshare上看到一个有关浏览器解析和渲染的技术分享,感觉不错,所以想写些东西,总结一下顺便加深印象。

    这属于前端性能范畴,对此感兴趣的朋友有两本书值得一看:《high performance javascript》和《even faster websites》。

    回过头来,我主要想说说浏览器的render部分。

    首先来了解浏览器的reflow和repaint事件。

    凡是对前端UI进行了操作,如插入DOM节点,修改DOM元素的尺寸,布局,字体颜色等。均会触发浏览器的reflow或者repaint事件。

    更详细点的话,凡是影响到页面layout的操作,都会触发reflow以重新计算页面布局,随之repaint来重绘页面。

    而repaint,对于字体的大小,颜色,页面元素的背景改变会触发repaint重绘页面。

    可以看出触发reflow的操作也会触发repaint,反之则不一定。而且基本都是对DOM元素的操作。

    ppt中还提到,浏览器对render进行了一定的优化,进行队列和缓存处理以提高render性能。

    对于解决方案,其中也列出几个很有操作性的方法。

    • 减少对DOM Tree的操作,对DOM操作进行缓存

      这里可以采用documentFragment.通过查MDN可以 了解到,documentFragment可以作为DOM元素的缓存,可以通过它appendChild,但不会影响到DOM Tree,最后可以把documentFragment一并插 如DOM Tree中,很显然这样对性能有益。

      或者先对要操作的DOM元素进行隐藏(display:none),等所有操作结束后,再显示该元素。

    • 一次性修改样式

      当修改的样式属性较多时,建议不要采用el.style.color = '#dcdcdc'的方法逐个设值。 可以采用定义一个外部class,用el.className = 'definedClass'来实现。 或者用el.style.cssText = 'color: red; 30px;....'。

    • 缓存DOM元素layout相关属性

      如ppt中所演示的,用变量来储存DOM元素的width,offsetTop等属性值,避免反复重新取值,避免一些不必要地 重复计算。

    • 关于animation的帧宽

      ppt中列出了一些流行js库的默认配置, 一篇博客提到动画的间隔时间设的太短,会导致浏览器太过负荷,导致一定的失帧。

    最后感谢ppt作者的分享,从中学到不少。

  • 相关阅读:
    linux笔记
    初探hook的键盘获取
    python pyHook安装
    转: ZigBee/Z-Stack CC2530实现低功耗运行的配置简介
    三种zigbee网络架构详解
    adc verilog spi 时序
    dac verilog ad5601
    verilog 三段式状态机的技巧
    fpga 状态机 检测1011序列
    lattice diamond fpga 状态机的理解
  • 原文地址:https://www.cnblogs.com/AndyWithPassion/p/browserRenderPerformance.html
Copyright © 2011-2022 走看看