第一站 - 轻松上网从此开始!

上网第一站

当前位置: > SEO >

技术进阶:通过来JavaScript 性能调优提高 Web 应用性能(3)

时间:2018-02-05 10:47来源:我来投稿获取授权
以下内容来自网络或网友投稿,www.swdyz.com不承担连带责任,如有侵权问题请联系我删除。投稿如果是首发请注明‘第一站首发’。如果你对本站有什么好的要求或建议。那么都非常感谢你能-联系我|版权认领
通过 Reflow 和 Repaint 的介绍可知,每次 Reflow 比其 Repaint 会带来更多的资源消耗,我们应该尽量减少 Reflow 的发生,或者将其转化为只会触发 Repaint 操作的代

  通过 Reflow 和 Repaint 的介绍可知,每次 Reflow 比其 Repaint 会带来更多的资源消耗,我们应该尽量减少 Reflow 的发生,或者将其转化为只会触发 Repaint 操作的代码。

  参考如下代码:

  清单 16. reflow 介绍

  

技术进阶:通过来JavaScript 性能调优提高 web 应用性能

  这是我们经常接触的代码了,但是这段代码会产生 3 次 reflow。再看如下代码:

  清单 17. 减少 reflow

  

技术进阶:通过来JavaScript 性能调优提高 web 应用性能

  这里便只有一次 reflow,所以我们推荐这种 DOM 节点操作的方式。

  关于上述较少 Reflow 操作的解决方案,还有一种可以参考的模式:

  清单 18. 利用 display 减少 reflow

  

技术进阶:通过来JavaScript 性能调优提高 web 应用性能

  先隐藏 pDiv,再显示,这样,隐藏和显示之间的操作便不会产生任何的 Reflow,提高了效率。

  2.3特殊测量属性和方法

  DOM 元素里面有一些特殊的测量属性的访问和方法的调用,也会触发 Reflow,比较典型的就是"offsetWidth"属性和"getComputedStyle"方法。

  图 1. 特殊测量属性和方法

  

技术进阶:通过来JavaScript 性能调优提高 web 应用性能

  这些测量属性和方法大致有这些:

  · offsetLeft

  · offsetTop

  · offsetHeight

  · offsetWidth

  · scrollTop/Left/Width/Height

  · clientTop/Left/Width/Height

  · getComputedStyle()

  · currentStyle(in IE))

  这些属性和方法的访问和调用,都会触发 Reflow 的产生,我们应该尽量减少对这些属性和方法的访问和调用,参考如下代码:

  清单 19. 特殊测量属性

  

技术进阶:通过来JavaScript 性能调优提高 web 应用性能

  这里我们可以用临时变量将"offsetWidth"的值缓存起来,这样就不用每次访问"offsetWidth"属性。这种方式在循环里面非常适用,可以极大地提高性能。

  2.4 样式相关

  我们肯定经常见到如下的代码:

  清单 20. 样式相关

  

技术进阶:通过来JavaScript 性能调优提高 web 应用性能

  但是可以看到,这里的每一个样式的改变,都会产生 Reflow。需要减少这种情况的发生,我们可以这样做:

  解决方案 1:

  清单 21. className 解决方案

  

技术进阶:通过来JavaScript 性能调优提高 web 应用性能

  用 class 替代 style,可以将原有的所有 Reflow 或 Repaint 的次数都缩减到一个。

  解决方案 2:

  清单 22. cssText 解决方案

  

技术进阶:通过来JavaScript 性能调优提高 web 应用性能

  一次性设置所有样式,也是减少 Reflow 提高性能的方法。

  2.5 XPath

  一个页面上往往包含 1000 多页面元素,在定位具体元素的时候,往往需要一定的时间。如果用 id 或 name 定位可能效率不会太慢,如果用元素的一些其他属性(比如 className 等等)定位,可能效率有不理想了。有的可能只能通过遍历所有元素(getElementsByTagName)然后过滤才能找到相应元素,这就更加低效了,这里我们推荐使用 XPath 查找元素,这是很多浏览器本身支持的功能。

  清单 23. XPath 解决方案

  

技术进阶:通过来JavaScript 性能调优提高 web 应用性能

  浏览器 XPath 的搜索引擎会优化搜索效率,大大缩短结果返回时间。

  2.6 HTMLCollection 对象

  这是一类特殊的对象,它们有点像数组,但不完全是数组。下述方法的返回值一般都是 HTMLCollection 对象:

  · document.images, document.forms

  · getElementsByTagName()

  · getElementsByClassName()

(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发布者资料
第一站编辑 查看详细资料 发送留言 加为好友 用户等级:注册会员 注册时间:2012-05-22 19:05 最后登录:2014-08-08 03:08
栏目列表
推荐内容
分享按鈕