📜  javascript 是如何编译的 - Javascript (1)

📅  最后修改于: 2023-12-03 15:31:44.197000             🧑  作者: Mango

Javascript 是如何编译的

Javascript 是一种高级的动态语言,执行速度较慢,这是由于它需要在代码执行前进行编译。本文会从以下三个方面介绍 Javascript 是如何编译的:

  1. Javascript 编译过程
  2. Javascript 代码优化
  3. Javascript 运行性能
1. Javascript 编译过程

Javascript 代码被浏览器或 Node.js 引擎执行前,需要被编译成可执行的机器语言。Javascript 的编译过程包括以下几个步骤:

1.1 词法分析

词法分析器将文本字符流解析为有意义的词法单元(tokens),例如标识符、运算符、数字、字符串等。这些词法单元将被后续步骤使用。

示例代码:

const x = 10;
const y = 20;
const z = x + y;

词法分析后的结果:

[
    {"type": "Keyword", "value": "const"},
    {"type": "Identifier", "value": "x"},
    {"type": "Operator", "value": "="},
    {"type": "Numeric", "value": 10},
    {"type": "Operator", "value": ";"},
    {"type": "Keyword", "value": "const"},
    {"type": "Identifier", "value": "y"},
    {"type": "Operator", "value": "="},
    {"type": "Numeric", "value": 20},
    {"type": "Operator", "value": ";"},
    {"type": "Keyword", "value": "const"},
    {"type": "Identifier", "value": "z"},
    {"type": "Operator", "value": "="},
    {"type": "Identifier", "value": "x"},
    {"type": "Operator", "value": "+"},
    {"type": "Identifier", "value": "y"},
    {"type": "Operator", "value": ";"}
]
1.2 语法分析

语法分析器使用词法分析器的结果将文本解析成抽象的语法树(abstract syntax tree, AST),语法树是用来表示代码结构的一种树形结构。语法分析器也可以检查代码的语法是否正确。

示例代码:

const x = 10;
const y = 20;
const z = x + y;

语法分析后的语法树:

[
    {
        "type": "VariableDeclaration",
        "name": "x",
        "value": {
            "type": "NumericLiteral",
            "value": 10
        }
    },
    {
        "type": "VariableDeclaration",
        "name": "y",
        "value": {
            "type": "NumericLiteral",
            "value": 20
        }
    },
    {
        "type": "VariableDeclaration",
        "name": "z",
        "value": {
            "type": "BinaryExpression",
            "left": {
                "type": "Identifier",
                "value": "x"
            },
            "operator": "+",
            "right": {
                "type": "Identifier",
                "value": "y"
            }
        }
    }
]
1.3 代码生成

代码生成器将语法树转换为可执行的机器代码。这一步可以包含机器特定的优化和转换。

2. Javascript 代码优化

Javascript 代码优化可以提高代码的执行效率。下面列出了一些常用的优化技术:

  1. 减少函数调用次数
  2. 减少全局变量的使用
  3. 减少对象访问次数
  4. 使用局部变量
  5. 避免重复的计算
3. Javascript 运行性能

Javascript 运行性能可以通过以下几种方式提高:

  1. 减少循环次数
  2. 减少递归次数
  3. 善用缓存
  4. 减少 DOM 操作次数
  5. 使用事件委托

通过以上优化技术,可以提高 Javascript 的性能和运行效率。

参考链接:How JavaScript works: an overview of the engine, the runtime, and the call stack