关于DOM的优化以及js的性能问题

http://www.ruanyifeng.com/blog/2014/10/event-loop.html   写的很好的JavaScript运行机制的详解;

http://web.jobbole.com/82631/  还有这个是很好的解释的Javascript的性能

关于DOM的优化

为什么是DOM

标准的xml/html的文本解析协议,常见的有DOM与SAX。在解析速度及内存占用上,SAX比DOM有优势,但为什么浏览器选择DOM解析html?

(1)DOM VS SAX

SAX提供一次性解析文本,不生成对象,Iterator模式访问元素,event-based,PUSH模式触发,简单说:App需要向Parser注册,当Parser遍历xml时,触发调用APP 。想深入体验,用下javax.xml.parsers.SAXParser。这里说个题外话,改进版StAX是PULL模式,但这都不重要了,重要是:一次性文本解析,不生成对象。

DOM解析文本后,生成DOM树。即:一次性文本解析,生成对象。

(2)浏览器选择了DOM

单次效率DOM不如SAX,但SAX不生成对象,浏览器很多操作很难满足,比如:元素定位,元素样式渲染……所以DOM是必然之选

当解析的html文件很大时,生成DOM树占用内存较大,同时遍历(不更新)元素耗时也更长。但这都不是重点,DOM的核心问题是:DOM修改导致的页面重绘、重新排版!重新排版是用户阻塞的操作,同时,如果频繁重排,CPU使用率也会猛涨!

DOM操作会导致一系列的重绘(repaint)、重新排版(reflow)操作。为了确保执行结果的准确性,所有的修改操作是按顺序同步执行的。大部分浏览器都不会在JavaScript的执行过程中更新DOM。相应的,这些浏览器将对对 DOM的操作放进一个队列,并在JavaScript脚本执行完毕以后按顺序一次执行完毕。也就是说,在JavaScript执行的过程,直到发生重新排版,用户一直被阻塞。

    一般的浏览器中(不含IE),repaint的速度远快于reflow,所以避免reflow更重要

导致repaint、reflow的操作

 * DOM元素的添加、修改(内容)、删除( Reflow + Repaint)

    * 仅修改DOM元素的字体颜色(只有Repaint,因为不需要调整布局)

    * 应用新的样式或者修改任何影响元素外观的属性

    * Resize浏览器窗口、滚动页面

    * 读取元素的某些属性(offsetLeft、offsetTop、offsetHeight、offsetWidth、scrollTop/Left/Width/Height、clientTop/Left/Width/Height、getComputedStyle()、currentStyle(in IE))

【2】其他

某些Javascript框架中,CSS选择器,如:var el = $(‘.hyddd‘);由于IE6、7不支持,所以Javascript框架必须通过遍历整个DOM树来寻找对象。

. 针对repaint、reflow,Nicholas 这个里面的《Speed up your JavaScript, Part 4》做了详细介绍、也就是这个http://www.nczonline.net/blog/2009/02/03/speed-up-your-javascript-part-4/

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-14 21:25:42

关于DOM的优化以及js的性能问题的相关文章

前端性能优化:DOM操作性能优化建议

其实在web开发中,单纯因为js导致性能问题的很少,主要都是因为DOM操作引起的. 1查找元素的优化 2改变DOM,包括添加,修改,删除DOM 3改变DOM的样式类等 4批量修改DOM 5减少iframe 6样式放在header中,脚本放在关闭标签</body>之前 1查找元素的优化   因为ID是唯一的,也有原始的方法,因此使用ID查找元素是最快的,其次的是根据类和类型查找元素,通过属性查找元素是最慢的,因此应该尽可能的通过ID或者类来查找元素,避免通过类来查找元素. 2改变DOM,包括添加

[js] 前端性能优化

原文链接:http://www.cnblogs.com/xxcanghai/p/5205998.html 链接:http://www.zhihu.com/question/21658448/answer/18903129 网络性能优化,加快访问速度,浏览器并行加载数量,怎样实现原生JS异步载入,CDN加速的原理,如何将不同静态资源发布到多个域名服务器上,发布后这些静态字段的url路径改怎么批量改写,用什么工具进行项目打包,css打包后的相对路径怎么转换为绝对路径,用什么工具进行项目模块依赖管理,

Babylon.js官方性能优化文档中文翻译

在这里列出Babylon.js官方性能优化文档的中英文对照,并在CardSimulate项目里对其中的一些优化方法进行实践. How To 如何 Optimize your scene 优化你的场景 Table of contents 内容列表 How To Optimize Your Scene 如何优化你的场景 Use TransformNode instead of AbstractMesh or empty meshes 使用变换节点代替抽象网格或者空网格 Changing per me

操作DOM会影响WEB应用的性能

平时在工作中,要优化自己开发的WEB应用的性能,一般是遵循以下几个原则: 1.减少网络请求. 2.压缩.合并静态资源文件,以此来减轻网络传输的带宽压力和资源消耗. 3.代码逻辑层面上的性能优化.比如减少循环次数.减少DOM操作的次数(减少DOM的获取与修改次数)等. 这里就来讲一下为什么DOM操作会影响WEB应用的性能. DOM与ES的关系 DOM(Document Object Model,文档对象模型)是一个独立于语言的.用于操作XML和HTML文档的程序接口(API),我们可以通过调用其中

优化Angular应用的性能

优化Angular应用的性能 MVVM框架的性能,其实就取决于几个因素: 监控的个数 数据变更检测与绑定的方式 索引的性能 数据的大小 数据的结构 我们要优化Angular项目的性能,也需要从这几个方面入手. 1. 减少监控值的个数 监控值的个数怎么减少呢? 考虑极端情况,在不引入Angular的时候,监控的个数是为0的,每当我们有需要绑定的数据项,就产生了监控值. 我们注意到,Angular里面使用了一种HTML模板语法来做绑定,开发业务项目非常方便,但考虑一下,这种所谓的“模板”,其实与我们

不修改代码就能优化ASP.NET网站性能的一些方法

阅读目录 开始 配置OutputCache 启用内容过期 解决资源文件升级问题 启用压缩 删除无用的HttpModule 其它优化选项 本文将介绍一些方法用于优化ASP.NET网站性能,这些方法都是不需要修改程序代码的.它们主要分为二个方面:1. 利用ASP.NET自身的扩展性进行优化.2. 优化IIS设置. 回到顶部 配置OutputCache 用缓存来优化网站性能的方法,估计是无人不知的. ASP.NET提供了HttpRuntime.Cache对象来缓存数据,也提供了OutputCache指

优化Web中的性能

优化Web中的性能 简介 web的优化就是一场阻止http请求最终访问到数据库的战争. 优化的方式就是加缓存,在各个节点加缓存. web请求的流程及节点 熟悉流程及节点,才能定位性能的问题.而且优化的顺序一般也是按请求的流程逐一优化.这里的流程只是做个概要,并不代表全面. 整个流程是以最快的方式让用户看到结果 定位的方法 思路是:把看不见的http,具体化.可视化. 定位是优化的前提.没有准确的定位就无法有效的解决问题. 浏览器 看整个请求的时间 看整个页面加载的时间 看页面加载的数据大小 看页

Dom编程优化

对Dom的访问代价是昂贵,在富网页应用中通常是性能的瓶颈,所以对Dom的优化十分重要. 一.访问和修改Dom元素 浏览器通常要求JavaScript和Dom实现保持独立的.例如,在Internet Explorer 中,被称为JScript的JavaScript 实现位于库文件jscript.dll 中,而DOM 实现位于另一个库mshtml.dll(内部代号Trident).所以用JavaScript访问Dom元素是需要一定的代价.人们通常这样形容Dom访问,javaScript和Dom相当于

一些JavaScript中的DOM的优化小技巧

在进行DOM优化时需要关注的问题有:修改DOM的时候,会引起页面的重排,重绘.因为JS是单线程执行的,那么在重排重绘的过程中可能会阻塞用户的操作.为了更好的用户体验,必须要严格控制这些操作. 一.对象集合 NodeList 当我们调用:getElementsByTagName,getElementsByName,getElementsByClassName的时候,返回的结果是一个NodeList,这个NodeList是实时的.如果你修改对应的html,那么NodeList中也会得到修改. 而且,