编译器 和 解释器

2021-01-28  本文已影响0人  _1633_

    一段 JS 代码是如何被 V8 引擎执行的?

    程序中的一段源码在执行前都会经历三个步骤:分词/词法分析 、解析/语法分析、代码生成

    分词/词法分析:这个过程讲由字符串组成的字符串分解成代码块,这些代码块称为 词法单元(token),比如 var a = 1; 通常分解成 var、a、=、2、;。空格是否会被当做词法单元取绝于空格在这个语言中是否具有意义。

    解析/语法分析:这个过程是将词法单元流 转换成 一个由 元素逐级嵌套所组成的代表程序语法结果的树,这个树称为 抽象语法树(AST)。

    代码生成:将 AST 转换成为可 执行代码的过程 称为 代码生成。

    关于 AST 可以看我的另一篇文章 AST

    编译器 和 解释器

        机器不能读懂我们写的代码,所以需要通过 翻译将代码 翻译成机器语言,按照语言的执行流程,可以把语言划分为 编译型语言 和 解释型语言。

        编译型语言 在执行之前,需要经过编译器的编译过程,并且编译之后会直接保留机器能读懂的二进制文件,这样每次运行程序时,都可以直接运行该二进制文件,就不需要再次重新编译了,比如 GO、C/C++ 等都是编译型语言。

        解释型语言 在每次运行时都需要通过解释器对程序进行动态解释和执行,比如 Python、JS 等都是解释型语言。

编译器和解释器

    V8 是如何执行一段 JS 代码的

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

        2 生成字节码

        3 执行代码

JS 性能优化

        1.提升单次脚本的执行速度,避免 JavaScript 的长任务霸占主线程,这样可以使得页⾯快速响应交互;

        2.避免大的内联脚本,因为在解析 HTML 的过程中,解析和编译也会占用主线程;

        3.减少 JavaScript 文件的容量,因为更小的文件会提升下载速度,并且占用更低的内存

上一篇 下一篇

猜你喜欢

热点阅读