Javascript历史
ECMAScript 最初是由网景的 Brendan Eich 开发的一种脚本语言的标准化规范;一开始命名为Mocha,后来改名为LiveScript,最后重命名为JavaScript。1995年12月,Sun 与 Netscape 联合发表了JavaScript。1996年11月,网景公司将 JavaScript 提交给欧洲计算机制造商协会进行标准化。ECMA-262的第一个版本于1997年6月被Ecma组织采纳。ECMA Script是ECMA-262标准化的脚本语言的名称。尽管JavaScript和JScript与ECMAScript兼容,但包含超出ECMA Script的功能。
ECMAScript是一种可以在宿主环境中执行计算并能操作可计算对象的基于对象的程序设计语言。ECMAScript最先被设计成一种Web脚本语言,用来支持Web页面的动态表现以及为基于Web的客户机—服务器架构提供服务器端的计算能力。但作为一种脚本语言, ECMAScript具备同其他脚本语言一样的性质,即“用来操纵、定制一个已存在系统所提供的功能,以及对其进行自动化”。
1999年12月,ECMAScript 3.0版发布,成为JavaScript的通行标准,得到了广泛支持。
2009年12月,ECMAScript 5.0版正式发布。
2015年6月17日,ECMAScript 6发布正式版本,即ECMAScript 2015。
ECMA的第39号技术专家委员会(Technical Committee 39,简称TC39)负责制订ECMAScript标准,成员包括Microsoft、Mozilla、Google等公司。
Javascript 语言规范 ECMA-262。
理论上,实现了上述规范能够提供执行 JavaScript 代码的运行环境都可以称为 Javascript 引擎,下面我们来了解下比较流行的 Javascript 引擎。
公司 | 浏览器 | 浏览器内核 | js 引擎 |
---|---|---|---|
Microsoft | Internet Exporler(IE) -> Edge | Trident(MSHTML,IE11-)->EdgeHTML/MSHTML(Edge)->Blink(基于WebKit) | JScript(IE3.0-IE8.0) -> ChakraCore(IE9+之后)-> v8 |
Chrome/Chromium | WebKit->Blink(28.0.1469.0+,基于Webkit) | v8 | |
Apple | Safari | WebKit | JavaScriptCore->SquirrelFish(Nitro) |
Mozilla | Firefox | Gecko | SpiderMonkey(1.0-3.0)-> TraceMonkey(3.5-3.6)-> JägerMonkey(4.0-)-> IonMonkey (18.0+) -> OdinMonkey(22.0+) |
Opera | Opera | Elektra(4-6)->Presto(7.0-12.18)->WebKit->Blink(基于Webkit) | Linear A(4.0-6.1)-> Linear B(7.0-9.2)-> Futhark(9.5-10.2)-> Carakan(10.5-)-> V8 |
其他js引擎还有:
Tamarin,由 Adobe Labs 编写,被用于 Flash Player 9
ChakraCore
ChakraCore 是 Micosoft Edge 所使用的Javascript引擎。支持JIT,垃圾回收机制。
JavaScriptCore
Apple 开发的开源 JavaScript 引擎,JavaScriptCore 引擎是 WebKit 中默认的引擎。2008 年重写了,叫做 SquirrelFish,后来是 SquirrelFish Extreme,又叫 Nitro。它主要是将源代码翻译成抽象语法树,之后是平台无关的字节码,在最初的版本中,字节码会被 JavaScriptCore 引擎解释执行。在后面的版本中,逐渐加入了JIT编译器,将热点函数生成本地代码。
v8
Google 开发的开源 JavaScript 引擎,以高性能著称。 v8最开始是一帮语言方面的专家设计出来的,之后被 Google 收购,成为了 JavaScript 引擎和众多相关技术的引领者。为了达到高性能的 JavaScript 代码执行效率从而获得更好的网页浏览效果,V8 采用直接将 JavaScript 编译成本地代码的方式。V8 支持众多的操作系统,包括但是不限于 Windows、Linux、Android、Mac OS X 等。同时它也是能够支持众多的硬件架构,例如 IA32、X64、ARM、MIPS 等。
SpiderMonkey
SpiderMonkey 是 Mozilla 使用 C/C++ 编写的 JavaScript 引擎。它被用于包括 Firefox 在内的多个 Mozilla 产品中,使用的是 MPL 2 授权协议。
Rhino
Rhino 是一个完全使用Java语言编写的开源JavaScript实现,由 Mozilla 开发。Rhino 通常用于在 Java 程序中,为最终用户提供脚本化能力。它被作为J2SE 6上的默认Java脚本化引擎。
Nashorn
从 JDK 1.8 开始,Nashorn 取代 Rhino(JDK 1.6, JDK1.7) 成为 Java 的嵌入式 JavaScript 引擎。Nashorn 完全支持 ECMAScript 5.1 规范以及一些扩展。它使用基于 JSR 292 的新语言特性,其中包含在 JDK 7 中引入的 invokedynamic,将 JavaScript 编译成 Java 字节码。从 Java15 开始,Nashorn 已经不被默认包含在 JDK 中。
JerryScript
JerryScript 是三星推出的适用于嵌入式设备的小型 Javascript 引擎。
KJS
KDE 下的 Konqueror 浏览器采用了 KJS作为js引擎
Narcissus
Narcissus 是一款用纯 Javascript 编写的 js 引擎,被用作 Javascript 新功能快速原型的一个测试平台。已停止更新。
Tamarin
在 2006 年 11 月 7 日,Adobe Systems 宣布将 ActionScript Virtual Machine 的代码捐献给 Mozilla Foundation。因此,Mozilla 启动了一个新的开放源码项目 Tamarin。Adobe 和 Mozilla 希望以此促进这种创建 Web 应用程序的标准化语言的推广。Tamarin 项目的目标是实现一个高性能的开放源码的 ECMAScript 第四版(ES4)语言规范实现。已停止更新。
QuickJS
QuickJS 是一款小型嵌入式 Javascript 引擎,使用C编写,只有 210KB,支持大部分 ES2020 语法。
Hermes
Hermes 是一款对 RN 应用快速启动进行了优化的 Javascript 引擎,由 facebook 支持。