【JavaScript】JavaScript 与 V8

浏览器中运行 html 和 css 代码:

在这里插入图片描述

html 和 css 执行过程:

在这里插入图片描述

js 由 js 引擎(比如现在最为主流的 V8)执行。

  • 高级的编程语言都是需要转成最终的机器指令来执行的;
  • 事实上我们编写的JavaScript无论你交给浏览器或者Node执行,最后都是需要被CPU执行的;
  • 但是CPU只认识自己的指令集,实际上是机器语言,才能被CPU所执行:
  • 所以我们需要JavaScript 引擎帮助我们将JavaScript代码翻译成CPU指令来执行;

一般来说,js 引擎包含两部分:

  1. WebCore:负责 html 解析,布局,渲染等工作
  2. JavaScriptCore:解析,执行 js 代码

在小程序中,编写的 wxml、wxss 是由渲染层执行的(WebView,直接调用原生 IOS / Android WebView 渲染),js 是由 jsCore (逻辑层)解析执行。

V8 引擎原理图:

在这里插入图片描述

在这里插入图片描述

js源代码 到 ast 的过程中有词法分析(词法分析将代码转换为 tokens)和语法分析两个过程。

ast 到 字节码主要是 为了 后续的兼容性处理做准备,因为不同系统上的 cpu 处理机制也不同。

tokens 转换为 ast 经过 parser 和 preParser:

  • Parser就是直接将tokens转成AST树架构;
  • PreParser称之为预解析,为什么需要预解析呢?
    • 这是因为并不是所有的)avaScript代码,在一开始时就会被执行。那么对所有的)avaScript代码进行解析,必然会影响网页的运行效率;
    • 所以V8引擎就实现了Lazy Parsing(延迟解析)的方案,它的作用是将不必要的函数进行预解析,也就是只解析暂时需要的内容,而对函数的全量解析是在函数被调用时才会进行;
    • 比如我们在一个函数outer内部定义了另外一个函数inner,那么inneri函数就会进行预解析;

猜你喜欢

转载自blog.csdn.net/XiugongHao/article/details/142826364