浏览器内核与JavaScript引擎

文/何其甚

上一篇文章,总结了JavaScript的历史。JavaScript发展到现在已经是一门独立的编程语言,它的解析器(引擎)伴随着浏览器的发展在不断发展。

JavaScript诞生之时就是在浏览器进程中运行,但是它也可以作为服务端脚本。最早用在服务端的是经典的微软Asp,服务脚本不仅可以声明为VBScript还可以声明为JScript、JavaScript,只是Asp只能运行在Windows平台。2009年发布的Node.js则是可以将JavaScript作为可以跨平台的服务端脚本。尽管JavaScript引擎可以独立封装成单独的服务器组件,但是其执行特征依旧和在浏览器进程中的执行特征相似。

因此我们还是从浏览器开始了解JavaScript引擎。

构成浏览器的主要组件有:
1、用户界面,地址栏、收藏夹等所有除了浏览窗口之外的部分
2、浏览引擎,用来查询以及操作渲染引擎的接口
3、渲染引擎,用来显示请求的内容,将请求的Html以及Css解析后显示出来
4、网络,用来完成网络请求,如Http请求
5、UI后端,用来绘制似组合选择框及对话框等基本组件,具有不特定于某个平台的通用接口,底层使用操作系统的用户接口
6、JavaScript引擎,用来解释执行JavaScript代码
7、数据存储,用来在硬盘中保存类似cookie的各种数据


浏览器内核与JavaScript引擎_第1张图片
浏览器的构成.png

各浏览器渲染引擎、浏览引擎和用户界面的差异造就了各种不同的浏览器。

浏览器内核与JavaScript引擎_第2张图片
浏览器与车标.jpg

五大浏览器五类渲染引擎对应各自的JavaScript引擎。国产浏览器内核引擎都是采用的这五类中的一种或者几种。

我们常说的浏览器内核,其实是指浏览器的渲染引擎(Rendering Engine)。渲染引擎包括有Html解释器、CSS解释器、布局Layout和JavaScript引擎。最开始渲染引擎和JavaScript引擎并没有很明确的区分,只是随着Web技术的发展,JavaScript引擎越来越独立。

浏览器内核与JavaScript引擎_第3张图片
浏览器内核渲染引擎.jpg

下面来看看五大浏览器的渲染引擎和对应JavaScript引擎
1、IE家族
IE家族浏览器内核为:Trident。该引擎从1997年IE4中首次采用,一直沿用到IE11,该内核曾与W3C标准脱节,导致Web应用在IE各版本和不同浏览器之间的代码兼容问题。
Trident中采用的JavaScript引擎,IE8及以下是JScript,IE9以上为Chakra。Chakra在速度和标准化方面比较出色。

2、Mozilla Firefox
Firefox的内核为:Gecko。2000年Netscape6 启用该内核,现在主要由Mozilla基金会进行维护,是开源的浏览器内核。
其中所采用的JavaScript引擎为Monkey系列
SpiderMonkey:第一款JavaScript引擎,由Brendan Eich在Netscape Communications时编写,用于Mozilla Firefox 1.0~3.0版本。
Rhino:由Mozilla基金会管理,开放源代码,完全以Java编写。
TraceMonkey:基于实时编译的引擎,其中部份代码取自Tamarin引擎,用于Mozilla Firefox 3.5~3.6版本。
JaegerMonkey:德文Jäger原意为猎人,结合追踪和组合码技术大幅提高性能,部分技术借鉴了V8、JavaScriptCore、WebKit:用于Mozilla Firefox 4.0以上版本。
IonMonkey:可以对JavaScript编译后的结果进行优化,用于Mozilla Firefox 18.0以上版本。
OdinMonkey:可以对asm.js进行优化,用于Mozilla Firefox 22.0以上版本。

3、Safari
Safari的内核为:WebKit。WebKit的前身是KDE小组的KHTML引擎,WebKit是KHTML的一个分支。WebKit有两部分组成,渲染引擎WebCore,JavaScript引擎JavaScriptCore。JavaScriptCore 被改写为 SquirrelFish,升级版本为 QuirrelFish Extreme,也叫做 Nitro。

4、Chrome
2008年谷歌公布Chrome的时候浏览器使用的内核被命名为Chromium。Chromium来自WebKit,但是对WebKit代码进行了梳理调整,有些地方将Chromium归为WebKit,也有地方将两者分开介绍。Chromium采用了WebKit中的WebCore渲染引擎,JavaScript引擎为V8。
谷歌研发小组在2006年开始研发V8,部分原因是对既有JavaScript引擎的执行速度不满意。
V8作者是丹麦的Lars Bak(拉斯巴克),巴克还是Java HotSpot性能引擎的主力开发。V8和Java HotSpot有很多相同的理念。
2013年4月,谷歌在Chromium Blog上称在 Chromium 项目中研发 Blink 渲染引擎,从13年发布的Chrome 28.0.1469.0版本开始,Chrome放弃Chromium引擎转而使用最新的Blink引擎。Blink引擎是WebKit中WebCore的一个分支。

5、Opera
Opera目前使用的内核引擎是Blink。
Opera 3.5-6.1版本使用的内核叫做Elektra。
Opera 7.0及以后版本到Opera12.17的内核叫Presto。Presto已经废弃,该引擎最大的特点就是渲染速度优化达到了极致,然后代价是牺牲了网页的兼容性。

采用的JavaScript引擎
Linear A,用于Opera 4.0~6.1版本;
Linear B,用于Opera 7.0~9.2版本;
Futhark,用于Opera 9.5~10.2版本;
Carakan,由Opera软件公司编写,自Opera10.50版本开始使用。

国产多核浏览器一般是一个内核采用Trident,然后再增加其他内核使用WebKit或者Blink。

其他词汇说明:
KDE是UNIX操作系统下的一个网络透明的现代桌面环境。
KHTML是KDE小组所开发的渲染引擎。
Tamarin,由Adobe Labs编写,Flash Player 9所使用的引擎。

参考文章:
http://taligarsiel.com/Projects/howbrowserswork1.htm
http://www.cnblogs.com/cnwebdeveloper/articles/2234423.html
https://www.cnblogs.com/Leo_wl/p/5119719.html
http://www.makaidong.com/object%20c/16151.shtml

你可能感兴趣的:(浏览器内核与JavaScript引擎)