浏览器中运行 html 和 css 代码:
html 和 css 执行过程:
js 由 js 引擎(比如现在最为主流的 V8)执行。
- 高级的编程语言都是需要转成最终的机器指令来执行的;
- 事实上我们编写的JavaScript无论你交给浏览器或者Node执行,最后都是需要被CPU执行的;
- 但是CPU只认识自己的指令集,实际上是机器语言,才能被CPU所执行:
- 所以我们需要JavaScript 引擎帮助我们将JavaScript代码翻译成CPU指令来执行;
一般来说,js 引擎包含两部分:
- WebCore:负责 html 解析,布局,渲染等工作
- 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函数就会进行预解析;