1、了解浏览器css
浏览器内核分为两部分:渲染引擎(render engin)、js引擎(js engin)html
渲染引擎:负责对网页语法的解释(HTML、javaScript、引入css等),并渲染(显示)网页java
js引擎:javaScript的解释、编译、执行web
主流内核:Trident(IE)、Gecko(FireFox)、Webkit(Safari)、Presto(opera前内核、已废弃)、blink(Chrome)chrome
2. webkit浏览器渲染引擎的进度史segmentfault
3. webkit浏览器内核部份内容介绍windows
HTML解释器:解释HTML文本的解释器,主要做用是将HTML文本解释成DOM树,DOM是一种文档表示方法。浏览器
CSS解释器:级联样式表的解释器,它的做用是为DOM中的各个元素对象计算出样式信息,从而为计算最后网页的布局提供基础设施。性能优化
布局:在DOM建立以后,webkit须要将其中的元素对象一样式信息结合起来,计算它们的大小位置等布局信息,造成一个可以表示这全部信息的内部比偶表示模型。服务器
JavaScript引擎:使用JavaScript代码能够修改网页的内容,也能修改CSS的信息,JavaScript引擎能解释JavaScript代码并经过DOM接口和CSSOM视图模式来修改网页内容和样式信息,从而改变渲染结果。
绘图:使用图形库将布局计算后的各个网页的节点绘制成图像结果。
2、Chromium, CEF, Webkit, JavaScriptCore, V8, Blink
苹果公司基于KDE(Linux桌面系统)的KHTML开源,包括Webcore和JavaScriptCore两个引擎。苹果比较了Gecko和KHTML以后,选择后者的缘由,是KHTML拥有清晰的源码结构和极快的渲染速度。2008年,谷歌公司发布的chrome浏览器,采用的chromium内核是基于Webkit而来
应用:safari, mail, app store等应用
webkit布局:
当webkit建立RenderObject对象以后,每一个对象是不知道本身的位置、大小等信息的,webkit根据盒模型来计算他们的位置、大小等信息的过程称为布局计算/排版。
布局计算分类:第一类是对整个RenderObject树进行的计算;第二类是对RenderObject树中某个子树的计算,常见于文本元素或者overflow:auto块的计算。
布局计算:布局计算是一个递归的过程,这是由于一个节点的大小一般须要先计算它的子节点的位置、大小等信息。
补充:
为何说transform实现动画较直接设置几何属性性能较好?
1.webkit渲染过程:style -> Layout(reflow发生在这) -> Paint(repaint发生在这) -> Composite,transform是位于’Composite(渲染层合并)‘,而width、left、margin等则是位于‘Layout(布局)’层,这一定致使reflow。
2.现代浏览器针对transform等开启GPU加速。
style -> Layout(reflow发生在这) -> Paint(repaint发生在这) -> Composite(transform发生在这个时候)
(refer:
)
一开始它是基于KJS开发的,是基于抽象语法树的解释器,性能较差。2008年苹果重写了编译器和字节码解释器,叫SquirrelFish
(refer:JavaScriptCore深度解析)
Chromium/Blink
Chromium基于webkit,却把Webkit的代码梳理得可读性更高,多进程框架
Chromium加载网页的过程,须要Browser进程和Render进程协做完成。加载网页的过程由Browser进程发起,向服务器请求网页内容的过程也是由Browser进程完成。Render进程负责对下载回来的网页内容进行解析,解析以后获得一个DOM Tree。有了这个DOM Tree以后,Render进程就能够对网页进行渲染了
(refer: Chromium网页加载介绍)
Blink:Chromium项目中研发的渲染引擎,基于并脱离Webkit
更强大的渲染和布局:
(refer: blink的开发者FAQ)
5. CEF(Chromium Embeded Framework)
一个将浏览器功能(页面渲染、js执行)嵌入到其余应用程序的框架,支持windows, Linux, Mac平台
CEF的历史:
应用:
1)作一个浏览器
2) 跨平台的桌面底层方案electron.js
3) 客户端(如:桌面端app应用)
好处:开发web和native混合的应用很是方便
3、总结
V8引擎是谷歌公司自主研发的js引擎
Webkit基于KHTML,包含JavaScriptCore
Chromium基于Webkit,衍生出Blink
CEF是包含Chromium浏览器的应用框架
一切鼻祖:KHTML