当前位置:   article > 正文

精学JS:浏览器引擎编译执行JS_js 源码编译网页

js 源码编译网页

分析浏览器引擎对 JS代码的编译情况,并结合日常的 JavaScript开发经验,重新理解底层的编译解析机制。对其底层原理的理解,将有助于理解前端的跨端应用,以及一套代码生成多种小程序相关框架的底层逻辑.

在开始前请先思考:

  1. JavaScript代码被执行分为哪几个阶段?
  2. AST到底是做什么用的?

V8 引擎介绍

当前百花齐放的编程语言,主要分为编译型语言和解释型语言。

  1. 编译型语言的特点是在代码运行前编译器直接将对应的代码转换成机器码,运行时不需要再重新翻译,直接可以使用编译后的结果。
  2. 解释型语言也是需要将代码转换成机器码,但是和编译型的区别在于运行时需要转换。比较显著的特点是,解释型语言的执行速度要慢于编译型语言,因为解释型语言每次执行都需要把源码转换一次才能执行。
     

  像Java和 C++ 都是编译型语言;而 JavaScript和 ruby都是解释性语言,它们整体的执行速度都会略慢于编译型的语言。

  为了提高运行效率,很多浏览器厂商在也在不断努力。目前市面上有很多种 JS 引擎,例如 JavaScriptCore、chakra、V8等。而比较现代的 JS引擎,当数 V8,它引入了 Java虚拟机和 C++ 编译器的众多技术,和早期的 JS引擎工作方式已经有了很大的不同。

  V8 是众多浏览器的 JS 引擎中性能表现最好的一个,并且它是 Chrome 的内核,Node.js 也是基于 V8引擎研发的,V8引擎很具有代表性。

   V8 引擎执行 JS代码都要经过哪些阶段

  1. Parse阶段:V8 引擎负责将 JS代码转换成 AST(抽象语法树);
  2. Ignition阶段:解释器将 AST转换为字节码,解析执行字节码也会为下一个阶段优化编译提供需要的信息;
  3. TurboFan阶段:编译器利用上个阶段收集的信息,将字节码优化为可以执行的机器码;
  4. Orinoco阶段:垃圾回收阶段,将程序中不再使用的内存空间进行回收。

其中,生成 AST、生成字节码、生成机器码是比较重要的三个阶段。

生成 AST

身为一名前端开发,肯定在日常工作中用过 Eslint和 Babel这两个工具,这些工具每个都和 AST脱不了干系。V8引擎就是通过编译器(Parseÿ

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/577581
推荐阅读
相关标签
  

闽ICP备14008679号