一,什么是浏览器内核?
1.浏览器内核是浏览器的核心,也称“渲染引擎”,用于取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入 CSS 等),以及计算网页的显示方式。
2.浏览器内核决定了浏览器该如何显示网页内容以及页面的格式信息。不同的浏览器内核对网页的语法解释也不同,因此网页开发者需要在不同内核的浏览器中测试网页的渲染效果。
二,常用浏览器和内核
1.Trident
: IE浏览器,百度浏览器
2.Gecko
: 火狐浏览器
3.Webkit
: Safari浏览器
4.Blink
: 谷歌浏览器
5.Presto
(已废弃): opera浏览器
三,浏览器的内核是多线程
1.浏览器的(内核)渲染进程是多线程的,页面的渲染,JavaScript 的执行,事件的循环,都在这个进程内进行.
(1) GUI 渲染线程:负责渲染浏览器界面,当界面需要重绘(Repaint
)或由于某种操作引发回流(Reflow
)时,该线程就会执行。
(2)JavaScript 引擎线程:也称为 JavaScript 内核,负责处理 Javascript 脚本程序、解析 Javascript 脚本、运行代码等。(例如 V8 引擎)
(3)事件触发线程:用来控制浏览器事件循环,注意这不归 JavaScript 引擎线程管,当事件被触发时,该线程会把事件添加到待处理队列的队尾,等待 JavaScript 引擎的处理。
(4)定时触发器线程:传说中的 setInterval
与 setTimeout
所在线程,用于计时,回调函数仍然在js引擎线程中执行。注意,W3C 在 HTML 标准中规定,规定要求 setTimeout
中低于 4ms
的时间间隔算为 4ms
。
(5)异步 http 请求线程:在 XMLHttpRequest
连接后通过浏览器新开一个线程请求,当检测到状态变更时,如果设置有回调函数,异步线程就产生状态变更事件,将这个回调再放入事件队列中。再由 JavaScript 引擎执行。
2.注意,GUI 渲染线程与 JavaScript 引擎线程是互斥的,当 JavaScript 引擎执行时 GUI 线程会被挂起(相当于被冻结了),GUI 更新会被保存在一个队列中等到 JavaScript 引擎空闲时立即被执行。所以如果 JavaScript 执行的时间过长,这样就会造成页面的渲染不连贯,导致页面渲染加载阻塞。