标签:sync link flow 鼠标 面积 脚本 影响 targe javascrip
带着疑问搜索了好多文章,大概总结下,有错误的地方望指正。
共4点(解析html以构建dom树 -> 构建render树 -> 布局render树 -> 绘制render树):
1)解析html(若有压缩则首先进行解压处理)以构建DOM树;
2)DOM树 与 css样式 构建render树(渲染树);
由于浏览器采用自上而下的方式解析,在遇到【样式(link)】与【脚本文件(script)】这两种元素时都会阻塞浏览器的解析(原因:script脚本执行过程中可能会修改html界面(如document.write函数);DOM节点的CSS样式会影响js的执行结果),所以样式与脚本的先后顺序会影响到浏览器的解析过程。
外部样式与外部脚本执行顺序:
3)布局;
浏览器已经能知道网页中有哪些节点、各个节点的CSS定义以及他们的从属关系,从而去计算出每个节点在屏幕中的位置。
4)绘制;
布局完成后,便是将呈现树绘制出来显示在屏幕上。对于每一个呈现树节点来说,主要绘制顺序如下:
a.背景颜色
b.背景图片
c.边框
d.子呈现树节点
e.轮廓
举个简单的栗子(摘抄)
包含在栗子中有2个知识点 reflow(回流) 与 repaint(重绘):
reflow(回流):当浏览器发现某个部分发生了点变化影响了布局,需要倒回去重新渲染,内行称这个回退的过程叫 reflow。
reflow 会从 <html> 这个 root frame 开始递归往下,依次计算所有的结点几何尺寸和位置。reflow 几乎是无法避免的。现在界面上流行的一些效果,比如树状目录的折叠、展开(实质上是元素的显 示与隐藏)等,都将引起浏览器的 reflow。鼠标滑过、点击……只要这些行为引起了页面上某些元素的占位面积、定位方式、边距等属性的变化,都会引起它内部、周围甚至整个页面的重新渲 染。通常我们都无法预估浏览器到底会 reflow 哪一部分的代码,它们都彼此相互影响着。
repaint(重绘):改变某个元素的背景色、文字颜色、边框颜色等等不影响它周围或内部布局的属性时,屏幕的一部分要重画,但是元素的几何尺寸没有变。
主要参考文档:
http://www.cnblogs.com/slly/p/6640761.html
http://www.cnblogs.com/dojo-lzz/p/3983335.html
标签:sync link flow 鼠标 面积 脚本 影响 targe javascrip
原文地址:http://www.cnblogs.com/bean-sprout/p/7398306.html