一.浏览器渲染进程(注意是进程不是线程!关于二者区别可以百度了解!)

目录

一.浏览器渲染进程(注意是进程不是线程!关于二者区别可以百度了解!)

二.浏览器渲染流程


1.GUI渲染线程:

   构建网页布局,Css,Html,建立Dom树,布局等;

   此外GUI渲染线程与JS引擎都是独立线程,由于Js被设计为单线程,两者之间的关系是互斥的;

2.JS引擎线程:

进程下执行一个JS线程;

  通常我们会把JS线程放在GUI线程之后,因为过大的JS线程处理可能时间较长,引起DOM内容树的构建;

3.事件触发线程:

  和大部分语言一样,JS也有时间控制的循环,判断,等语句;

进程等待JS单线程处理;

4.定时触发器线程:

  也就是我们JS常用到的setTimeout和setInterval线程;

  这两个都是需要等待一定计时时间触发;

  这么说JS引擎线程是不可能一直处于等待计时阶段,等待计时完毕,所以这部分其实由浏览器帮助计算的;

5.异步http请求:

  通过Requset请求浏览器新开一个线程的请求,异步的线程请求将会被放到JS引擎线程队列中等待处理;

流程图:

javascript渲染的问题 js渲染机制_css

注意:GUI引擎线程和JS引擎是互斥的;

二.浏览器渲染流程

目的是想记录我一直被提到的浏览器渲染步骤,这次就简单记录一下:

1.浏览器输入URL地址,浏览器加载一个新的进程;

2.对Http请求进行处理:包括解析IP地址,DNS查询,进行浏览器缓存搜索等;tcp协议;GET,POST请求;等等.....关于网络协议之类的东西;

3.等待响应,获取内容:

   a:构建html创建Dom树,解析CSS构建render树(结合DOM合并渲染)

   b:网页布局,对Layout/reflow各元素尺寸,位置的计算;

   c:绘制don树元素,绘制关于页面像素之间的像素信息;

   d:浏览器将完成信息发送给GPU,GPU引擎将进行合并处理显示在浏览器上;

4.Dom树渲染结束后,将对load事件,最后当然是Js代码部分处理;

流程图:

javascript渲染的问题 js渲染机制_javascript_02