编译器和解释器
编译器将编译型语言的代码进行编译后会直接保留机器能读懂的二进制文件,这样每次运行这个二进制文件就可以 不需要重新编译 如C/C++
解释型语言编写的程序在每次运行的时候都需要通过解释器对程序进行动态解释和执行
- 编译器在编译过程中先堆源代码进行词法分析与语法分析并声称抽象语法树(AST),然后进行代码优化再生成处理器能够理解的机器码
- 解释器编译同样先进行词法、语法分析,生成抽象语法树,不过它会基础抽象语法树生成字节码,最后根据字节码来执行程序、输出结果
AST是非常重要的一种数据结构,Babel(代码转码器,可以将ES6代码转为ES5代码),其工作原理就是先将ES6源码转为AST,然后将其转为ES5语法的AST,最后利用转换后的AST生成JS源代码。ESLint也是通过将源代码转为AST,再利用AST来检查代码规范化的问题
Javascript性能优化
- 提升单次脚本的执行速度,避免 JavaScript的长任务霸占主线程
- 避免大的内联脚本,因为解析HTML过程中,解析和编译也会占用主线程
- 减少JS文件的容量,因为可以提升下载速度,占用更低的内存