• JavaScript代码执行


    CSDN话题挑战赛第2期
    参赛话题:学习笔记

    学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路。学习之乐,独乐乐,不如众乐乐,把知识讲给更多的人听,何乐而不为呢?

    当前编程语言主要分为编译型语言和解释性语言。编译型语言的特点是在代码运行前编译器直接把代码转化为机器码。解释型语言也需要将代码转换成机器码,但是和编译型的区别在于运行时需要转换。JavaScript属于解释型编程语言,在浏览器中用来执行JavaScript代码的就是V8引擎,当然,引擎不只有V8引擎,V8引擎性能很好,以V8引擎为例。

    V8引擎执行代码的流程

    • parse阶段:V8引擎负责将js代码转换为AST
    • ignition阶段:解释器将AST转换为字节码,解释执行字节码也会为下一个阶段优化编译提供需要的信息
    • turbofan阶段:编译器利用上个阶段收集的信息,将字节码优化为可以执行的机器码
    • orinoco阶段:垃圾回收阶段,将程序中不再使用的内存空间进行回收

    生成AST

    生成AST分为两个阶段:词法分析阶段和语法分析阶段。
    词法分析阶段:会将源代码拆分为词法单元。
    语法分析阶段将词法单元转换为一个由元素逐级嵌套所组成的代表了程序语法结构的树,这个树被称为抽象语法树。

    生成字节码

    ignition阶段就是将AST转换为字节码,但是之前的V8版本不会经过这个过程。而是直接将AST转换为机器码。但是存在一些问题:

    1. 直接转换会带来内存占用过大的问题
    2. 某些js使用场景使用解释器更为合适

    生成机器码

    在ignition解析器处理完后,如果发现一段代码被重复执行多次的情况生成的字节码以及分析数据会传给turbofan编译器,它会根据分析数据的情况生成优化好的机器码。

  • 相关阅读:
    Microsoft Visual Studio—常用快捷键
    柴油发电机负载测试的方法
    linux驱动开发.之spi测试工具spidev_test源码(一)
    Python Setuptools的 setup.py
    pycharm的基本使用教程(1)
    Kotlin 开篇之基础语法篇
    十五、商城 - 品牌管理-AngularJS(3)
    元数据性能大比拼:HDFS vs S3 vs JuiceFS
    《精品生活》万方普刊投稿发表简介
    day06DNS复习演示、IIS之WEB服务器、FTP服务器
  • 原文地址:https://blog.csdn.net/qq_40850839/article/details/127094420