JavaScript引擎—V8引擎

article/2025/11/10 7:46:56

为什么需要Javascript引擎?

随着JS承担的工作越来越多,早就已超越创造出的初衷(表单验证)的范畴,因此需要快速的解析和执行JavaScript脚本

V8引擎由此而生

JavaScript引擎主要功能:结合JS语言特性本质 进行编译、执行

这里以Chrome V8为例

基本概要

V8是谷歌开源的高性能的JavaScript和WebAssembly的引擎,由**C++**代码构成。

它被广泛的应用于Chrome和Node.js中

V8实现了ECMAScript and WebAssembly 规范,其可以独立运行也可以嵌入任意C++程序中

V8编译执行 JavaScript源代码

  • 处理对象的内存分配
  • 回收不再需要的对象

V8的stop-the-world , generational, accurate garbage collector是V8高性能的关键

V8也如同JavaScript一样提供DOM、data types、operators、objects 和 function

原理

整体流程

请添加图片描述

首先V8引擎使用Parser经过 词法分析语法分析 生成 Abstract Syntax Tree(抽象语法树)

这棵树是JavaScript代码语法结构的树形表示

与此同时,Ignitioin——解释器,生成语法树的bytecode(字节码)

TurboFan——编译优化器,最后将生成的bytecode 生成优化的机器码

bytecode是对机器码的抽象

最后将最后优化的bytecode交由CPU执行

parser生成语法树

空格——whitespace

在扫描下一个标记之前,会跳过所有空格,以跟踪是否出现了换行符。

然后循环继续扫描tokens 直到找到另一个不是Token::WHITESPACE的字符。

找到后,立马开始扫描相关的token,而不需要显式检查空格。

扫描标识符—Identifier scanning

JS中变量名称——最复杂,也是最常见的token

标识符开始于ID_Start,后面可选的跟上具有属性ID_Continue

但是,这样对ID_Start或者 ID_Continue开销将十分巨大, 我们可以采用缓存map(cache mapping)加快这一速度

关键字——keyword

V8使用Ignition流程图

请添加图片描述

关键词(Keyword)是语言中特殊的标识符

V8 Scanner 返回与标识符不同的标记

在扫描完成后,我们需要判断这是否是关键字

我们使用ASCII characters来表示可能的关键字的开始和继续(与ID_Start 和 ID_Continue)意义一致

因为关键字列表是静态的,因此我们使用hash计算一个完美的散列函数

V8 使用gperf 去计算这一函数。

Ignition解释器

V8构建了新的Ignition解释器,它以更少的内存开销 执行代码,并以更简单的脚本执行管道铺平了道路。

Ignition是一个寄存器,每个字节码都将其 作为输入和输出指定为显示寄存器操作数,而不是采用堆栈。

通过特定指定的寄存器操作数,来减小字节码的大小

由于许多 JavaScript 表达式涉及从左到右求值的操作链,因此这些操作的临时结果通常可以在整个表达式求值过程中保留在累加器中,从而最大限度地减少加载和存储到显式寄存器的操作的需要。

TurboFan编译器

TurboFan结合cutting-edge intermediate representationmulti-layered translation,从而生成比JIT更优的机器码

JavaScript 代码大多以未优化的形式进入编译器管道,并被翻译和优化为逐渐低级的形式,直到生成机器码。

设计的核心是sea-of-nodes internal representation (IR),它可以更加有效的重排和优化。

数值范围分析(Numerical range analysis)帮助TurboFan更好的理解数字运算代码


http://chatgpt.dhexx.cn/article/OmUjBfpG.shtml

相关文章

LVGL V8

本文适用于LVGL V8版本 LVGL simulator vs2019 官方工程 lv_sim_visual_studio 使用注意事项: 1、将官方工程从github上下载下来,最好使用git 将整个工程clone下来,因为工程内部有依赖,如果只是将工程Download下来,无…

为什么V8引擎这么快?

转载请注明出处:http://blog.csdn.net/horkychen Google研发的V8 JavaScript引擎性能优异。我们请熟悉内部程序实现的作者依源代码来看看V8是如何加速的。 作者:Community Engine公司研发部研发工程师Hajime Morita Google的Chrome中的V8 JavaScript引擎&#xff0…

垃圾回收机制之v8引擎

v8的内存分配 (栈(执行环境)跟堆) 堆内存负责垃圾回收机制,只有新生代和老生代两部分 新生代:对等分的(严格) 老生代: 都是由新生代转变的(连续的空间&…

V8 JavaScript引擎

简介 V8 (v8.dev)是 Google 的开源高性能 JavaScript 和 WebAssembly 引擎,用 C 编写。它用于 Chrome 和 Node.js 等。它实现了 ECMAScript 和 WebAssembly,并运行在 Windows 7 或更高版本、macOS 10.12 以及使用 x64、IA-32、ARM 或 MIPS 处理器的 Lin…

V8、JSCore、Hermes、QuickJS,hybrid开发JS引擎怎么选

📌 如果你喜欢我写的文章,可以把我的公众号设为星标 🌟,这样每次有更新就可以及时推送给你啦 在一般的移动端开发场景中,每次更新应用功能都是通过 Native 语言开发并通过应用市场版本分发来实现的。 但是市场瞬息万变…

v8引擎详解

前言 JavaScript绝对是最火的编程语言之一,一直具有很大的用户群,随着在服务端的使用(NodeJs),更是爆发了极强的生命力。编程语言分为编译型语言和解释型语言两类,编译型语言在执行之前要先进行完全编译&am…

Chrome V8引擎介绍

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

V8引擎原理

V8引擎原理 V8是用C编写的Googl开源高性能JavaScript和WebAssembly引擎,它也用于Chrome和Node.js等 V8的解析js的流程 js直接放到cpu中无法执行,需要通过v8转换js先被转换成ast语法树,在此期间主要是进行词法分析和语法分析ast语法树通过…

聊聊V8引擎

V8 是什么 V8 是 Google 开源的 JavaScript 引擎。可以理解为:V8 将程序员写的代码,最终解析成机器码能够让计算机识别。其中的具体操作,就是 V8 干的事。我们把 V8 看成一个黑盒, 程序语言进去,通过黑盒子的处理&…

GNSS测量与数据处理第六周作业

1.简述GPS载波相位测量的基本原理 答:若卫星S发出一载波信号,该信号向各处传播。设某一瞬间,该信号在接收机R处的相位为φR,在卫星S处的相位为φS,φR、φS为从某一起点开始计算的包括整周数在内的载波相位&#xff0c…

三角测量计算三维坐标的代码_室内定位系统的三边测量与三角测量

三边测量依赖于信号强度作为距离的类比。三角测量依赖于标签信号接收的时间差。 室内资产跟踪非常流行。但是,当谈到整个室内资产跟踪时,请务必记住,它是由一组松散编织的技术组成的,每种技术都可以使用以下两种方法之一来计算位置…

MATLAB实现三边定位

MATLAB实现 trilateration_position.m % ----------------采用三边定位法对未知节点定位-------------------------------%{clc命令是用来清除命令窗口的内容。不管开启多少个应用程序,命令窗口只有一个,所以clc无论是在脚本m文件或者函数m文件调用时,clc命令都会清除命令…

基于圆展开自适应三边测量算法的室内定位

基于圆展开自适应三边测量算法的室内定位 具有无线通信功能的移动设备的日益普及刺激了室内定位服务的增长。室内定位用于实时定位设备位置,方便访问。然而,由于大量障碍物,与室外定位相比,室内定位具有挑战性。全球定位系统非常适…

计算节点位置的基本方法

计算节点位置的基本方法 在传感器节点定位过程中,通常根据未知节点(被监测节点)相对相邻信标节点的距离、角度进行计算位置。通常采用三边测距法、三角测距法或极大似然估计法进行计算。 三边测距法(Trilateration) 三边测距法的原理如下&…

定位算法——多边测量法及MATLAB编程

文章目录 三边测距定位算法简介多边测量法公式推导三边测距定位算法MATLAB程序 三边测距定位算法简介 三边测量法是多边测量法的低级应用,即已知三个点的横纵坐标和与未知点的距离 d d d,如下图所示:  如图所示已知 ( x 1 , y 1 ) (x_1,y_1…

UWB 三边测量定位原理及最小二乘法和三角形质心法的应用—通俗解析

UWB 三边测量定位原理及最小二乘法和三角形质心法的应用—通俗解析 本人二线城市小程序员一枚,这段时间因为公司的原因,开始研究UWB,定位原理部分花了三整天看CSDN上的各种文章,零零散散,大多是讲的某一部分的原理,没有能给串联起来的。 把学习过程中一些心得分享给大家…

【UWB 定位】室内定位 三边定位算法

最近在整UWB室内定位,看到一些简单的测距数据解算算法,记录一下。 测 在基于测距的定位算法中,三边测量法是比较简单的算法,算法原理为:平面上有三个不共线的基站 A,B,C,和一个未知终端 D,并已…

Trilateration三边测量定位算法

Trilateration(三边测量)是一种常用的定位算法: 已知三点位置 (x1, y1), (x2, y2), (x3, y3)已知未知点 (x0, y0) 到三点距离 d1, d2, d3 以 d1, d2, d3 为半径作三个圆,根据毕达哥拉斯定理,得出交点即未知点的位置计…

python实现简单的三边测量定位

定位原理很简单,故不赘述,直接上源码,内附注释。(如果对您的学习有所帮助,还请帮忙点个赞,谢谢了) #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Wed May 1…

三边测量定位算法C语言实现

三边定位算法 三边定位算法简介 三个位置已知点(锚节点,圆心)以及其到另外一个未知点(待定位点)的距离即半径(不准确),求位置节点坐标的过程; 实际上(例如…