计算机只能识别二进制的机器语言,高级语言要想识别需要先翻译成机器语言,这种翻译有两种方式:
两种方式的大致过程类似:词法分析 -> 语法分析 -> 语义分析 -> 性能优化 -> 生成可执行文件。期间涉及到复杂的算法和硬件架构。
3.编译型语言(静态语言):
4.解释型语言(动态语言):
先看一下浏览器的大致结构,此处以Chrome浏览器为例:
浏览器的内核是浏览器的一部分,例如:Webkit是苹果基于KHTML开发、开源的,用于Safari,Google Chrome之前也在使用;Blink:是Webkit的一个分支,Google开发,目前应用于Google Chrome、Edge、Opera等。关于JavaScript引擎目前网上有两种说法,有说JavaScript引擎例如V8是包含在Blink里面的,Blink即浏览器内核;还有一种说浏览器内核是包含渲染引擎和JavaScript引擎的。此处我也搞不清楚,希望有有大神帮忙解答一下。
浏览器工作的大致流程:
在执行过程中,HTML解析的时候如果遇到了JavaScript标签,会停止解析HTML,而去加载和执行JavaScript代码,因为JavaScript代码会通过API操作DOM和样式,所以浏览器希望将HTML解析的DOM和JavaScript操作之后的DOM放到一起来生成最终的DOM树,而不是频繁的去生成新的DOM树。
先看一下Node.js的大致架构图:
1.Parser解析器:由于解释器并不认识JavaScript代码,所以需要Parser先将JavaScript代码解析为AST抽象语法树;
2.Ignition解释器:
3.TurboFan编译器:
V8引擎采用了解释执行和编译执行这两种方式,解释器在解释执行字节码时,会收集代码信息,标记热点代码(hotSpot),热点代码(hotspot)就是一段代码被重复执行多次,TurboFan会将热点代码直接编译成机器码,缓存起来,下次调用直接运行对应的二进制的机器码,加速执行速度。这种字节码配合解释器和编译器的技术设计,称为JIT,即时编译技术。
参考文档
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。