01 | 您所在的位置:网站首页 › 浏览器代码是什么 › 01 |
这里我们先以WebKit为例,WebKit事实上由两部分组成的:
WebCore:
负责HTML解析、布局、渲染等等相关的工作;
JavaScriptCore:
解析、执行JavaScript代码;
总结:
我们之所以能够从浏览器中看到网页,原因是因为浏览器内核工作的结果,浏览器内核大致分为两部分,一个是负责解析html的 一个是负责解析并执行JavaScript代码的 ,当然还应该包括负责解析css的,不同的浏览器内核所使用到的这两部分是不同的(上文提及到一种编程语言可以有多种编译器);
也就是说浏览器通过向服务发送请求,得到请求的网页(html文件),并对html文件中的内容进行解析,在解析过程中如果遇到link标签就再去请求css文件,如果遇到script标签就去请求js文件。具体的解析过程如图所示:
![]() 那么V8引擎是如何解析js代码在的呢(js代码不能直接交给cpu执行 需要转化成机器码) 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 实验室设备网 版权所有 |