V8引擎-js执行原理

article/2025/8/21 14:37:40


前言: 今天小编给大家讲解一下小伙伴们心中一直存在的问题,那就是我们在使用node环境或者浏览器的时候为什么可以执行js代码? 我们定义了很多的变量和函数内部是如何处理的? 以及我们常常说的作用域以及变量提升到底是什么? 接下来小编将逐一的带大家去解决这些问题?

再说v8引擎之前,先带大家了解一下基本的知识~

Javascript是什么?

javascript是一门解释型的高级编程语言, 有高级编程语言,就有低级编程语言,从编程语言发展历史来说,可以划分为三个阶段:

机器语言:10010001111, 一些机器指令
汇编语言:mov ax,bx, 一些汇编指令;
高级语言: C , C++ , Java , Javascript , Python ;
计算机本身是不认识这些高级语言的,所以我们的代码最终还是需要被转换成机器指令:
​​​​
在这里插入图片描述

认识浏览器的内核

不同的浏览器有不同的内核组成
​​
Gecko:早期被Netscape和Mozila Firefox浏览器使用
Trident:微软开发,被IE4-IE11浏览器使用,但是Edge浏览器已经转向Blink;
Webkit:苹果基于KHTML开发,开源的,用于Safari, Google Chrome之前也在使用;
Blink: 是Webkit的一个分支, Google开发,目前应用于Google Chrome , Edge , Opera等;
浏览器渲染过程
​​​​在这里插入图片描述
1.浏览器先执行HTML形成DOM树,Css形成CSSOM,合成渲染树. 中间有一个Layout操作,该操作是根据浏览器窗口的大小去确定css布局.
2.解析html和css本篇就不细说了,接下来就是我们的第一个问题: Javascript代码由谁来执行呢?从这就引出了JavaScript引擎

认识Javascript引擎

我们可能在之前都知道要用js引擎来执行js代码,但为什么需要js引擎来执行可能就不太清楚了吧?

  • 我们前面说过,高级的编程语言都是需要转成最终的机器指令来执行的
  • 其实清楚编程语言知识的都知道,我们所说的这些语言最后都是由CPU来执行的,可CPU并不认识高级语言
  • 但是CPU只认识自己的指令集,也就是机器语言,才能被CPU所执行
  • 所以我们需要js引擎帮助我们将js代码翻译成CPU指令来执行

常见的Js引擎有哪些?

  • SpiderMonkey:第一款Javascript引擎,由Brendan Eich开发(js作者)
  • Chakra:微软开发,用于IT浏览器
  • JavascriptCore:WebKit中的js引擎,Apple公司开发
  • V8:Google开发的强大js引擎,也帮助Chrome从众多浏览器中脱颖而出

浏览器内核和js引擎的关系

Webkit:

WebCore: 负责HTML解析,布局,渲染等等相关工作

JavaScriptCore: 解析,执行Javascript代码

小程序中编写的Javascript代码就是被JSCore执行的;另外一个强大的Javascript引擎就是V8引擎

V8引擎的原理

  • v8是用C++编写的Google开源高性能Javascript和WebAssembly引擎,它用于Chrome和Node.js等
  • 它实现ECMAScript和WebAssembly,并在Windows 7 或更高版本,macOs 10.12 +和使用x64,IA-32, ARM或MIPS处理器的Linux系统上运行.
  • V8可以独立运行,也可以嵌入到任何C++应用程序中

v8执行js代码的流程图:
js执行
解析:

  1. Blink将js代码交给V8引擎,Stream获取到源码并且进行编码转换;
  2. Scanner会进行词法分析,词法分析会将代码转换成tokens;
  3. 接下来tokens会被转换成AST树,经过Parser和PreParser: Parser就是直接将tokens转成AST树架构,PreParser称之为预解析(因为并不是所有的js代码,在一开始时就会被执行,那么对所有的js代码进行解析,必然会影响网页的运行效率,所以V8引擎就实现了Lazy Parsing(延迟解析)方案,它的作用是将不必要的函数进行预解析,也就是只解析暂时需要的内容,而对函数的全局解析是在函数被调用时才会进行)
  4. Ignition会将AST转换为ByteCode(字节码),如果函数只调用一次,Ignition会解释执行ByteCode
  5. TurboFan是一个编译器,可以将字节码编译为CPU可以直接执行的机器码,如果一个函数被多次调用,那么就会被标记为热点函数,那么经过TurboFan转换成优化的机器码,提高代码的执行性能;机器码实际上也会被还原为ByteCode,这是因为如果后续执行函数的过程中,类型发生的变化,之前优化的机器码并不能正确的处理运算,就会逆向的转换成字节码。
function sum(num1,num2){return num1 + num2
}
sum(20,20)
sum(30,30)
sum("aaa","bbb")
由于转换了数据类型,之前优化的机器码并不能正确的处理运算,就会逆向的转换成字节码
ts规定了数据的类型,所以就会减少了平台机器码由于类型改变不能正常操作而导致重新转换成字节码的情况

到此本篇就完结啦~,本篇只是简单介绍了v8引擎执行js的流程,各流程的详情原理咱们下篇见。关注小编不迷路。


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

相关文章

V8引擎执行JS(函数)过程(详解)

V8引擎执行JS(函数)过程 JS代码执行阶段代码执行过程 JS代码执行阶段 Parse阶段:Parse模块会将JavaScript代码转换成AST(抽象语法树),这是因为解释器并不直接认识JavaScript代码 Lgnition阶段:…

【JS】V8 引擎原理

文章目录 认识JS引擎V8引擎原理V8引擎架构V8引擎的解析图 认识JS引擎 为什么需要 JS 引擎? 1. 高级编程语言都有转化成最终的机械指令来执行的 2. 我们平时编写的js,无论你交给浏览器或Node执行,最后都是需要被CPU执行的 3. 但CPU只认识自己…

浏览器执行原理-V8引擎

浏览器内核 不同浏览器的内核组成 Gecko:早起被Netscape和Mozilla Firefox浏览器使用 Trident:微软开发,被IE4-IE11浏览器器使用,但在Edge已经转向Blink Webkit:苹果基于KHTML开发、开源的,用于Safari,Google Chrome之前也在使用 Blink:是…

浏览器原理之V8引擎

主流 JS 引擎 JavaScript 的主流引擎如下所示: V8 (Google) SpiderMonkey (Mozilla) JavaScriptCore (Apple) Chakra (Microsoft) duktape(IOT)JerryScript(IOT)QuickJSHermes(Facebook-React Native) V8 之 what & why & when? waht:V8是一…

V8引擎工作原理

V8引擎工作原理 1.V8引擎是干什么的? V8的工作是将js代码翻译为CPU指令。 2.V8工作过程 Blink将js源码交给V8引擎 Stream对js源码编码 Scanner进行词法分析,将代码转为token token转化为AST树 Parser将tokens直接转化为AST树PreParser(…

谷歌v8引擎详解

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

V8 引擎是如何工作的?

作者 | Fundebug 最近,JavaScript生态系统又多了2个非常硬核的项目。 大神Fabrice Bellard发布了一个新的JS引擎QuickJS,可以将JavaScript源码转换为C语言代码,然后再使用系统编译器(gcc或者clang)生成可执行文件。 Facebook为React Native开…

V8 JS引擎

一. Google开发V8 Google (丹麦)研发小组在 2006 年开始研发 V8 ,部分的原因是 Google 对既有 JavaScript 引擎的执行速度不满意, 在2008年推出chrome, 巨大的速度优势, 迅速占领市场. 2017年chrome的市场占有达到59%. 二. 常见JS引擎 JScript(IE6,IE7, IE8) …

前端深度之Chrome的V8引擎内存详解

内容:V8引擎、JS内存管理、V8引擎如何回收垃圾、如何查看V8内存使用情况、内存优化实例 目录 一、V8引擎是什么? 二、内存 2.1、内存生命周期:(这个不同的程序语言基本一样) 2.2、JavaScript的内存管理 2.3、为什…

linux硬盘格式改为xfs,如何给Linux系统配置XFS文件系统

现在的系统基本都配备了XFS文件系统,XFS文件系统因其优秀且功能丰富而使用的人数很多,下面小编就给大家介绍下Linux下如何配置XFS文件,给想要配置XFS的朋友做个参考。 一、XFS文件系统简介 主要特性包括以下几点: 数据完全性 采用XFS文件系统,当意想不到的宕机发生后,首先…

xfs_growfs

LVM扩容 1 检查当前使用情况 df -h lvs vgs 2 在线扩容/opt lvextend -L 100GB /dev/mapper/VolGroup-opt xfs_growfs /dev/mapper/VolGroup-opt 3 扩容后检查 lvs df -hdf -hT lvslvextend -L 100GB /dev/mapper/VolGroup-optxfr_growfs /dev/mapper/VolGroup-optdf -hT # xf…

linux7xfs,RHEL7--XFS FileSystem

XFS 介绍 在RHEL7中,把XFS作为一种高可用性,高扩展性的文件系统已经列为默认的首先文件系统类型 XFS支持元数据日志记录,支持在线的扩容和整理. 可用采用 mkfs.xfs device 来进行格式 XFS Quota Management xfs能够汇报出在用户&#xff0c…

时代催生枭雄——XFS应运而生

站在人类发展进程的角度,全球新冠肺炎疫情大势横行,促进了百年未有之大变局加速演变,全球原有格局打破,新型的世界秩序正在重塑,世界又站在了历史的十字路口。 中国经济的发展需要良好的营商环境,对虚拟货…

Linux之XFS文件恢复

xfs类型文件备份恢复 我们使用的centos 7 默认使用的是xfs 类型文件系统,可以用xfsdump 与 xfsrestore 工具进行备份恢复。 xfsdump 的备份级别:0 :表示完全备份。1-9 表示增量备份。xfsdump 的备份级别默认为0。 xfsdump 的命令格式&…

xfs mysql_XFS文件系统与mysql应用性能测试

XFS 最初是由 Silicon Graphics,Inc. 于 90 年代初开发的。那时,SGI 发现他们的现有文件系统(existing filesystem,EFS)正在迅速变得不适应当时激烈的计算竞争。为解决这个问题,SGI 决定设计一种全新的高性能 64 位文件系统&#…

关于XFS文件系统概述

前言: 目前XFS已成为Linux主流的文件系统,所以有必要了解下其数据结构和原理。 XFS文件系统 XFS是一个日志型的文件系统,能在断电以及操作系统崩溃的情况下保证数据的一致性。XFS最早是针对IRIX操作系统开发的,后来移植到linux上,目前CentOS 7已将XFS作为默认的文件系统…

XFS 文件系统 (一) :设计概览

文章目录 0 前言1 设计背景2. 需要解决的问题2.1 异常恢复太慢2.2 不支持大文件系统2.3 不支持大型稀疏文件2.4 不支持大型连续文件2.5 不支持大目录2.6 不支持过多文件个数 3 XFS 架构4 痛点解决4.1 Allocation Groups4.2 Manging Free Space4.3 大文件的支持 5 总结 0 前言 …

linux常见实战(一)--【基于centos7的磁盘操作(新磁盘挂载/已有磁盘扩容)】

文章目录 前言:磁盘与文件系统1.xfs2.ext4 一、新磁盘的挂载1.查看已挂载磁盘情况2.查看所有磁盘情况3.给新磁盘分区4.格式化磁盘5.挂载磁盘6.设置开机自动挂载7.测试重启后挂载状态 二、对已有磁盘进行扩容1.查看磁盘挂载情况、分区情况2.进入磁盘进行分区操作3.格…

更快更好的Linux文件系统:XFS

XFS一种高性能的日志文件系统,最早于1993年由Silicon Graphics为他们的IRIX操作系统而开发,是IRIX 5.3版的默认文件系统。2000年5月,Silicon Graphics以GNU通用公共许可证发布这套系统的源代码,之后被移植到Linux 内核上。XFS极具…

Centos7使用

目录 一.材料准备 二.安装VM 三.创建虚拟机 四.进入CentOS安装界面 五、最小化必要的一些工具 一.材料准备 1.VMware-workstation 16版本 2.CentOS-7 64位光盘映像文件 二.安装VM 略 三.创建虚拟机 1.打开VMware Workstation,点击创建虚拟机 2.选择自定义…