浏览器内核又叫渲染引擎,主要负责 HTML、CSS 的解析,页面布局、渲染与复合层合成。浏览器内核的不一样带来的主要问题是对 CSS 的支持度与属性表现差别。css
Wekbit是一个开源的Web浏览器引擎,也就是浏览器的内核。Apple的Safari, Google的Chrome, Nokia S60平台的默认浏览器,Apple手机的默认浏览器,Android手机的默认浏览器均采用的Webkit做为器浏览器内核web
Blink是在Wekbit的基础上的改进,是如今对新特性支持度最好的内核浏览器
Firefoxide
微软的IE,IE4+ 的内核,一直持续到 IE11,EdgeHTML 是微软抛弃 IE 后开发的全新内核布局
JavaScript 负责 JavaScript 代码的解释与执行,主流的 JavaScript 引擎有:V八、SpiderMonkey、JavaScriptCore、Chakra。spa
一个页面的呈现,粗略的说会通过如下这些步骤:代理
1. DOM 树的构建(Parse HTML) 2. 构建 CSSOM 树(Recaculate Style) 为何是 Re-caculate Style 呢?这是由于浏览器自己有 User Agent StyleSheet,因此最终的样式是咱们的样式代码样式与用户代理默认样式覆盖/从新计算获得的。 3. 合并 DOM 树与 CSSOM 树为 Render 树 4. 布局(Layout) 5. 绘制(Paint) 6. 复合图层化(Composite)图层化是本身理解后形象的意译其中布局(Layout)环节主要负责各元素尺寸、位置的计算,绘制(Paint)环节则是绘制页面像素信息,合成(Composite)环节是多个复合层的合成,最终合成的页面被用户看到。
那是否停下 DOM 的构建的同时,立马就执行 JavaScript 代码或者下载外部脚本执行,其实仍是要视状况而定,见2code
JavaScript 负责 JavaScript 代码的解释与执行,主流的 JavaScript 引擎有:V八、SpiderMonkey、JavaScriptCore、Chakra。对象
CSS规范定义了css的词法及语法文法。图片
这个结构在下面的定义中正式的定义了:
ruleset : selector [ ',' S* selector ]* '{' S* declaration [ ';' S* declaration ]* '}' S* ;
这说明,一个规则集合具备一个或是可选个数的多个选择器,这些选择器以逗号和空格(S表示空格)进行分隔。每一个规则集合包含大括号及大括号中的一条或多条以分号隔开的声明。声明和选择器在后面进行定义。
Webkit使用Flex和Bison解析生成器从CSS语法文件中自动生成解析器。回忆一下解析器的介绍,Bison建立一个自底向上的解析器,Firefox使用自顶向下解析器。它们都是将每一个css文件解析为样式表对象,每一个对象包含css规则,css规则对象包含选择器和声明对象,以及其余一些符合css语法的对象。