【V8引擎】 V8引擎如何运行JS的

news2024/11/29 0:33:04

文章目录

    • 概要
    • 什么是V8引擎
    • 为什么需要V8引擎
    • 比较常见的javascript引起有哪些呢?
    • V8引擎是如何工作的(V8引擎的解析过程)
    • V8引擎的做了哪些优化

概要

本篇文章主要是讲V8引擎如何运行JS,对运行JS做了哪些优化

什么是V8引擎

V8 是一个由 Google 开发的开源 JavaScript引擎,目前用在 Chrome 浏览器和 Node.js中,其核心功能是执行和解析我们编写的JavaScript代码。

为什么需要V8引擎

高级的编程语言都是需要转成最终的机器指令来执行的。
我们编写的JavaScript无论交给浏览器或者Node执行,最后都是需要被CPU执行的。但是CPU只认识自己的指令集,机器语言才能被CPU所执行。所以我们需要JavaScript引擎帮助我们将JavaScript代码翻译成机器语言,才能被CPU指令来执行。

比较常见的javascript引起有哪些呢?

V8:Chrome 和 Opera 中的 JavaScript 引擎;

SpiderMonkey:Firefox(火狐) 中的 JavaScript 引擎;

Chakra:IE 中的 JavaScript 引擎;

ChakraCore:Microsoft Edge 中的 JavaScript 引擎;

SquirrelFish:Safari 中的 JavaScript 引擎。

V8引擎是如何工作的(V8引擎的解析过程)

大家都知道浏览器的渲染过程是,浏览器接受到资源后,开始解析HTML,在浏览器的内核里面有一个HTMLParser,把HTML转换成DOM
Tree(DOM树),在这个过程中,JavaScript也可以对DOM进行操作,CSS也会被CSS
Paser进行解析,转换成styleRules(css规则),然后DOM Tree和Style Rules会结合到一起生成Render
Tree(渲染树),然很会经过Layout进行适配对不同浏览器的屏幕大小进行适配布局,然后进会进行最终的绘制,生成我们最终看见的页面模样。

那么网页中的JS代码的解析过程是怎么样的呢?

这就是这篇文章的重点了,V8引擎的解析过程

在这里插入图片描述

1、JS由解析器解析后生成AST抽象语法树 2、解释器 Ignition 生成byteCode字节码 并直接执行 (清除AST
释放内存空间)
3. 解释器执行bytecode (此时的bytecode将被作为基准执行模型)
4. 得到25% - 50%的等效机器代码大小 (是以第三部生成的bytecode作为基准执行模型,字节码更简洁)
5. compiler 运行过程中,解释器收集优化信息发送给编译器TurboFan
6. 重新生成机器码
7. 有些热点函数变更会由优化后的机器码还原成字节码 也就是deoptimization 回退字节码操作执行

V8引擎的做了哪些优化

  • 函数值只声明未被调用,不会被解析生成ast 。
  • 函数只被调用一次,bytecode直接解释执行(就是说他会直接调用第三步的bytecode不会到TurboFan,因为TurboFan需要收集之前执行时的类型信息,那么就意味着TurboFan的优化对象函数至少执行大于一次)。
  • 函数被调用多次,可能会被标记为热点函数,可能会被编译成机器代码(就是说当函数被标记为热点函数后,Ignition就收集了很多类型信息,那么TurboFan就会优化这些信息将bytecode生成机器代码。后面再调用就会直接调用TurboFan生成的机器代码)。

由于一开始不需要直接编译成机器码,生成了中间层的字节码,从而节约了时间,优化编译阶段,不需要从源码重新解析,直接通过字节码进行优化,也可以deoptimization回退操作。

参考链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1825182.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习 - CNN

第一部分:基础知识 1. 什么是卷积神经网络(CNN) 定义和基本概念 卷积神经网络(CNN)是一种专门用于处理具有网格结构数据(如图像)的深度学习模型。它们在图像识别和计算机视觉领域表现尤为突出…

【操作与配置】Pytorch环境搭建

安装显卡驱动 显卡驱动是一种软件程序,用于控制显卡硬件与操作系统之间的通信和交互。显卡驱动负责向操作系统提供有关显卡硬件的信息,以及使操作系统能够正确地控制和管理显卡的各种功能和性能。显卡驱动还包含了针对不同应用程序和游戏的优化&#xff…

非关系型数据库NoSQL数据层解决方案 之 Mongodb 简介 下载安装 springboot整合与读写操作

MongoDB 简介 MongoDB是一个开源的面向文档的NoSQL数据库,它采用了分布式文件存储的数据结构,是当前非常流行的数据库之一。 以下是MongoDB的主要特点和优势: 面向文档的存储: MongoDB是一个面向文档的数据库管理系统&#xff0…

AI大模型四大技术架构演进选型

随着人工智能技术的迅猛发展,大模型技术架构也在不断演进和完善。大模型技术架构通过最初的简单交互,逐渐发展为可对已有模型进行能力迁移学习扩展的架构,这个过程包括了四大技术架构的演进,分别为:纯Prompt、Agent F…

香橙派AIpro测试SPI通信

香橙派AIpro开发板上有一个SPI接口,如下图红框所示, 系统启动后,其对应的设备是 /dev/spidev0.0 一 硬件回环测试 香橙派AIpro上的系统自带spidev_test工具,非常方便,可以查看其帮助信息,如下&#xff0c…

这个网站有点意思,可做SPRINGBOOT的启动图

在 SpringBoot 项目的 resources 目录下新建一个 banner.txt 文本文件,然后将启动 Banner 粘贴到此文本文件中,启动项目,即可在控制台展示对应的内容信息。 下面这个工具很好用,收藏精哦

MySQL概述——DDL

1.SQL通用语法 1.SQL语句可以单行或多行书写,以分号结尾。 2. SQL语句可以使用空格/缩进来增强语句的可读性。 3.MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。 4.注释: (1)单行注释:--注释内容或#注释内容(MySQL特…

我用AI绘画Stable Diffusion 一个月后,竟然能做出惊艳所有人的效果!

大家好,我是设计师阿威 如今要拍摄一组写真,需要服装、道具、灯光、场地、布景、拍摄、后期等过程。整个过程需要统一才能形成好的写真效果。现在有了AI绘图技术,我们可以实现通过AI绘图,只用计算机计算就得到一组接近真实的写真照…

P450Rdb: CYP450数据库--地表最强系列--文献精读24

P450Rdb: A manually curated database of reactions catalyzed by cytochrome P450 enzymes P450Rdb: 一个人工整理的细胞色素P450酶催化反应数据库 http://www.cellknowledge.com.cn/p450rdb/ 还有一篇类似CYP450综述-20年-地表最强系列-文献精读-4 要点: P450…

Postman简介

目录 1.概述 2.诞生背景 3.历史版本 4.安装和卸载 5.菜单和菜单项 6.使用 7.应用场景 8.示例 8.1.简单的GET请求 8.2.POST请求提交数据 8.3.查询参数 9.未来展望 10.总结 1.概述 Postman是一款用于API开发、测试和文档管理的综合性工具。允许开发者和测试人员创建…

1.PyQt6库和工具库QTDesigner安装

1.安装PyQT6和pyqt6-tools 1. PyQt6库是PyQt的开发库 2.pyqt6-tool时QTDesigner设计器工具支持库 pip install PyQt6 pip install pyqt6-tools 2.在Pycharm中配置外部工具QTDesigner和PYGIC 配置外部工具QTDesigner 1. QTDesigner是QT界面设计器 2.打开Pycharm->Settin…

牛客仓鼠的鸡蛋

分析一下判断语句 如果能放就输出位置 不能放就输出-1 不能放的条件是最大值小于要放的鸡蛋数量,线段树维护最大值 放的位置用线段树二分 每个篮子不能放超过k堆鸡蛋,记录一下每个篮子放的次数,次数等于k后给最大值附上0即可 // Proble…

Python连接Redis(简单连接、连接池连接、存取数据示例)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

【2024最新精简版】MyBatis面试篇

文章目录 mybatis内部实现过程mybatis延迟加载请说说MyBatis的工作原理mybatis接口里的方法,参数不同时能重载吗mybatis分页插件的原理是什么?mybatis的一级、二级缓存👍mybatis如何实现多表查询mybatis如何实现批量插入👍mybatis动态SQL标签…

【最新鸿蒙应用开发】——关于鸿蒙MVVM模式的理解

MVVM模式 MVVM(Model-View-ViewModel)是一种软件设计模式,主要用于分离应用程序的用户界面(UI)和业务逻辑。这种模式可以帮助开发者更高效地开发和管理复杂的用户界面。 程序的状态数据通常包含了数组、对象&#xff0…

Linux内存从0到1学习笔记(8.15 MMU/IOMMU/SMMU概览)

一, 什么是MMU? MMU(Memory Management Unit 内存管理单元),即内存管理单元,是计算机硬件中的一个重要组件,主要负责处理中央处理器(CPU)的内存访问请求。 其工作原理如下: 当程序发出内存访问请求,包括读取或写入操作以及逻辑地址(虚拟地址)。然后,MMU根据页表…

自动化测试git的使用

git是一款分布式的配置管理工具。本文主要讲git如何在自动化测试中安装,上传及拉取下载代码。 1 、git 介绍 每天早上到公司,从公司的git服务器上下载最新的代码,白天在最新的代码基础上,编写新的代码,下班时把“代码…

[Java基本语法] 异常

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏:🍕 Collection与数据结构 (92平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 🧀线程与…

Linux 内核 (十二)进程间通讯 之 消息队列

前言 这个系列的上一篇介绍了进程间通讯关于管道相关的内容及代码实例,本章要介绍关于消息队列相关的内容. 消息队列交互图示 函数原型 #include <sys/msg.h> #include <sys/ipc.h> //创建 or 打开队列 成功返回队列ID,失败返回-1 int msgget(key_t key,int fla…

探索AIGC与3D技术的融合:从图像到可探索的3D动态场景

随着人工智能和计算机图形技术的飞速发展,AIGC(人工智能生成内容)与3D技术的结合正在为我们打开一扇全新的创意之门。最近,我深入研究了几个令人兴奋的AIGC+3D方案,它们不仅展示了从单张图片或文本提示生成3D点云的强大能力,还进一步实现了AI虚拟试穿和生成高保真3D数字人…