1、浏览器解析页面理解
输入网址
通过 cdn 转换成对应的服务器 ip 地址
然后通过 ip 去对应的服务器里对应的位置访问该文件
访问 html,首先是将 html 文件下载,然后通过浏览器内核解析页面
在解析到css、js时,再从服务器将其下载
然后通过浏览器解析 html、css、js
html -> DOM tree
css -> style 规则
js -> 通过 js引擎(主流v8引擎)
然后组合,通过 layout 排版绘画
最后渲染显示
2、js引擎的工作原理理解
执行js代码
通过 v8 引擎分析js代码 (Parse)
这里会做 词法分析
语法分析
生成 AST 抽象语法树
然后通过 ignition 生成 bytecode 字节码
为什么 AST 不直接转化为 机器语言?
因为不同的浏览器,内核不同,对于机器语言的解析也会有差异,但是 bytecode 字节码是通用的
字节码再转换成 机器语言 运行
如果该代码多次调用,难道多次转译执行?
错,TurboFan 会进行信息收集,将多次执行的代码打上 hot 标记,并保存
然后再经过 MachineCode 优化的机器码 执行
注:Typescript 相对于 JavaScript 来说运行效率会更高一些,因为ts有类型检查,可以有效的避免 TurboFan
对代码的反回字节码重编译,因为函数类型的变化也会有不同,导致重编译