标签:
编写&收录日期:2015/04/24
了解浏览器引擎目前的市场和历史
WebKit 是一个开源的浏览器引擎。WebKit 也是苹果Mac OS X 系统引擎框架版本的名称,主要用于Safari,Dashboard,Mail 和其他一些Mac OS X 程序。WebKit 所包含的 WebCore 排版引擎和 JSCore 引擎来自于 KDE 的 KHTML 和KJS,当年苹果比较了 Gecko 和 KHTML 后,仍然选择了后者,就因为它拥有清晰的源码结构、极快的渲染速度。
而这之后在2010年推出的WebKit2是建立在这个基础之上的,引入别人的一篇文章:
原文地址:http://blog.csdn.net/milado_nju/article/details/7292164
##概述
在介绍本系列各个专题之前,有必要先解释一下极其容易混淆的几个概念,它们是WebKit,WebKit2,Chromium和Chrome。
首先来了解WebKit。广义上来说,WebKit是一个开源的项目,其前身是来源于KDE的KHTML和KJS。该项目专注于网页内容的展示,开发出一流的网页渲染引擎。它不是浏览器,而且也不想成为浏览器。 该项目包含两个部分,第一是WebCore,其中包含了对HTML,CSS等很多W3C规范的实现;第二部分就是狭义上的WebKit,它主要是各个平台的的移植并提供相对应的Web接口,也就是WebView或者类似WebView,这些接口提供操作和显示网页的能力。目前使用WebKit的主流的浏览器或者WebView包括Chrome, Safari, QtWebKit, Android Browser以及众多的移动平台的浏览器。
WebKit2相对于狭义上的WebKit而言,它不是WebKit简单的第二个版本,它是一个新的API层,其最主要的变化在于将网页的渲染置于单独的进程,而接口层则在另外一个进程,它们之间通过IPC来通讯。对于接口的调用者来说,中间的IPC和底下的实现是透明的,这样做的好处有很多,一个很明显的好处是,当网页的渲染出现问题时,不会阻碍Web接口的调用者进程,这会在很大程度上解决或者帮助解决浏览器或者这些调用者的稳定性和安全性等问题。
Chromium是一个建立在WebKit之上的浏览器开源项目,由Google发起的。该项目被创建以来发展迅速,很多先进的技术被采用,如跨进程模型,沙箱模型等等。同时,很多新的规范被支持,例如WebGL,Canvas2D,CSS3以及其他很多的HTML5特性,基本上每天你都可以看到它的变化,它的版本升级很快。在性能方面,其也备受称赞,包括快速启动,网页加载迅速等。
Chrome是Google公司的浏览器产品,它基于chromium开源项目,一般选择稳定的版本作为它的基础,它和chromium的不同点在于chromium是开源试验场,会尝试很多新的东西,当这些东西稳定之后,chrome才会集成进来,这也就是说chrome的版本会落后于chromium。另外一个就是,chrome里面会加入一些私有的codec,这些仅在chrome中才会出现。再次,chrome还会整合Google的很多服务, 最后chrome还会有自动更新的功能,这也是chromium所没有的。
目前使用的浏览器有:Safari
前端CSS使用标识:-webkit-
由于 WebKit2 在 WebCore 层面上实现的进程隔离在一定程度上与 Google Chrome/Chromium 自己的沙箱设计存在冲突,故 Google Chrome/Chromium 一直停留在 WebKit,使用 Backport 的方式实现和主线 WebKit2 的兼容。显而易见这增加了 WebKit 和 Chromium 的复杂性,且在一定程度上影响了 Chromium 的架构移植工作。所以Google 决定从 WebKit 衍生出自己的 Blink Web 引擎,并且Google 在2013年4月的时候公布计划将这个渲染引擎作为Chromium计划的一部分。
目前使用的浏览器有:Chrome,Opera
前端CSS使用标识:-webkit-
Gecko是套开放源代码的、以C++编写的网页排版引擎。Gecko是跨平台的,能在Microsoft Windows、Linux和Mac OS X等主要操作系统上运行。
目前使用的浏览器有:FireFox
前端CSS使用标识:可无
Trident(又称为MSHTML),是微软的视窗操作系统(Windows)搭载的网页浏览器—Internet Explorer的排版引擎的名称
目前使用的浏览器有:IE
前端CSS使用标识:可无
V8在运行之前将JavaScript编译成了机器码,而非字节码或是解释执行它,以此提升性能。更进一步,使用了如内联缓存(inline caching)等方法来提高性能。
传统的Javascript是动态语言,又可称之为Prototype-based Language,JavaScript继承方法是使用prototype,通过指定prototype属性,便可以指定要继承的目标。属性可以在运行时添加到或从对象中删除,引擎会为运行中的对象创建一个属性字典,新的属性都要通过字典查找属性在内存中的位置。V8为object新增属性的时候,就以上次的hidden class为父类别,创建新属性的hidden class的子类别,如此一来属性访问不再需要动态字典查找了。
浏览器:Chrome
微软的javascript引擎
浏览器:IE
SpiderMonkey以C及C++编写,包含直译器、IonMonkey即时编译、Decompiler和垃圾回收。
IonMonkey
IonMonkey是Mozilla的第三个JIT编译器的名称,它启用了许多新的最佳化技术,但是这些特色无法在之前的JägerMonkey架构运行。
IonMonkey更像传统的编译器,他使用中间表示层(IR,Intermediate representation)的静态单赋值形式将SpiderMonkey的字节码转换为Control Flow Graph,这个结构令其他语言使用的最佳化技术可被使用在JavaScript,其中包含形态的特殊化(type specialization)、行内函式(Inline function)、线性扫描的暂存器配置(linear scan register allocator)、死码删除(Dead code elimination)以及尽可能将程序移出循环外(Loop-Invariant Code Motion)[17]。
这个编译器在ARM架构、X86及X86-64可以快速的将JavaScript函式转换成原生码。
IonMonkey在2013年初发行Firefox 18中开始被采用并作为预设的引擎[18],改进了TraceMonkey与JaegerMonkey不会对程式码进行解析,自动运行最佳化的缺点。[19]。
OdinMonkey
OdinMonkey用于最佳化JavaScript的子集asm.js,OdinMonkey并非一个JIT编译器,他依然采用IonMonkey作为编译器,于2013年6月25日正式释出的Firefox 22采用[20]。
浏览器:Firefox
标签:
原文地址:http://www.cnblogs.com/mingyunxl/p/4453276.html