1.编译型语言:在程序执行之前编译器编译生成机器能读的的二进制文件,每次运行时直接运行二进制文件,不需要再次重新编译
2.解释性语言:每次运行都需要通过解释器对程序进行动态解释跟执行
3.ast:是一种数据结构,与代码结构非常相似,编译器解释器的工作都要依赖ast而不是源代码,生成ast需要两个阶段
- 分词:将源码分成一个个的token,语法上是不可再分的单个字符或者字符串
- 解析:将token数据转成ast,先分词在解析
4.ast之后,v8就会生成该段代码的执行上下文
5.生成字节码
- v8开始并没有字节码,而是直接将ast转为机器码,虽然执行效率很高效,但是内存占用很大,为了解决这个问题
- 字节码是介于ast跟机器码之间的一种代码,字节码需要解释器将其转换为机器码后才能执行
6.执行代码
- 解释器都是逐条执行字节码,发现热点代码,编译器就会把这段字节码编译成高效的机器码当再次执行被优化的代码时执行编译后的机器码就行
- 字节码配合解释器跟编译器 应用很广泛,Java,Python的虚拟机也是基于这个技术实现,成为即时编译jit

js性能优化
