浏览器渲染页面和v8引擎的底层原理

浏览器渲染页面和v8引擎的底层原理

浏览器的工作原理

请添加图片描述

总结:首先访问一个地址之后,先从你的服务器中请求静态资源。它是一个最基本的html文件。然后遇到link标签引入的css文件后,再去服务器中请求并下载。遇到script标签的js文件,也去服务器中请求并下载。

浏览器页面渲染过程

请添加图片描述

总结:html通过HTMLPaeser来进行一个解析,转换成DOM Tree的形式。上面的DOM指的是js对html的一些操作。style Sheets通过CSS Parse来进行一个解析,专换成相对应的Style Rules也就是css规则。然后通过Attachment进行一个结合,然后会组合成Render Tree。然后通过Layout进行一个布局,通过Painting一个绘画最后是一个展示。

JS引擎的一个理解

JavaScript是一门高级的编程语言。

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

常见的一些Javascript引擎

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

V8引擎的原理

请添加图片描述

解析JavaScript源代码,首先通过Parse来进行一个词法分析、语法分析。然后根据你的词法分析转换成AST抽象语法树,AST抽象语法树通过ignition解析成字节码。当我们js中有使用频繁的函数后会做一个标记通过TueboFan来进行一个·优化。MachineCode是优化后的机器码、

下面是V8引擎官方的解析:

请添加图片描述

V8引擎执行的细节

  • Blink将源码交给V8引擎,Stream获取到源码并且进行编码转换;

  • Scanner会进行词法分析(lexical analysis),词法分析会将代码转换成tokens;

  • 接下来tokens会被转换成AST树,经过Parser和PreParser:

  • Parser就是直接将tokens转成AST树架构;

  • PreParser称之为预解析,为什么需要预解析呢?

    这是因为并不是所有的JavaScript代码,在一开始时就会被执行。那么对所有的JavaScript代码进行解析,必然会 影响网页的运行效率;

    所以V8引擎就实现了Lazy Parsing(延迟解析)的方案,它的作用是将不必要的函数进行预解析,也就是只解析暂 时需要的内容,而对函数的全量解析是在函数被调用时才会进行;

    比如我们在一个函数outer内部定义了另外一个函数inner,那么inner函数就会进行预解析;

比如我们在一个函数outer内部定义了另外一个函数inner,那么inner函数就会进行预解析;

  • 生成AST树后,会被Ignition转成字节码(bytecode),之后的过程就是代码的执行过程(后续会详细分析)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值