浏览器运行原理-v8原理

889 阅读3分钟

浏览器的内核

首先我们来认识一下浏览器的内核,百度百科上是这样对浏览器内核定义的:

浏览器内核是指浏览器最核心的部分,负责对网页语法的解释(如标准通用标记语言下的一个应用HTMLJavaScript)并渲染(显示)网页。 所以,通常所谓的浏览器内核也就是浏览器所采用的渲染引擎,渲染引擎决定了浏览器如何显示网页的内容以及页面的格式信息。不同的浏览器内核对网页编写语法的解释也有不同,让我们来了解一下有哪些常见的浏览器内核

  • Gecko:早期被NetscapeMozilla Firefox浏览器浏览器使用。
  • Trident:微软开发,被IE4~IE11浏览器使用,但是Edge浏览器已经转向Blink
  • Webkit:苹果基于KHTML开发、开源的,用于SafariGoogle Chrome之前也在使用。
  • Blink:是Webkit的一个分支,Google开发,目前应用于Google Chrome、Edge、Opera等。

浏览器渲染过程

截屏2022-04-18 19.26.04.png 如上图时浏览器的渲染过程,首先将HTML由HTML Parser渲染成DOM Tree,同时CSS也会由CSS Parser去渲染成Style Rules,随后他们会渲染成Render Tree并经过Layout(排版引擎)重新加载(此处的Layout的作用比如说如果浏览器窗口大小改变了,那么之前的定位之类的元素就需要使用Layout来重新定位),最终才会渲染成页面展示给用户。如果在上图的执行过程中遇到了Javascript代码会怎么办呢?答案是会停止解析HTML和CSS代码,而去加载和执行Javascript代码。

认识Javascript引擎

所有的高级语言最终都是需要转成机器指令来执行的,事实上无论Javascript代码交给浏览器执行也好node执行也好,最后都是需要被CPU来执行,但是CPU只认识机器语言,那么Javascript引擎的作用就是将Javascript代码转换为机器语言给CPU执行。
比较常见的Javascript引擎有哪些呢?

  • SpiderMonkey:第一款JavaScript引擎,由Brendan Eich开发(也就是JavaScript作者)
  • Chakra:微软开发,用于IE浏览器
  • JavaScriptCore:WebKit中的JavaScript引擎,Apple公司开发
  • V8:Google开发的强大JavaScript引擎,也帮助Chrome从众多浏览器中脱颖而出

浏览器内核和JS引擎的关系

以WebKit为例,它是由两部分组成的:

  • WebCore:负责HTML解析、布局、渲染等等相关的工作
  • JavaScriptCore:解析、执行JavaScript代码 微信小程序就是使用的就是JavascriptCore(JSCore)作为Javascript的解析器

V8引擎

V8引擎的原理

官网对于V8引擎是这样定义的:
V8是一个由Google开源的采用 C++ 编写的高性能JavaScriptWebAssembly引擎,应用在 Chrome和Node.js等中。
它实现了ECMAScript和WebAssembly,运行在Windows 7及以上、macOS 10.12+以及使用x64、IA-32、ARM或MIPS处理器的Linux系统上。
V8可以独立运行,也可以嵌入到任何 C++ 应用程序中。

V8引擎的具体执行过程
  • 进行Parser (词法分析,语法分析)
  • 成抽象AST树
  • AST通过Ignition理解成解释器或者转化器)生成 bytecode(字节码),js实现跨平台的关键点
  • 最后根据运行环境,自动将字节码转成对应的汇编代码->机器码,由CPU执行

截屏2022-04-18 21.07.18.png