JavaScript 引擎

更新日期: 2019-01-02阅读: 3.3k标签: 引擎

编写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是一家独立移动开发工作室。在业余时间,她是一位经常学习的舞蹈家,教师和多元文化家.


Submitted By Jen Looper
原文链接: www.softwaremag.com 
翻译来源:https://www.zcfy.cc/article/javascript-engines

 

链接: https://www.fly63.com/article/detial/1745

V8引擎是如何工作?

V8是google开发的JavaScript引擎, 它是 开源的 ,而且是用C++编写的。它用于客户端(Google Chrome)和服务器端(node.js)JavaScript应用程序。V8最初旨在提高Web浏览器中JavaScript执行的性能。为了提升速度,V8将JavaScript代码转换为更高效的机器代码,而不是使用解释器。

Javascript模版引擎mustache.js简介

最近使用ELK的sentinl进行告警配置,sentinl的邮件通知支持mustache。mustache的核心是标签和logic-less.标签: 定义模板的时候,使用了{{name}}、{{#systems}}{{/systems}}标记. 这就是mustache的标签,只不过用{{}}替代了<>

JavaScript物理引擎之Matter.js与Box2d性能对比

在挑选JavaScript 2D物理引擎的时候,不外乎两种主流的选择:第一种是老牌的Box2D,最开始的版本是C++实现的,后来有了很多种实现,比如flash版本和js版本,第二种是新潮的matter-js,matter-js比较轻量,API和文档都比较有友好。

JS 引擎 V8 发布 v7.4,性能又大幅提高了

JavaScript 引擎 V8 发布了 7.4 版本,目前处于 beta 阶段,正式版将于几个星期后与 Chrome 74 Stable 一起发布。此版本带来了一些新特性,并极大提升了性能。

精读《V8 引擎 Lazy Parsing》

本周精读的文章是 V8 引擎 Lazy Parsing,看看 V8 引擎为了优化性能,做了怎样的尝试吧!这篇文章介绍的优化技术叫 preparser,是通过跳过不必要函数编译的方式优化性能。

JavaScript引擎是如何工作的?从调用栈到Promise你需要知道的一切

你有没有想过浏览器是如何读取和运行 JavaScript 代码的吗?这看起来很神奇,但你可以学到一些发生在幕后的事情。让我们通过介绍 JavaScript 引擎的精彩世界在这种语言中尽情畅游。

从Google V8引擎剖析Promise实现

本文阅读的源码为Google V8 Engine v3.29.45,此版本的promise实现为js版本,在后续版本Google继续对其实现进行了处理。引入了es6语法等,在7.X版本迭代后,逐渐迭代成了C版本实现。

V8引擎-枚举+位运算实现参数配置

基本上从初始化引擎,到Isolate、handleScope、Context一直到编译其实都有记录,但是实在是无从下手。虽说我的博客也没有什么教学意义,但是至少也需要有一个中心和结论。

Node js 视图引擎

Node js 视图引擎就像 Laravel 中的 Blade。其最基本的定义是,视图引擎是帮助我们用比通常更短、更简单的方式编写 HTML 代码并重用的工具。此外,它还可以从服务器端导入数据并渲染最终的 HTML

规则引擎解决方案浅析

用于页面,流程,扩展点实现的选择;输出结果:实现的位置;编排无数的条件积木和行为积木,达到业务逻辑计算,券库存消减的目的;输出结果:商品重计算后的价格;通过订单,售后单,会员等信息编排和判断

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!