html 的DOM树

 

DOM树的生成是深度优先:加载了head之后,先加载head内的东西,再加载body内的东西

浏览器渲染的步骤:1.解析DOM节点,生成DOM树

                                 2.解析CSS节点,生成CSS树

                                 3.将DOM树与CSS树合并,生成rander树

                                4.浏览器开始渲染网页

可以先写css再写DOM,必须把js放在body后面,原因,css是异步加载,js是同步加载,外部引入的js是异步加载,因此可以写在head里面             js是单线程,浏览器并不是

重构、重绘耗费性能:因此少用js来操作DOM节点

重构通过js操作DOM节点,导致DOM树结构变化,重新生成DOM树,重新生成rander树。

          DOM节点的添加/删除           

          DOM节点宽高变化

          DOM节点display之间的转换

减少重构:

先做改变,改变全部完成后,最后添加,这样只重构一次。

 

重绘:

jss触发了css变化,造成网页一部分颜色变化,但并不会破环网页结构

js加载是同步,css加载是异步:

异步加载js的方法:

1.defer IE9以及以下 可用于内嵌js

2.async 主流浏览器  不可以用于内嵌js

使用defer在script标签里,会使DOM加载完之后再加载js

 

 

 

 

3.

 

 

 

 text不能执行,因为下载是异步,可能没下载完

 

 

解决方法:添加onload事件,并添加onload事件函数,在事件函数里面执行函数

 

 

 

 IE8以及以下没有onload事件,只会把onload当成是属性,解决方法:onreadystatechange 里面readyState判断是否为complete

 

兼容写法:

 

 

封装异步执行js:

 

优化:方便调用

 

 方法二:传函数,在函数内部执行调用

 

时间线:

 

  2.文档的解析是2~6阶段

 

元素解析之前:readyState="loading"

文档元素解析完,没解析脚本:readyState="interactive"

                            脚本解析完:readyState="complete"

监听状态码事件:document.onreadystatechange

img.onload是图片加载完成

window.onload是文档加载完成

 

DOM元素克隆。cloneNode()

 

传递参数true会把其内部的所有子元素也全部克隆