CSDN话题挑战赛第2期
参赛话题:学习笔记
学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路。学习之乐,独乐乐,不如众乐乐,把知识讲给更多的人听,何乐而不为呢?
当前编程语言主要分为编译型语言和解释性语言。编译型语言的特点是在代码运行前编译器直接把代码转化为机器码。解释型语言也需要将代码转换成机器码,但是和编译型的区别在于运行时需要转换。JavaScript属于解释型编程语言,在浏览器中用来执行JavaScript代码的就是V8引擎,当然,引擎不只有V8引擎,V8引擎性能很好,以V8引擎为例。
V8引擎执行代码的流程
生成AST分为两个阶段:词法分析阶段和语法分析阶段。
词法分析阶段:会将源代码拆分为词法单元。
语法分析阶段将词法单元转换为一个由元素逐级嵌套所组成的代表了程序语法结构的树,这个树被称为抽象语法树。
ignition阶段就是将AST转换为字节码,但是之前的V8版本不会经过这个过程。而是直接将AST转换为机器码。但是存在一些问题:
在ignition解析器处理完后,如果发现一段代码被重复执行多次的情况生成的字节码以及分析数据会传给turbofan编译器,它会根据分析数据的情况生成优化好的机器码。