浏览器的运行模式:
1.浏览器是一个多进程,多线程的运行机制,一个进程可能含有多个线程;
2.浏览器包含有一下几个基本进程:
Browser进程:
(浏览器主进程),负责下载网络文件,将renderner得到崔仔内存中的位图渲染到浏览器的页面上。
Gui进程:
负责3D图的绘制,当页面使用了硬件加速(什么是硬件加速??)才会使用该线程,否则,直接交由 Browser进程执行,将位图渲染到页面
renderner进程:
renderner进程包含有多个线程,也叫浏览器的内核,负责执行脚本(js,html,css...),绘 图,事件触发,监听查询等
renderner进程分析:
1.js引擎线程:
js线程是一个单线程运行的,与下面的GUI线程互斥,两者不能同时运行。负责执行js脚本。
2.GUI线程:
用于解析html结构生成dom树,css结构,生成cssdom数,布局layout,绘制paint。
3.定时触发线程
对应于setTimeout,setInterval API,由该线程来计时,当计时结束,将事件对应的回调函数放入任务队列中
当setTimeout的定时的时间小于4ms,一律按4ms来算
4.http请求线程
每有一个http请求就开一个该线程
当检测到状态变更的话,就会产生一个状态变更事件,如果该状态变更事件对应有回调函数的话,则放入任务队列中
5.任务队列轮询线程
用于轮询监听任务队列,以知道任务队列是否为空
render树:由dom树和css树结合生成的。页面的绘制和布局都是依据renderner树生成
浏览器渲染流程总结:
解析html,生成DOM树------>解析css文件,生成cssDOM树------->将DOM树和cssDOM树合并,生成render树(渲染树)------->浏览器依据render树布局和绘图,生成各个元素的位图------->GUI线程将得到的位图提交给Brower进程,Brower进程将位图整合,并渲染到页面上。