美文网首页
浏览器中的编译器和解释器

浏览器中的编译器和解释器

作者: 9吧和9说9话 | 来源:发表于2020-02-25 10:44 被阅读0次

编译器和解释器的执行过程

编译器和解释器“翻译”代码 图片来源:极客时间
  • 相同点:都会进行【词法分析】【语法分析】==> 生成AST(抽象语法树)
  • 不同点:编译器会讲AST 进行代码优化之后,直接编译成能够机器识别直接执行的二进制文件;而解释器会讲 AST转化成字节码,然后由解释器解释执行。
  • 一般而言,二进制代码的执行效率更高,但是相比字节码会占用二进制文件会占用更大的内存。


    字节码和机器码占用空间对比 图片来源:极客时间

关于AST

一种描述语言结构的树形数据结构。

在线查看js代码生成的 AST
https://resources.jointjs.com/demos/javascript-ast

AST有很多广泛的应用,比如前端中重要的工具BabelESlint都使用到了AST;

一段javascript代码是如何被引擎执行的

V8 执行一段代码流程图 图片来源:极客时间
  1. 解释器Ignation 将源代码 转换成AST,最终生成字节码。
  2. 然后开始解释执行字节码
  3. 返回执行的代码(HotSpot),会被编译器Turbofan(涡轮)编译成机器码,提升执行效率。

V8 的解释器和编译器的取名也很有意思。解释器 Ignition 是点火器的意思,编译器 TurboFan 是涡轮增压的意思,寓意着代码启动时通过点火器慢慢发动,一旦启动,涡轮增压介入,其执行效率随着执行时间越来越高效率,因为热点代码都被编译器 TurboFan 转换了机器码,直接执行机器码就省去了字节码“翻译”为机器码的过程。

JIT技术

即时编译(JIT)技术 图片来源:极客时间

很多语言引擎都使用了JIT 技术, 比如:java和Python 的虚拟机,还有当前非常火爆的移动跨平台方案 Flutter就是在开发阶段使用JIT,生产阶段使用AOT
额外说下,有些大厂利用JIT特性来实现热更新,其一个非常重要的前置条件就是JIT的一定程度上的高效性。

相关文章

  • 浏览器中的编译器和解释器

    编译器和解释器的执行过程 相同点:都会进行【词法分析】【语法分析】==> 生成AST(抽象语法树) 不同点:编译器...

  • JVM虚拟机执行模式与编译优化过程

    解释器和编译器 HotSpot虚拟机中内置了两个即时编译器,分别为Client Compiler和Server C...

  • JVM(4)解释器和即时编译器

    1、虚拟机运行模式 java是一种解释性编程语言,在Hotspot实现中,提供了解释器和即时编译器,即时编译器能将...

  • 浅析Python解释器的设计(二)

    从现代编译器的角度看,解释器和编译器的边界已经相当的模糊。我们后面的讨论说到的编译器就是Python的解释器,没有...

  • JVM(十六:编译器优化)

    解释器与编译器 解释器与编译器两者各有优势:当程序需要迅速启动和执行的时候,解释器可以首先发挥作用,省去编译的时间...

  • 编译器 和 解释器

    一段 JS 代码是如何被 V8 引擎执行的? 程序中的一段源码在执行前都会经历三个步骤:分词/词法分析 、...

  • 解释器和编译器

    我们知道,计算机只认识0和1(就是二进制),换句话说,不管我们在计算机上干了什么事情,运行了多么复杂的程序,从ps...

  • js设计原理

    js是解释型语言 语言分编译型和解释型语言 解释器和编译器

  • JavaScript代码是如何被执行的

    基本概念 编译器,解释器 抽象语法树 字节码和机器码 编译器和解释器 计算机不能直接理解高级语言,只能直接理解机器...

  • Python

    一、认识 Python 1.解释器是把其他语言解释成计算机语言 解释器分为解释器和编译器。解释器是解释性语言:源代...

网友评论

      本文标题:浏览器中的编译器和解释器

      本文链接:https://www.haomeiwen.com/subject/jrjzqhtx.html