聊聊V8引擎

article/2025/11/10 8:57:14

V8 是什么

	V8 是 Google 开源的 JavaScript 引擎。可以理解为:V8 将程序员写的代码,最终解析成机器码能够让计算机识别。其中的具体操作,就是 V8 干的事。我们把 V8 看成一个黑盒, 程序语言进去,通过黑盒子的处理,经过一系列操作后,解析成机器码。【V8被广泛用于各种JavaScript执行环境。】了解V8,对于性能优化的思考会有更多理解和方向。能够更轻松理解babel语法分析原理,eslint语法检查机制,前端框架的底层实现。

V8的发展

  • 第一个版本的特点:由 JavaScript 直接转成 机器码。因此执行速度很快。但是只有一个编译器「Codegen」来处理,所以优化很有限。
  • 第二个版本的特点:有两个编译器。会先被编译器「Full-Codegen」编译,多次执行的部分会通过优化编译器「Crankshaft」生成更优的代码。
  • 第三个版本有三个编译器。

但是上面三个版本的V8本质上都是 「由 JavaScript 直接转成 机器码」的核心。
这个核心的特点是:执行速度快,内存消耗非常大。

于是后来加入了编译器「lgnition」,用来引入了字节码,达到减少内存使用的目的。

V8 的最新版本大概长这样:

在这里插入图片描述

V8 引擎的运行过程:

  • 首先通过解析器「Parser」将 JavaScript 解析成 AST
  • 然后解释器「lgnition」会将AST翻译成字节码。此阶段边解释边执行。同时解释器「lgnition」会记录特定代码段的执行次数,当运行次数达到一定值「称为阈值」,解释器「lgnition」就会将该段代码标记为热代码,并将信息反馈给优化编译器「TurboFan」。
  • 优化编译器「TurboFan」会对标记的代码段进行优化,最终生成优化后的字节码。这样当该段代码需要再次执行时,就会直接使用优化后的机器码执行,不用再进行解释编译。从而大大提高代码运行效率。

V8的解析过程:

V8 只有等编译完成后才能运行代码。所以解析和编译过程的性能很重要。V8 的整个解析过程分两个部分:词法分析和语法分析。
在这里插入图片描述

  • 词法分析:将字符流「即一行行的代码」转换为 tokens「即不能再分割的最小单位,可能是单个字符,也可能是字符串」。
所以写代码的时候,注意尽可能地减少代码数量,代码行数,精简代码,有利于性能优化。成熟的开发者,应该追求精简优雅的代码。这样可以减少词法分析的工作量。
  • 语法分析:根据语法规则,将 tokens 组成一个有嵌套层级的抽象语法结构树「即 AST」,在此过程中,如果源码不符合语法规范,解析过程就会终止,并抛出语法错误。图中的 Parser 和 Pre-Parser 都是 V8 的语法分析器。

如果一次性全部解析出来所有代码,会占用磁盘空间,也非常消耗内存,并且执行的时间会很长。
所以存在预解析,比如当词法分析阶段读到函数声明时,因为函数不需要立即执行,所以会进行预解析。「即只解析函数声明,不解析函数内部的代码,不会为函数生成AST」。 Pre-Parser 就是用来预解析的。当函数调用的时候才会真正开始解析生成AST。最终会将AST转成字节码。


http://chatgpt.dhexx.cn/article/78MVxjiS.shtml

相关文章

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语言实现

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

dvhop三边测量法MATLAB,基于非测距的DV-Hop定位算法改进

无线传感器网络是由大量随机分布的传感器节点组成,是一种分布式的、自组织的网络。其关键技术包括:网络拓扑控制、节点定位、时钟同步、数据融合、路由协议等。而节点定位问题则是无线传感器网络中的一个最为基本和重要的问题。目前,无线传感器网络定位算法可以分为基于测距…

matlab 三边测量,三边测量的定位算法,matlab转为c

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 %三边测量的定位算法 %dA,dB,dC为A,B,C到未知节点(假定坐标[x,y]未知)的模拟测量距离 A [0,0]; B [25,25*sqrt(3)]; C [50,0]; dA51/sqrt(3); dB51/sqrt(3); dC51/sqrt(3); %A,B,C为三个选定的信标节点,节点坐标已知(为便于防真…

定位算法-三边测距定位

作者:姜小明 github 日期:2020-09-06 关键字:RANSAC, Multilateral positioning, localization 上一篇文章(《使用RANSAC的鲁棒TDOA Chan定位算法》)中提到,如果我们知道当前位置到各个基站的距离&#x…

三边测距定位算法详解

关注、星标公众号,直达精彩内容 来源:平行机器人 | 赵得江 整理:李肖遥 通过GPS定位系统实现无人机的空中悬停定点飞行 “定位”这个概念我想大家并不陌生,可以说定位技术的迅猛发展给我们的日常生活带来了极大的便利。比如&#…

Android框架揭秘电子书pdf下载

Android框架揭秘下载链接: https://pan.baidu.com/s/1W1xrsC2-w5MgsrY-6i_cFg 提取码获取方式:关注下面微信公众号,回复关键字: 1119

Android初学之路—Android系统框架

从下到上依次为: 1.Linux内核(Linux Kernel) Android系统的最底层是基于Linux内核实现的,它负责硬件驱动、网络管理、电源管理、系统安全、内存管理等。例如它可以负责显示驱动、基于Linux的帧缓存驱动、键盘驱动、Flash驱动、摄…

《Android框架揭秘》——2.2节搭建Android平台编译环境

本节书摘来自异步社区《Android框架揭秘》一书中的第2章,第2.2节搭建Android平台编译环境,作者 金泰延 , 宋亨周 , 朴知勋 , 李白 , 林起永,更多章节内容可以访问云栖社区“异步社区”公众号查看 2.2 搭建Android平台编译环境Android框架揭秘…

《Android框架揭秘》——2.3节搭建Android SDK开发环境

本节书摘来自异步社区《Android框架揭秘》一书中的第2章,第2.3节搭建Android SDK开发环境,作者 金泰延 , 宋亨周 , 朴知勋 , 李白 , 林起永,更多章节内容可以访问云栖社区“异步社区”公众号查看 2.3 搭建Android SDK开发环境Android框架揭秘…

《Android框架揭秘》——2.4节开发Android应用程序

本节书摘来自异步社区《Android框架揭秘》一书中的第2章,第2.4节开发Android应用程序,作者 金泰延 , 宋亨周 , 朴知勋 , 李白 , 林起永,更多章节内容可以访问云栖社区“异步社区”公众号查看 2.4 开发Android应用程序Android框架揭秘在上一节…