浏览器如何解析代码渲染页面

最近看到有的朋友在纠结我们代码和浏览器到底具体发生了什么。

  我们从打开浏览器一步一步开始。

  1. 打开浏览器
  2. 输入网址并搜索
  3. 浏览器解析网址并发送到DNS服务器
  4. 服务器收到信息后将相应的HTML,CSS,JS文件等外部资源发送给浏览器
  5. 浏览器解析将HTML代码称为DOM树结构
  6. 将CSS代码解析成CSSOM结构(CSS Object Model)
  7. 结合DOM和CSSOM构建渲染树
  8. 生成布局,即将所有渲染树的页面进行合成
  9. 将布局绘到屏幕

从第5-9步是真正的渲染过程,从5-7这三步非常快。

"生成布局"(flow)和"绘制"(paint)这两步,合称为"渲染"(render)

现在简单讲一下浏览器的渲染过程

首先,创建DOM树: 

D: document(文档),没有文档,DOM也就无从谈起,当创建网页就把编写的页面文档转换辰为一个文档对象。

O:对象。对象分为用户自定义对象、内置对象、宿主对象。

M:model(模型),DOM把文档表现成一颗树。其本身就是这个M模型。

例如有这么一段代码:

<html>
<head>
  <title>Beautiful page</title>
</head>
<body>
    
  <p>
    Once upon a time there was 
    a looong paragraph...
  </p>
  
  <div style="display: none">
    Secret message
  </div>
  
  <div><img src="..." /></div>
  ...
 
</body>
</html>

那么DOM树是完全和HTML标签一一对应的,如下所示:
documentElement (html)
    head
        title
    body
        p
            [text node]
                
        div 
            [text node]
                
        div
            img
                

  由此可知我们知道DOM树由一个个节点组成。其中有:元素节点、文本节点、属性节点。当构建完DOM树后,就会开始构建渲染树。

而渲染树就不同了,她只有哪些需要绘制出来的元素,所以head 以及被隐藏的div都不会出现在渲染树中。
root (RenderView)
    body
        p
            line 1
            line 2
            line 3
            ...
            
        div
            img
            
        ...

重绘和重排

当页面刚初始化的时候页面就会开始一次重排操作。任何一次对渲染树的修改都会可能导致下面两个操作。

1,重排
就是渲染树的一部分必须要更新 并且节点的尺寸发生了变化。这就会触发重排操作。重排必定会导致重绘。

  • 修改DOM
  • 修改样式表
  • 用户事件(比如鼠标悬停、页面滚动、输入框键入文字、改变窗口大小等等)


2,重绘
部分节点需要更新,但是没有改变他的集合形状,比如改变了背景颜色,这就会触发重绘。

 更多请见:阮一峰大神的http://www.ruanyifeng.com/blog/2015/09/web-page-performance-in-depth.html

猜你喜欢

转载自www.cnblogs.com/chase-star/p/10049620.html
今日推荐