首页 > 编程知识 正文

浏览器机制和原理,浏览器工作原理简单说明

时间:2023-05-05 15:43:41 阅读:175575 作者:1558

当浏览器的解析进程浏览器加载html资源时,将发生以下解析进程

遇到HTML标签,构建DOM树,遇到style/link标签,调用相应的解析器处理CSS标签,构建CSS样式树,遇到script标签,调用javascript引擎通过修改CSS树等方式将DOM树和CSS树结合起来,基于渲染树进行渲染,进行各节点的计算

浏览器引擎分为渲染引擎和js引擎两个部分。

呈现引擎用于分析、处理html和css文件以及呈现布局的JavaScript引擎用于分析js文件。 典型的JavaScript引擎包括JavascriptCore和V8。 我们知道JavaScript是一种高级语言,编译过程由V8引擎完成,因为编译必须对计算机可见

V8引擎V8处理JS文件经过以下几个步骤

1、Parser模块反对Javascript代码进行词法分析,解析成AST(抽象语法树)

AST的生成如下图所示,定义name这个常数,解析为右边的树结构

这样所有代码的结构都非常统一,容易处理

2、Ignition将AST解析成bytecode(字节码),最后根据不同的操作系统/环境编译成计算机可识别的机器码

例如,在windows/macos操作系统中,如果cpu体系结构不匹配,则可以执行的机器命令不同。 字节码可以在平台之间传递,等待执行,然后V8引擎将字节码解析为机器代码

3、Ignition收集优化信息,通过Turbofan将bytecode编译成机器码

如果一个函数多次执行,则astbytecode类似机器代码的进程会浪费性能。 为了进行优化,将此函数标记为热点函数。 在这种情况下,Ignition会收集函数的参数等优化信息,并通过涡轮风扇将字节码直接编译成机器码。

如果优化信息发生了变化,例如函数条目的类型一直为number,并且突然变为string,则Turbofan反向将机器代码编译为字节码,并分析为Iginition和机器代码来执行。

图如下所示

Parser模块在Parser模块被解析为AST的过程中,也经过了以下步骤

blink(chrome浏览器内核)将源代码交给V8引擎,Stream进行代码变换Scanner并进行词法分析后,将代码变换为tokenPreParser (预分析),如果函数没有被调用,则为Parser

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。