浏览器执行原理-V8引擎

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

浏览器内核

不同浏览器的内核组成

  • Gecko:早起被Netscape和Mozilla Firefox浏览器使用

  • Trident:微软开发,被IE4-IE11浏览器器使用,但在Edge已经转向Blink

  • Webkit:苹果基于KHTML开发、开源的,用于Safari,Google Chrome之前也在使用

  • Blink:是Webkit的一个分支,Google开发,目前应用于Google Chrome、Edge、Opera等

其他叫法

  • 排版引擎(layout engine)

  • 浏览器引擎(browser engine)

  • 页面渲染引擎(rendering engine)

  • 排版引擎

浏览器渲染过程

流程图

  • 问题1:执行过程中,HTML解析的时候遇到了JavaScript标签,怎么办?

    • 停止解析HTML,加载和执行JavaScript

  • 问题2:js代码由谁执行?

    • JavaScript引擎

认识JavaScript

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

V8引擎的原理

  1. Parse过程

    • Parse模块:会将JavaScript代码转换成AST,这是因为解释器并不认识JavaScript代码

      • 如果函数没有被调用,那么不会被转换成AST的

      • Parse的V8官方文档

    • 通过对JavaScript源代码的进行词法分析、语法分析,生成抽象语法树

    • 抽象语法树

      • 理解:中转站

      • 举例

        1、在bable将TypeScript转换为JavaScript过程中

        ts => AST => (调整)新的AST => generate code(编译) => js代码

        2、vue

        template => AST => createVNode

      • ast可视化网站

        左侧选择JavaScript右侧生成便是对应的抽象语法树

  2. Ignition过程(指向字节码)

    • Ignition:是一个解释器,会将AST转换成ByteCode(字节码)

      • 同时收集TurboFan优化所需要的信息(比如函数参数的类型信息,有了类型才能进行真实的运算)

      • 如果函数只调用一次,Ignition会执行ByteCode

      • Igintion官方文档

    • 问题来了:为什们不将AST 直接转化为CPU可以直接识别的机器码

      首先js代码运行的平台不固定,而不同的平台其CPU架构并非统一,对应执行的机器指令不统一,字节码的定义是跨平台的,所以当在不同的平台运行的时候,V8引擎将字节码转化为对应的机器指令,相比于将AST直接转化为机器指令,其效率更高。

      同时在字节码转换为机器码的过程中回经过一层汇编语言执行对应CPU的指令,从而得到最终的机器码

  3. TruboFan过程

    • TruboFan是一个编译器,可以将字节码编译为CPU可直接执行的机器码

      如果一个函数被多次调用,那么会被标记为热点函数和,经过TruboFan转换成优化的机器码,提高执行性能

    • 背景:

      字节码在进行转换为机器码的过程中同样需要花费时间,考虑能否将AST直接转换为机器码,同时对于一些仅仅执行一次的函数考虑其分配内存为题,即执行结束释放内存,基于此V8引擎中添加TruboFan过程

  4. Deoptimization过程

    • 背景:

      机器码实际上也应该能被还原为字节码,因为如果后续执行函数的过程中,类型发生了变化(比如num函数原来执行的是number类型,后来执行变成了string类型),之前优化的机器码并不能 正确处理运算,需要逆向转换成字节码

    • 特点

      通过这个反向操作的过程一定程度的降低了效率

    • 问题来了:如何避免这个过程

      函数传参的过程中尽量控制参数的数据类型,会在V8引擎底层转化的过程中效率得到提高,即性能更好

    • 结论

      TypeScript相对于原生的JavaScript,其参数类型的判断V8引擎的执行更加友好,在一定会程度上运行效率会高一些


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

相关文章

浏览器原理之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.选择自定义…

CentOS7安装MySQL8

文章目录 一 前言二、Centos 7 安装 mysql8 步骤:1.下载MySQL官方的 Yum Repository2.安装方法一: 用wget 下载后安装方法二:下载 RMP 软件包将该软件包上传到 Linux 服务器,并安装。 3.Navicate 远程连接配置 一 前言 最近在自己…

CentOS7的安装流程

CentOS7的安装流程 1、 环境准备 安装VMware 下载Centos7镜像文件 2、 CentOS7安装流程 步骤一:打开VMware,点击创建新的虚拟机 步骤二:选择典型安装,点击下一步 步骤三:选择稍后安装操作系统,点击…

centos7安装教程

centos7安装教程:首先下载“CentOS-7-x86_64-bin-DVD1.iso”镜像文件;然后依次选择“文件->新建虚拟机->自定义”;接着根据向导进行虚拟机的创建;最后进入CentOS安装界面并进行安装设置即可。 本文操作环境:cent…