01 您所在的位置:网站首页 浏览器代码是什么 01

01

2024-07-11 05:38| 来源: 网络整理| 查看: 265

这里我们先以WebKit为例,WebKit事实上由两部分组成的: WebCore: 负责HTML解析、布局、渲染等等相关的工作; JavaScriptCore: 解析、执行JavaScript代码; 总结:         我们之所以能够从浏览器中看到网页,原因是因为浏览器内核工作的结果,浏览器内核大致分为两部分,一个是负责解析html的 一个是负责解析并执行JavaScript代码的 ,当然还应该包括负责解析css的,不同的浏览器内核所使用到的这两部分是不同的(上文提及到一种编程语言可以有多种编译器);         也就是说浏览器通过向服务发送请求,得到请求的网页(html文件),并对html文件中的内容进行解析,在解析过程中如果遇到link标签就再去请求css文件,如果遇到script标签就去请求js文件。具体的解析过程如图所示: V8引擎的执行原理:

那么V8引擎是如何解析js代码在的呢(js代码不能直接交给cpu执行 需要转化成机器码)

1.js代码会经过V8引擎中Parse模块进行语法的解析 生成AST(抽象语法树)

js代码解析分为 词法分析 和语法分析 

词法分析:会对代码中的每个词进行切割 分析 最终生成tokens(对象数组) 例如:

每个单词都是具有不同的作用的,根据每个词的作用不同(type)在进行语法分析

语法分析:根据词法分析的结果生成AST树(以下是可以在线生成抽象语法树的网站)

 

抽象语法树是一个很重要的概念,在很多地方都有引用

Bable:下一代js语法的编译器  作用:将ES6的代码转化成ES5 、把TS代码转化成js代码运行

vue template:

 

 为什么要转化为抽象语法树?

        因为树结构是固定的,格式、关键字是固定的 不管是做转化还是做操作都是非常方便的

2.抽象语法树会经过Ignition模块生成字节码

 为什么不直接转化成机器码呢?

        因为当前的js代码运行在什么样的环境下面是不确定的,可能会运行在mac系统中的浏览器上面 也有可能运行在win 系统的浏览器中 还有可能运行在Linux系统浏览器中 不同的欢迎拥有不同的cpu,不同的cpu有不同的cpu架构 能够执行的机器指令是不一样的 而ignition就很难知道转化成什么样的机器指令 而转化成字节码 字节码是跨平台的在任何的平台上都可以运行 ,最后字节码还需要转化成汇编代码 汇编代码再去执行

下面的内容解释:

 字节码每次都会转化成汇编指令 再去执行会比较消耗性能,TurboFan 会由Ignation模块搜集一些函数的执行信息 对于执行频率比较高的函数标记成 hot (热函数:需要多次执行的函数) 再由 TurboFan模块转化成优化之后的机器指令 直接运行就可以了 但是这时就会出现一个问题 例如有一个函数被转化成机器指令之后 机器指令直接执行 两个数值相加就可以了,但是突然有一个地方出现了两个字符串相加 字符串相加是拼接 就不是两数相加了 所以之前的机器指令就不能够在运行了,这时候就会进行反向的优化 从机器指令又转化回了字节码 最后再执行

由此我们可以得出结论在编码过程中 调用函数时 尽可能传入相同类型的参数,在v8引擎中是对我们的代码进行优化的

3.字节码会转化成汇编指令(机器指令)执行

总结:

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有