首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

V8 执行 JavaScript 的过程

/article/the-process-of-executing-js-in-v8 前言 本文意在简单的介绍一下 V8 执行 JS 的过程,通过了解 V8 执行 JS 的过程,知道 JS 代码呈现在浏览器上到底做了什么...V8 执行 JavaScript 过程 如上图所示,我们将一步步进行拆分分析: JS TO AST 在 V8 引擎拿到 JS 代码之后,解析器(Parser)会对其进行词法分析和语法分析。...拿之前版本的 V8 引擎执行 JS 来说,是没有转字节码这一步骤的,直接从 AST 转成机器码,这个过程称为编译过程,所以每次拿到 JS 文件的时候,首先都会编译,而这个过程还是比较浪费时间的,这是一件比较头疼的事情...解释在将 AST 转为字节码之后,会在执行的时候将字节码转成机器码,这个执行过程肯定是比直接执行机器码要慢的,所以在执行方面,速度上会比较慢,但是 JS 源码通过解析器转 AST,然后再通过解释器转字节码...总结 从分析的过程来看,V8JS 执行的过程,不仅使用到了解释器,还用到了优化编译器。这种两者结合去处理的方式,业界称为 JIT (Just-In-Time)。

96830
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    你知道 V8 是如何执行 JS 代码的吗?

    大家好,我是小丞同学,一名准大二的前端爱好者 这篇文章将带你了解 V8 是如何执行 JS 代码的 愿你忠于自己,热爱生活 引言 源代码首先通过解析器解析成 AST ,然后 AST..."value": ";" } ] 第二步就是语法分析 将上一步的 token 数据,转为 AST,得到一个树状结构 因此 AST 也被称为抽象语法树 在生成 AST 的同时,V8...而如果在下次的调用中,传入的参数是字符串型,机器代码不知道如何处理,就会返回给解释器解释执行 因此我们尽量不要把一个变量的类型变来变去,这样会对 V8 引擎带来一些影响,损失一定的性能 ---- 以上就是...V8 执行 JS 代码的具体流程 在网上看到的一张图(侵删),很形象,excalidraw 上不去,不然我一定自己做了 参考资料 《V8是如何执行一段JS代码的?》...《【干货】8分钟带你了解V8引擎是如何运行JS!》 非常感谢您的阅读,欢迎提出你的意见,有什么问题欢迎指出,谢谢!

    1.2K20

    你知道 V8 是如何执行 JS 代码的吗?

    大家好,我是小丞同学,一名准大二的前端爱好者 这篇文章将带你了解 V8 是如何执行 JS 代码的 愿你忠于自己,热爱生活 引言 源代码首先通过解析器解析成 AST ,然后 AST 再通过解释器解释成最终的字节码..."value": ";" } ] 第二步就是语法分析 将上一步的 token 数据,转为 AST,得到一个树状结构 因此 AST 也被称为抽象语法树 在生成 AST 的同时,V8...会将这些热点代码编译成更高效的机器代码储存起来,等到下次再执行时,会用现在的机器代码替换原来的字节码进行执行,这样就会大大的提示代码的执行效率。...而如果在下次的调用中,传入的参数是字符串型,机器代码不知道如何处理,就会返回给解释器解释执行 因此我们尽量不要把一个变量的类型变来变去,这样会对 V8 引擎带来一些影响,损失一定的性能 ---- 以上就是...V8 执行 JS 代码的具体流程 在网上看到的一张图(侵删),很形象,excalidraw 上不去,不然我一定自己做了

    1.3K20

    JavaScript 引擎 V8 执行流程概述

    这里不涉及到如何编写优秀的前端,只是对JS内部引擎技术的讲解。 一、V8来源 V8的名字来源于汽车的“V型8缸发动机”(V8发动机)。V8发动机主要是美国发展起来,因为马力十足而广为人知。...JS执行的过程中,V8内置的Profiler筛选出热点函数并且记录参数的反馈类型,然后交给 Crankshaft 来进行优化。...Ignition的字节码在V8中提供了更清晰且更不容易出错的基线执行模型,简化了去优化机制,这是V8 自适应优化的关键特性。...接下来我们大致的讲解下现有架构的每个流程: 六、V8的词法分析和语法分析 学过编译原理的同学可以知道,JS文件只是一个源码,机器是无法执行的,词法分析就是把源码的字符串分割出来,生成一系列的token,...(注意执行V8需要加上 --allow-natives-syntax,OptimizeFunctionOnNextCall为内置函数,只有加上 --allow-natives-syntax,JS才能调用内置函数

    1.1K21

    V8如何处理JS

    执行JS代码核心流程 1....后执行 V8采用「JIT」(Just In Time)技术提升效率 文章概要 浏览器简史:从群雄涿鹿到一家独大 V8:一款高性能JS和WebAssembly引擎 执行JS代码的流程 在聊我们今天主角V8...(针对JS的介绍,可以参考之前写的JS篇之数据类型那些事儿[7],并且后期我们也会有针对该技术的介绍和分析。) 简单的说就是: ❝v8是「JS虚拟机」的一种 (除了V8,还有其他类型的JS虚拟机。...消息队列) 执行流程 V8 接收到要执行JS 源代码 (源代码对 V8 来说只是「一堆字符串」,V8 并不能直接理解这段字符串的含义) V8结构化这段字符串,生成了「抽象语法树」 (AST),同时还会生成相关的...后执行 ❞ 通过V8js转换为字节码然后经过解释器执行输出结果的方式执行JS,有一个弊端就是,如果在浏览器中再次打开相同的页面,当页面中的 JavaScript 文件没有被修改,再次编译之后的二进制代码也会保持不变

    84220

    js引擎v8源码分析之Handle(基于v8 0.1.5)

    Handle是使用v8的时候很重要的一个概念和类。他本质是堆对象的封装。我们通过Handle管理真正的对象,而不是直接操作对象。Handle在v8中有两个实现。一个是对外使用的一个是内部使用的。...Local 1 Local类是基于栈分配的一种Handle,他在一个函数开始的时候,声明一个HandleScope,HandleScope下面所有的Handle都在最近的的HandleScope中分配,函数执行完后...即Local内部管理用户定义的对象(String::New函数执行完后,他里面定义的result,即handle被析构)。如下图。 ?...这就是v8用本地handle(临时handle)管理堆对象的大致原理。一般来说handle在函数结束后就会被释放,如果想在函数执行完还使得句柄可用,可用使用逃逸(escape)。...总结,这就是v8中关于handle的一些知识。

    1K10

    V8是如何执行JavaScript代码的?

    通过上面的描述,我们已经知道了JavaScript是通过解释器来进行翻译执行的,那么JavaScript引擎V8执行Js代码的详细过程是怎么样的呢?接下来我们详细分析一下。...V8执行Js代码的过程 V8执行Js代码的整体流程如下图所示: ? 在这个过程中,V8同时使用了Parser(解析器)、Ignition(解释器) 和TurboFan(编译器) 来执行Js代码。...上图是一段Js代码转成AST后的结构图,从图中可以看出AST是把代码结构化成树状结构表示,这样做是为了更好的让编译器或者解释器理解。...字节码比机器码占用更小的内存,这也是为什么V8使用字节码的一个很重要的原因。字节码不能够直接在处理器上运行,需要通过解释器将其转换为机器码后才能执行。 ?...把它编译为更高效的机器码储存起来,等到下次再执行到这段代码时,就会用现在的机器码替换原来的字节码进行执行,这样大大提升了代码的执行效率。

    1.4K30

    V8带来的JS性能优化

    JS是无类型语言,无法在执行时就知道变量的类型和地址,所以需要确定。 JS和C++的几个区别: 编译确定位置。...C++编译阶段确定位置偏移信息,在执行时直接存取;JS执行阶段确定,而且执行期间可以修改对象属性。 偏移信息共享。...C++有类型定义,执行时不能动态改变,可共享偏移信息;JS每个对象都是自描述,属性和位置偏移信息都包含在自身结构中。 偏移信息查找。...在JS中,除了boolean,number,string,null,undefined五种基本类型,其他的数据都是对象,V8使用一种特殊的方式来表示他们,进而优化JS的内部表达问题。...JavaScript对象在V8中的实现包含三部分:隐藏类指针,V8JS对象创建的隐藏类;属性值指针,指向该对象的属性值;元素值指针,指向该对象的属性。

    1.9K20

    day039: 描述一下 V8 执行一段JS代码的过程?

    站在 V8 的角度,理解其中的执行机制,也能够帮助我们理解很多的上层应用,包括Babel、Eslint、前端框架的底层机制。那么,一段 JavaScript 代码放在 V8 当中究竟是如何执行的呢?...但 JS 整个执行的过程其实会比这个更加复杂,接下来就来一一地拆解。 1.生成 AST 生成 AST 分为两步——词法分析和语法分析。...由于本文着重阐述原理,关于 babel 编译的细节就不展开了,推荐大家去读一读荒山的babel文章, 帮你打开新世界的大门: ) 回到 V8 本身,生成 AST 后,接下来会生成执行上下文,关于执行上下文...在执行字节码的过程中,如果发现某一部分代码重复出现,那么 V8 将它记做热点代码(HotSpot),然后将这么代码编译成机器码保存起来,这个用来编译的工具就是V8的编译器(也叫做TurboFan) ,...这就是 V8执行一段JS代码的整个过程,梳理一下: 首先通过词法分析和语法分析生成 AST 将 AST 转换为字节码 由解释器逐行执行字节码,遇到热点代码启动编译器进行编译,生成对应的机器码, 以优化执行效率

    97221
    领券