_小生_

JavaScript 引擎

原文链接: www.softwaremag.com

Submitted

By Jen Looper

编写Web代码有时会让开发人员编写一系列字符并像魔术那样神奇,这些字符会在浏览器中变成具体的图像,文字和动作。了解该技术可以帮助开发人员更好地调整他们作为程序员的技能

JavaScript引擎是一项复杂的技术,并且知道不同平台使用不同引擎的原因对于尝试在尽可能短的时间内生成优化代码的开发人员来说至关重要。

虚拟机 JavaScript引擎通常被定义为给定计算机系统的一种虚拟机或软件驱动的仿真。有许多类型的虚拟机,它们根据它们能够模拟或替代实际物理机器的精确程度进行分类。

例如,系统虚拟机提供可以在其上执行操作系统的平台的完整仿真。Mac用户熟悉Parallels,这是一个允许Windows在Mac上运行的系统虚拟机。

另一方面,流程虚拟机功能较少,只能运行一个程序或进程。Wine是一个进程虚拟机,允许Windows应用程序在Linux机器上运行,但不能在Linux机器上提供整个Windows操作系统。

JavaScript引擎是一种专门用于解释和执行JavaScript代码的流程虚拟机。通过构建网页来区分为浏览器提供动力的布局引擎与解释和执行代码的低级JavaScript引擎之间的区别非常重要。

什么是JavaScript引擎? JavaScript引擎的基本工作是获取开发人员编写的JavaScript代码,并将其转换为可由浏览器解释甚至嵌入到应用程序中的快速优化代码。

更确切地说,每个JavaScript引擎都实现了ECMAScript的一个版本,其中JavaScript是一种方言。随着ECMAScript的发展,JavaScript引擎也在不断发展。有很多不同的引擎,因为每个引擎都设计用于不同的Web浏览器,headless browser([https://en.wikipedia.org/wiki/Headless_browser)或Node.js等运行时。headless browser是没有图形用户界面的Web浏览器,可用于运行针对Web产品的自动化测试。一个很好的例子是PhantomJS。Node.js是一个异步的,事件驱动的框架,允许在服务器端使用JavaScript。由于这些是JavaScript驱动的工具,因此它们由JavaScript引擎提供支持。

有多种JavaScript引擎可用于分析,解析和执行客户端代码。随着每个浏览器版本的发布,JavaScript引擎可能会被更改或优化,以跟上最先进的JavaScript代码执行。

JavaScript引擎如何工作?鉴于虚拟机的定义,将JavaScript引擎称为流程虚拟机是有意义的,因为它的唯一目的是读取和编译JavaScript代码。这并不意味着它是一个简单的引擎。例如,JavaScriptCore有六个构建块,用于分析,解释,优化和垃圾收集JavaScript代码。

那怎么办?当然,这取决于引擎。两个主要的引擎是WebKit的JavaScriptCore和Google的V8引擎,因为它们被NativeScript利用。这两个引擎处理代码的方式不同。

JavaScriptCore执行一系列步骤来解释和优化脚本。它执行词法分析,将源分解为一系列具有已识别含义的标记或字符串。然后解析器分析令牌的语法并将其内置到语法树中。然后,四个即时进程启动,分析并执行解析器生成的字节码。简单来说,这个JavaScript引擎获取源代码,将其分解为字符串-a.k.a。理解它,获取这些字符串并将它们转换为编译器可以理解的字节码,然后执行它。

谷歌的V8引擎,用C ++编写,也编译和执行JavaScript源代码,处理内存分配,垃圾收集剩余物。它的设计包括两个编译器,它们直接将源代码汇编到机器代码中。

这些编译器是Full-codegen,一个生成未优化代码的快速编译器和Crankshaft,一个生成快速优化代码的慢速编译器。

如果Crankshaft确定Full-codegen生成的未优化代码需要优化,它将取代它 - 一个称为“曲柄移植”的过程。

一旦编译过程产生机器代码,引擎就会将ECMA标准中指定的所有数据类型,操作符,对象和函数暴露给浏览器或需要使用它们的任何运行时,如NativeScript。

这对开发人员意味着什么? JavaScript引擎的代码解析和执行过程的目标是在最短的时间内生成最优化的代码。

最重要的是,这些引擎的发展与开发Web和移动领域的过程平行,以使它们尽可能地运行。为了跟踪这种演变,在诸如arewefastyet.com之类的网站上生成的基准图表显示了各种引擎相互比较的表现。

任何Web开发人员都需要了解浏览器中固有的差异,这些浏览器显示生成,调试和维护的代码。更具体地说,理解为什么某些脚本在另一个浏览器上的运行速度较慢,这一点很重要。

类似的移动开发人员 - 特别是那些使用webview编写混合移动应用程序来显示其内容或使用像NativeScript这样的运行时的移动开发人员 - 将想知道什么引擎正在解释他们的JavaScript代码。移动Web开发人员应该了解各种浏览器在其小型设备上提供的固有限制和可能性。跟上JavaScript引擎的变化,对于那些希望发展成为Web,移动或应用程序开发人员的人来说,真的会有所回报。 SW

Jen Looper是Progress Software的Telerik平台的开发者倡导者。Looper还是Ladeez First Media的网络和移动开发者和创始人,Ladeez First Media是一家独立移动开发工作室。在业余时间,她是一位经常学习的舞蹈家,教师和多元文化家.

2015年12月,软件杂志

2015年12月7日,Cassie Balentine