JS 各种引擎介绍

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

JS 各种引擎介绍

/project/tag/296/javascript-engine

不同浏览器有不同的JS引擎:

WebKit , Safari浏览器->SquirrelFish Extreme,

Firefox àTraceMonkey引擎

Google Chrome àV8引擎,(C++)

Opera -> Carakan

Mozilla ->SpiderMonkey(C语言)

Mozilla à Rhino( Java)

Mozilla ->JaegerMonkey

SEE (Simple ECMAScript Engine) C语言开发的轻量级的ECMAScript (JavaScript) 解析器和实时运行环境

(1)javascript 解析引擎V8(C++)

/p/v8

V8 是Google 发布的开源JavaScript 引擎,采用C++ 编写,在Google 的Chrome浏览器中被使用。V8 引擎可以独立运行,也可以用来嵌入到C++ 应用程序中执行。\

(2)javascript 脚本引擎 SpiderMonkey (c语言)

/p/spidermonkey

SpiderMonkey是Mozilla项目的一部分,是一个用C语言实现的JavaScript脚本引擎,另外还有一个叫做Rhino的Java版本。

为了在SpiderMonkey中运行JavaScript代码,应用程序必须有三个要素:JSRuntime,JSContext 和全局对象。

运行时环境

JSRuntime,为其中的JavaScript变量、对象、脚本和应用程序中使用的上下文分配空间。每个JSContext 和脚本中的每个对象都生活在一个JSRuntime中。他们不能转移到其他运行时上或在与其它运行时共享。

一般来说大多数应用程序只需要一个运行时环境。

上下文

JSContext,就像是一台小机器,它涉及JavaScript代码和对象的很多东西。它可以编译和执行脚本、获取和设置对象属性、调用JavaScript函数、一种类型转换为另一种JavaScript数据、创建对象,等等。几乎所有JSAPI函数都要一个JSContext*作为其第一个参数,就像中的大多数函数都需要FILE*一样.

全局对象

全局对象包含所有可以在JavaScript代码中使用的类、函数和变量。

当JavaScript代码要做一些事时,比如window.open("/"),实际上它是在访问一个全局属性(全局对象的属性),在这里是window。

脚本能看到的全局属性完全由应用程序控制。应用程序首先创建一个对象并加入JavaScript标准类,如Array和Object。然后加入任何程序想加入的自定义的类、函数和变量(象这里的window)。应用程序每次运行js脚本(例如使用JS_EvaluateScript)时提供了该脚本使用的全局对象。至于脚本,它也可以创建自己全局函数和变量。所有的这些函数、类和变量都作为属性存储在全局对象中。

(3)JS 解析器rhino(Java)

/p/rhino

Rhino是用纯Java写成的JavaScript的开放源代码实现。它最常被用于嵌入Java应用程序,以便为终端用户提供脚本的能力。

(4)JavaScript 解析引擎 Simple ECMAScript Engine(C语言)

/p/SEE

SEE(Simple ECMAScript Engine) 是一个用C语言开发的轻量级的ECMAScript (JavaScript) 解析器和实时运行环境。支持ECMAScript Edition 3, JavaScript 1.5 。

(5) JavaScript引擎 SquirrelFish Extreme

/p/squirrelfish+extreme

几周前Google Chrome 发布之后,因其创新的UI 以及出色的JavaScript 执行效率而备受赞誉。最近,作为Safari 与Chrome 浏览器内核的WebKit 发布了一个新JavaScript 引擎,SquirrelFish Extreme,经过测试,该引擎的在执行速度上明显超过Chrome 的V8。下图是性能的比较

(6) JavaScript引擎 Carakan

/p/carakan

Opera全新JS引擎Carakan,目前数度是其他已存在JavaScript引擎(基于SunSpider)的2.5倍。其在转化为本地机器代码时专门针对正则表达式做了优化,有意思的是,Chrome浏览器也刚刚宣布了此点。

Carakan引擎的三个显著新特性:

1.基于寄存器的字节码:之前的引擎“ECMAScript”使用的是基于堆栈字节码指令集,这种基于对堆栈存取的方法对于生成字节码是比较简单的。

在新的引擎里,我们采用了基于寄存器的字节码指令集,这种方式采用了固定大小的寄存器,每次操作都可以访问任意的寄存器,更少的指令被执行并且不会拷贝大量的数据。

2.本地代码生成:我们将整个或部分“ECMAScript”引擎编译到本地代码中以达到更快的执行速度。

3.自动对象分类:在新的引擎中每个对象都是被封装成类以存取不同的数据,这些类的划分是与原型保持一致的。

每个浏览器的JS引擎都不一样吗?

现在每个浏览器基本上都有自己的JS引擎(非浏览器引擎)了,如Firefox浏览器的TraceMonkey引擎,Google Chrome浏览器的V8引擎,Safari浏览器有SquirrelFish Extreme,目前又增加了Opera 的Carakan。

(7) 新一代JavaScript引擎 TraceMonkey /p/tracemonkey

相关文档
最新文档