IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> V8引擎如何执行JavaScript代码的? -> 正文阅读

[JavaScript知识库]V8引擎如何执行JavaScript代码的?

在了解之前,我们首先要知道几个概念:编译器解释器抽象语法树(AST)字节码即时编译器(JIT)等

1. 编译器和解释器

之所以存在编译器和解释器,是因为机器读不懂程序员所写的高级语言代码,所以在执行代码之前,需要将代码“翻译”成机器能读懂的机器代码。

然而语言又可分为编译型语言和解释型语言。

  • 编译型语言在代码执行前需要经过编译器来进行编译,编译后会生成机器能读懂的二进制文件,这样以后每次运行程序时,直接运行二进制文件就可以了。

  • 解释型语言是在代码执行时,通过解释器对程序边动态解释边执行。

两种语言的执行过程可大致如下:

  • 编译型语言在执行时,编译器会先对源代码依次进行词法分析、语法分析,然后生成抽象语法树(AST)。在AST基础上进行词义分析生成中间代码并进行代码优化,最后会生成一个二进制的可执行文件。
  • 解释型语言在执行时,解释器也会对源代码依次进行词法分析、语法分析,然后生成抽象语法树(AST)。不过他会在AST基础上进行词义分析生成字节码(字节码就是介于 AST 和机器码之间的一种代码。但是与特定类型的机器码无关,字节码需要通过解释器将其转换为机器码后才能执行),最后根据字节码,解释器和编译器会相互配合对字节码进行边编译成机器代码边执行。

2. 具体V8是怎么执行的呢

2.1 生成抽象语法树(AST)和执行上下文

AST:编译器和解释器都很难理解开发者的高级语言,他们能理解的就是AST了。AST是一种非常重要的数据结构,可以将其看成代码的结构化表示。

将源代码转化成抽象语法树,并生成执行上下文。

  • 分词(词法分析)scanner:将源码拆解成一个个不能再分的词法单元(token)
  • 解析(语法分析)parser:将上一步生成的token数据根据语法规则转换成AST。

2.2 生成字节码

有了AST和执行上下文后,解释器会根据AST生成字节码,并解释执行字节码。

为什么不直接生成机器码,而是中间生成一个字节码呢?

其实一开始V8确实是直接生成机器码。但早年内存都比较小,生成机器码的话非常占用内存。为了解决内存占用问题,才引入了字节码。

2.3 解释执行字节码

在执行字节码过程中,如果这段字节码第一次执行,则解释器会逐条解释执行。但是在执行字节码过程中,发现有热点代码(HotSpot,比如一段代码被重复执行多次,则被称为热点代码),那么后台的编译器就会把该热点代码编译为高效的机器码,然后当再次执行热点代码时,只需要执行编译后的机器码就可以了,这样就大大提高了代码的执行效率。

这种字节码配合解释器和编译器的技术,称其为即时编译(JIT)

因此可以说,当V8执行时间越久,执行效率越高,这是因为被转化为的机器码越来越多,执行效率越来越高效。(但如果说有没有什么弊端,个人觉得内存的占用会越来越大)

3. JavaScript的性能优化

对于优化JavaScript的执行效率,更应将优化的中心聚焦在:

  • 提升单次脚本的执行速度,避免JavaScript的长任务霸占主线程,可以使得页面快速响应交互
  • 避免大的内联脚本,因为在解析html的过程中,解析和编译也会占用主线程
  • 减少JavaScript文件的容量,因为更小的文件会提升下载速度,并且占用更低的内存。
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-13 11:55:09  更:2021-08-13 11:57:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 15:44:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计