Skip to content

javascript 引擎

javascript 引擎是一个专门处理 javascript 脚本的虚拟机,一般附带在网页浏览器中。

虚拟机(VM)是计算机系统的仿真器,通过软件模拟具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,能提供物理计算机的功能。

历史

在 2008 年到 2009 年的第二次浏览器大战之前,JavaScript 引擎仅简单地被当作能阅读执行 JavaScript 源代码的解释器。

第一个 JavaScript 引擎由布兰登·艾克在网景公司开发,用于 Netscape Navigator 网页浏览器中。引擎的名字叫做 SpiderMonkey,由 C++实现。它自 JavaScript 1.5 升级以符合 ECMA-262 版本 3。Rhino 引擎,由网景公司的诺里斯·博伊德(Norris Boyd)开发,由 Java 实现。像 SpiderMonkey 一样,Rhino 符合 ECMA-262 版本 3。JavaScript 引擎的应用例子还包括:Apple Safari 4 的 Nitro,Google Chrome 的 V8 和 Mozilla Firefox 3.5 的 TraceMonkey。

目前为止,最通用的 JavaScript 宿主环境是网页浏览器。网页浏览器一般使用公共的 API 创建“宿主对象”以便于在 JavaScript 中支持 DOM。

著名的 V8 引擎

V8 是一个由 Google 开发的开源 JavaScript 引擎,用于 Google Chrome 及 Chromium 中。Lars Bak 是这个项目的组长,以 V8 发动机为其命名。

产生背景

编程语言分为编译型语言和解释型语言两类,编译型语言在执行之前要先进行完全编译,而解释型语言一边编译一边执行,很明显解释型语言的执行速度是慢于编译型语言的。而 JavaScript 就是一种解释型脚本语言,支持动态类型、弱类型、基于原型的语言,内置支持类型。鉴于 JavaScript 都是在前端执行,而且需要及时响应用户,这就要求 JavaScript 可以快速的解析及执行。

随着 Web 相关技术的发展,JavaScript 所要承担的工作也越来越多,早就超越了“表单验证”的范畴,这就更需要快速的解析和执行 JavaScript 脚本。V8 引擎就是为解决这一问题而生。

运作方式

V8 首先使用自己的解析器生成抽象语法树。然后,Ignition 使用内部 V8 字节码格式从这个语法树生成字节码。 TurboFan 将此字节码编译成机器码。换句话说,V8 在执行之前使用即时编译将 ECMAScript 直接编译为本机机器代码。编译后的代码在运行时根据代码执行配置文件的启发式进行额外的动态优化(和重新优化)。使用的优化技术包括内联、省略昂贵的运行时属性,以及内联缓存。垃圾收集器是分代 增量收集器。

使用

  • Google Chrome 和其它基于 Chromium 的 WEB 浏览器
  • Deno runtime 环境
  • Electron 桌面应用程序框架
  • Node.js runtime 环境

参考