首页 前端知识 【V8引擎】 V8引擎如何运行JS的

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

2024-08-30 20:08:39 前端知识 前端哥 954 77 我要收藏

文章目录

    • 概要
    • 什么是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回退操作。

参考链接

转载请注明出处或者链接地址:https://www.qianduange.cn//article/17231.html
标签
chrome
评论
发布的文章

JWT(JSON WEB TOKEN)详解

2024-09-10 23:09:36

NPM 常用命令(十二)

2024-09-10 23:09:24

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!