精华内容
下载资源
问答
  • JavaScript引擎

    2020-08-07 14:15:32
    JavaScript引擎是一个专门处理JavaScript脚本的虚拟机,一般会附带在网页浏览器之中。 历史 在2008年到2009年的第二次浏览器大战之前,JavaScript引擎仅简单地被当作能阅读执行JavaScript源代码的直译器。 第一个...

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

    历史

    在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

    性能演进

    一个典型的浏览器有一个图形引擎和一个独立的JavaScript引擎。这样JavaScript引擎能够被更方便的测试、重新生成或者在另一些项目中使用。例如:Carakan被用在Presto中,Nitro被用在WebKit中,SpiderMonkey被用在Gecko中,KJS被用在KHTML中,Rhino默认不包含任何布局引擎。但还有其他组合,例如:V8与WebKit被用于Google Chrome中。JavaScript引擎能为程序员提供部分操作浏览器的功能(网络、DOM、外部事件、HTML5视频、canvas和存储)。

    Sunspider是一个通过一系列关于JavaScript语言的脚本测试JavaScript引擎的速度。Sunspider不测试无关于JavaScript的特性(不使用HTML、CSS和无网络情况下)。

    近几年来,在浏览器开发者之间展开了一场开发更快的JavaScript引擎的竞赛。2008年,Google Chrome因它的JavaScript性能而倍受称赞,但是其它浏览器马上使用了更快的JavaScript引擎。之后,Google Chrome在性能上获得领先,其长处在于它高速的性能和JavaScript的处理速度,这些都由许多网站在主要的浏览器之间的速度测试中得到验证[1][2][3]。随着WebKit的Squirrelfish Extreme和Mozilla的TraceMonkey JavaScript虚拟机出现,Chrome的JavaScript执行速度就被超越了[4][5][6][7]。Google丹麦在Chrome 2中开发了更快速的V8引擎

    2008年6月2日,WebKit开发团队发布了SquirrelFish[8]——一个能极大地提升Safari解释脚本速度的新的JavaScript引擎[9]。该引擎是Safari 4其中一个新特性,在2008年6月11日发布给程序员使用;最终此JavaScript引擎被称为Nitro。2009年6月30日,在Firefox 3.5发布的最新技术能“使某些情况下的速度提升20到40倍”[10]。

    JavaScript引擎

    开发中

    停止开发

    实现

    JavaScript是一种ECMAScript方言,在许多程序中得以实现,特别是在网页浏览器。这些方言通常扩展了语言,或者标准库和相关API,例如W3C定义的DOM。这意味着以一种方言实现的程序不兼容于另一种方言的实现,除非程序使用了方言中的公共子集所具有的特性和API。

    在实现和方言中存在着一些差别。一种语言的方言有一些与语言不同的地方。实现能够执行该语言或方言编写的程序。

    应用程序(实现)

    方言和最后版本

    ECMAScript版本

    Google ChromeV8引擎

    JavaScript

    ECMA-262,版本6

    Mozilla FirefoxGecko排版引擎,SpiderMonkeyRhino

    JavaScript 1.8.5

    ECMA-262,版本6

    SafariNitro引擎

    JavaScript

    ECMA-262,版本6

    Microsoft EdgeChakra引擎

    JavaScript

    EMCA-262,版本6

    Opera,Carakan引擎(改用V8之前)

    一些JavaScript 1.5特性及一些JScript扩展[12]

    ECMA-262,版本5.1

    KHTML排版引擎,KDE项目的Konqueror

    JavaScript 1.5

    ECMA-262,版本3

    Adobe Acrobat

    JavaScript 1.5

    ECMA-262,版本3

    JavaScript 1.4

    ECMA-262,版本3

    JavaScript 1.5

    ECMA-262,版本3

    JavaScript 1.5附带RMAI扩展

    ECMA-262,版本3

    外部链接

    展开全文
  • JSC.js是一个JavaScript引擎,可以在浏览器的JavaScript引擎之上运行。 它基于WebKit的默认JavaScript引擎。 因此,如果您使用Safari,您可以自己运行其JavaScript引擎
  • JavaScript引擎工作原理

    2017-11-25 23:11:11
    JavaScript引擎工作原理 JavaScript引擎工作原理 JavaScript引擎工作原理
  • JavaScript引擎切换器 JavaScript引擎切换器确定用于访问流行JavaScript引擎( , , , , , , 和 )的基本功能的统一接口。 该库使您可以快速轻松地切换到使用另一个JavaScript引擎。 支持的.NET类型如下: ...
  • V8Js V8Js是Google V8 Javascript引擎PHP扩展。 该扩展允许您从PHP的安全沙箱中执行Javascript代码。 可以使用时间限制和/或内存限制来限制执行的代码。 V8Js V8Js是Google V8 Javascript引擎PHP扩展。 该扩展允许您...
  • 方舟JavaScript 引擎

    千次阅读 2021-04-01 12:51:44
    这次开源的是JavaScript引擎。和Java引擎一样,都是基于统一的编译器生成的MapleIR。图一显示了引擎(红色部分)在整个方舟体系中的位置。 图一、方舟体系示意图 由于依托统一的MapleIR来执行,所以引擎在很大...

    自开源以来,方舟编程体系已经逐步开始成熟,编译器、引擎和调试器等陆续开放。这次开源的是JavaScript引擎。和Java引擎一样,都是基于统一的编译器生成的MapleIR。图一显示了引擎(红色部分)在整个方舟体系中的位置。

    图一、方舟体系示意图

    由于依托统一的MapleIR来执行,所以引擎在很大程度上是跟高级语言无关的,当然,不同语言的特性要分别支持。引擎可以在多语言运行环境下执行JavaScript程序,实现C/C++/Java/JavaScript等多语言程序混合执行。基于此实现的调试器也可以实现多语言调试。

    方舟多语言引擎分为静态和动态类型两类,分别处理静态类型语言(statically typed language,比如Java)和动态类型编程语言(Dynamically typed language,比如JavaScript)。静态类型程序在编译时就可以确定数据类型,编译后的程序只有显式数据类型转换,而动态类型程序需在运行时确定数据类型,对数据类型的操作也有较大的差异,运行阶段需要做隐式类型转换。为了减少运行时性能开销,我们设计了这两类方舟多语言引擎,在函数层面可完成多语言程序混合执行。方舟JavaScript 引擎属于动态类型,而之前推出的Java引擎则属于静态类型。

    方舟JavaScript 引擎可支持JavaScript应用开发,在IoT(物联网)和手机设备上运行JavaScript应用。JavaScript应用开发框架一般采用多种编程语言实现,即兼顾了功能易扩展性(JavaScript),又保证了运行时高性能(如C/C++)。JS应用的开发也有类似的需求。方舟编程体系的多语言联合编译恰好满足了这样的需求,而JavaScript 引擎成为其中重要的一环。

    这次推出的方舟JS引擎涉及了方舟编程体系的多个部件,比如编译器JS前端(目前暂时用SpiderMonkey,后续用MapleFE替换),JS后端,JS运行时,及JS调试器等。图二显示了引擎的主要工作模块。JavaScript应用或框架程序经前端处理,转换为Maple IR的中间代码。方舟编译器可进一步优化并由后端产生MapleIR 指令代码,再由方舟JavaScript 引擎执行这些MapleIR代码。运行时确定数据类型,做合适的类型转换。

    图二、方舟JavaScript引擎结构示意图

    方舟JavaScript 引擎实现了大部分ECMAScript 5.1标准。由于JavaScript语言的动态语言特性,比如eval()和 Function构造函数,可以在运行时创建JS代码并运行,这就需要JavaScript前端在运行时做语法分析并产生代码,暂时没有实现,后续会集成自研的MapleFE实现全部功能。另外事件驱动架构和ECMA-402标准暂没有实现。

    这次方舟JS引擎实现了绝大多数的基本功能。但如果想获得高性能的JavaScript引擎,首先需要增加的是方舟JIT(Just-in-time)编译器。方舟JIT编译器可以依据运行时的类型信息以及其他程序动态信息做相应的假设,进行程序优化。该JIT编译器是基于方舟编译器的。本次开源不包含JIT编译器,将在下一次发布时推出。

    方舟引擎以及方舟体系还有很大的改进空间,愿和开源社区朋友一起努力完善它。

    Maple引擎代码仓
    https://gitee.com/openarkcompiler-incubator/maple_engine


    开源方舟编译器微信公众号

    微信号:openarkcompiler

    功能介绍:方舟编译器是为支持多种编程语言、多种芯片平台的联合编译、运行而设计的统一编程平台

    展开全文
  • V8 Javascript引擎库(libv8)主 ) V8是Google的开源Javascript引擎。 V8用C ++编写,并在Google Chrome(谷歌的开源浏览器)中使用。 V8实现了ECMA-262,第5版中指定的ECMAScript。 此扩展程序要求V8 6.9(已知...
  • JavaScript引擎技术

    2011-10-24 12:44:17
    JavaScript引擎技术
  • JavaScript 引擎:概述

    2020-09-09 10:43:32
    JavaScript 引擎:概述引言几个主流的 JavaScipt 引擎JavaScript 引擎流程图1. Parser 解析器 引言 JavaScript 引擎是执行JavaScript代码的计算机程序或解释器。JavaScript 引擎可以用多种语言编写。例如,支持 ...

    引言

    JavaScript 引擎是执行JavaScript代码的计算机程序或解释器。JavaScript 引擎可以用多种语言编写。例如,支持 Chrome 浏览器的 V8 引擎是用 C ++ 编写的,而支持 Firefox 浏览器的 SpiderMonkey 引擎是用 C 和 C ++ 编写的。

    JavaScript 引擎可以作为标准解释器,也可以作为即时编译器将 JavaScript 代码编译为某种形式的字节码。第一个 JavaScript 引擎几乎只是解释器,但是大多数现代引擎都采用即时(JIT)编译来提高性能。

    几个主流的 JavaScipt 引擎

    所有主流的浏览器都有自己的 JavaScript 引擎。 以下是一些主流的 JavaScript 引擎。

    JavaScript 引擎流程图

    Image Credits: Sander in Dev.to

    Image Credits: Sander in Dev.to

    如果你想知道 JS 引擎如何处理 JavaScript 代码,上图是一个简化的流程图。

    1. Parser 解析器

    最初,HTML 解析器会遇到带有 JavaScript 源代码的 script 标签。该脚本中的源代码将作为 UTF-16 字节流加载到字节流解码器。这些字节被解码为令牌(令牌可以理解为语法上不可再分的、最小的单个字符或字符串),然后转发给解析器。JS 引擎将始终避免解析当前不需要的代码,以提高效率。

    2. AST 抽象语法树

    解析器根据接收到的令牌生成节点,并使用这些节点来创建抽象语法树(AST)。AST 在语义分析中起着至关重要的作用,在语义分析中,编译器将验证语言元素和关键字的正确使用。

    你可以访问 https://astexplorer.net/ 查看演示示例。

    3. Interpreter 解释器

    上述流程图中,AST 之后是解释器,解释器遍历分析 AST 并生成字节码。生成字节码时,将删除 AST,并清除存储空间。 解释器会快速生成未优化的机器码,并且可以立即开始运行。

    解释器会逐行解释代码,在这一过程中,会分析是否存在需要多次执行的代码,需要多次执行的代码会被发送到优化编译器(JIT 编译器)中,然后被转换为可以直接执行的机器码,这样下次执行到该段代码时编译器不需要再编译,提升了代码执行的效率。

    4. Profiler 分析器

    分析器在代码运行时对其进行评估,找出可以优化的地方。

    5. Compiler 编译器

    在分析器的支持下,所有未优化的代码都将传递给编译器以执行增强功能,并生成机器码,该机器码将替换之前由解释器生成的未优化的机器码。

    6. 优化的代码

    经过上述几步处理,最后可以得到高度优化的代码。

    现在,让我们简要介绍一下 Chrome 的 V8 引擎以及使它与众不同的原因。

    Chrome 的 V8 引擎

    JavaScript V8 引擎是用 C++ 编写的开源应用程序,可在执行之前将 JavaScript 代码编译为优化后的机器码。最初创建 V8 引擎是为了提高 Chrome 和基于 Chromium 的浏览器中的 JavaScript 性能。后来,随着时间的推移,最新版本允许 JavaScript 代码在浏览器外部执行,从而启用了服务器端脚本。

    由于最初的 JavaScript 引擎是解释器,因此它们逐行处理代码。随着时间的推移,发现这样有很多优化空间。Chrome V8 实现了一种即时(Just-In-Time,简称 JIT)编译的技术。 该技术结合使用了解释器和编译器,以实现更优的执行。

    V8 引擎与其他引擎有何不同?

    V8 和其他现代引擎(例如 SpiderMonkey,Rhino)都遵循相同的方法。 但是使 V8 脱颖而出的是它不会产生任何中间代码或字节码。

    但这一切在 2016 年之后发生了变化,Chrome V8 团队推出了一款名为 Ignition 的解释器。使用 Ignition,V8 将 JavaScript 函数编译为一个短字节码,该字节码的大小大概是基准机器码的50%到25%。然后,该字节码由高性能的解释器执行,该解释器在网站上的代码执行速度与 V8 现有的基准编译器生成的代码执行速度接近。
    在这里插入图片描述

    V8’s compilation pipeline with Ignition enabled (2016)— Source: V8 Docs

    快速变化

    必须记住,Web 开发的领域每天都在迅速变化。尤其是对于浏览器,人们进行了许多尝试来提高性能和体验。这导致对 JavaScript 引擎的结构进行定期更改和更新。因此,如果你想了解更多有关引擎的信息,我建议查看引擎的官方文档,因为博客文章可能会过时。甚至有时,当你阅读此文章时,它可能就已经过时了。

    对于 V8 来说,上面显示的流程图已经不是最新版本了。 下图显示了当前的最新版。请注意,随着 V8 团队不断努力以不断提高性能,下图的流程也可能会很快改变。
    在这里插入图片描述

    V8’s latest abstract compilation pipeline (2017) — Source: V8 Presentation

    在这里插入图片描述

    V8’s latest compilation pipeline (2017) — Source: V8 Presentation

    如果将上图与 2016 版的进行比较,可以发现已经大相径庭了。

    相对旧版本的优势

    V8 团队为此新更新提供了很多说明,包括但不仅限于:

    • 减少内存使用——ignition 代码比完整源代码小8倍
    • 缩短了启动时间——字节码更小且生成速度更快
    • 改进了基准性能——不再依赖优化编译器来获得运行快的代码

    你可以在这里从团队中了解更多信息。

    V8 的新发展

    无 JIT 模式

    V8 甚至有无 JIT 模式运行,该模式下无需在运行时分配可执行内存。在 IOS、智能电视、游戏机等平台上没有可执行内存的写入权限的情况下,这非常有用。

    你可以在这里阅读更多内容。

    后台编译

    借助 Chrome 66,V8 在后台线程上编译J avaScript 源代码,从而使在标准网站上在主线程上编译所花费的时间减少了 5% 至 20%。

    可以在此处的官方博客文章中了解更多信息。

    展开全文
  • V8 JavaScript引擎的PHP扩展
  • IE9 Platform Preview包括Microsoft的新JavaScript引擎的第一个版本,代号为“ Chakra”。 Chakra附带了一个新JavaScript编译器,该编译器将JavaScript源代码编译为本机代码。 有关Chakra的更多信息,请访问IEBlog ...

    javascript引擎

    Microsoft已发布Internet Explorer 9的预览版。

    IE9平台预览版包括Microsoft的新JavaScript引擎的第一个版本,代号为“ Chakra”。 Chakra附带了一个新JavaScript编译器,该编译器将JavaScript源代码编译为本机代码。 有关脉轮的更多信息,请访问IEBlog

    他们正在征求反馈,但要求用户不要针对明显已部分实现或尚不可用的功能提供反馈。


    翻译自: https://jaxenter.com/preview-of-internet-explorer-9-with-new-javascript-engine-100550.html

    javascript引擎

    展开全文
  • 图解JavaScript引擎

    2020-08-13 16:59:13
    不过,一定要了解JavaScript引擎的基础知识,看看它如何处理我们对人类友好的JS代码,并将其转换成机器可以理解的东西!???? 请注意:这篇文章主要基于Node.js和基于Chromium的浏览器使用的V8引擎。 HTML解析器...
  • 渲染引擎 主要作用:1....2.绘制页面。 每种浏览器的渲染引擎可能会不一样,但都遵循W3C标准开发而成,方便Web技术的互相...JavaScript引擎 主要作用:解释并执行JavaScript。 每种浏览器也会有不同的JavaScript...
  • 这篇文章我们来探索下运行时环境的核心——JavaScript引擎。 一、JavaScript引擎介绍 JavaScript 引擎是什么:一种用于将我们的代码转换为机器可读语言的引擎。 JavaScript引擎作用:将js代码编译成机器码,还负责...
  • javascript引擎工作原理

    2020-02-20 15:48:54
    javascript引擎工作原理 什么是JavaScript解析引擎?  简单地说,JavaScript解析引擎就是能够“读懂”JavaScript代码,并准确地给出代码运行结果的一段程序。比方说,当你写了 var a = 1 + 1; 这样一段代码,...
  • JavaScript引擎运行原理解析

    千次阅读 2018-09-30 10:16:41
    1. 什么是JavaScript解析引擎?... 这样一段代码,JavaScript引擎做的事情就是看懂(解析)你这段代码,并且将a的值变为2。 “JavaScript 引擎”通常被称作一种虚拟机。 JavaScript 虚拟机是一种进程虚拟...
  • 最新版Google V8引擎库,谷歌Chrome JavaScript引擎,VS2013 32位编译,可正式使用
  • JavaScript 引擎技术

    2009-07-08 10:33:10
    JavaScript语言与引擎技术.ppt JavaScript语言规范的... JavaScript引擎的发展 JavaScript的扩展 JavaScript的语言特性 过程式是入门特性 原型继承是对象框架特性 函数式是其语言的根基 动态特性是粘合与催化剂
  • 周爱民JavaScript 引擎技术 周爱民JavaScript 引擎技术 周爱民JavaScript 引擎技术
  • javascript引擎——V8

    2018-04-13 14:15:15
    通过上一篇文章,我们知道了JavaScript引擎是执行JavaScript代码的程序或解释器,了解了JavaScript引擎的基本工作原理。我们经常听说的JavaScript引擎就是V8引擎,这篇文章我们就来认识一下V8引擎,我们先来看一下...
  • 主要介绍了新手入门带你学习JavaScript引擎运行原理,JavaScript引擎是一个专门处理JavaScript脚本的虚拟机,一般会附带在网页浏览器之中。下面我们来详细了解一下吧
  • SophonJS 是嵌入式 javascript 引擎。特点:ECMAScript5 标准占用空间小 将源代码编译为字节码指令指令文件存储和读取功能 标签:SophonJS

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,864
精华内容 8,745
关键字:

javascript引擎

java 订阅