客村网站建设,餐饮公司 网站建设,深圳高端设计公司名单,做视频网站源码1. 编程语言的执行
高级语言最终都需要编译为低级语言才能被硬件执行#xff0c;越高级的语言中间的转换时间越长#xff0c;效率越低#xff0c;越低级的语言执行素的越快#xff0c;但是由于缺少高级语言便捷的语法特性所以很难编写代码。
2. 大杂烩JS
它是作者在1995…1. 编程语言的执行
高级语言最终都需要编译为低级语言才能被硬件执行越高级的语言中间的转换时间越长效率越低越低级的语言执行素的越快但是由于缺少高级语言便捷的语法特性所以很难编写代码。
2. 大杂烩JS
它是作者在1995年花10天写出来的整个语言差不多是很多语言的大杂烩
借鉴了C语言的基本语法借鉴了Java的数据类型和内存管理借鉴了Scheme语言将函数作为一等公民借鉴了Self语言使用了原型继承机制基于原型prototype的继承机制 所以JS算是 函数式编程 和 面向对象编程的混合产物。
3. 动态语言JS
通过var声明一个变量可以给这个变量赋值任何数据类型的值所以称js是一门动态语言。
但这也有一个缺点我们在声明了复杂数据类型以后可以随便删除、修改里面的属性这对开发者来说是很爽的但是对于编译器来说就是一场灾难因为源代码里提供的信息太少了js的语言特性让编译器没办法在运行前知道变量的类型只有在运行期间才能确定各个变量的类型这就导致了JS无法在运行前编译出更加迅速的低级语言代码。
但是现在的JS编译引擎都使用了运行时编译在运行时阶段生成机器代码而不是提前生成这就是把代码的运行和生成机器代码同时执行在运行阶段收集变量的类型信息然后根据这些信息编译生成机器代码然后直接使用这些机器代码。像Java这样的语言都是在运行前生成好机器代码。
4. JavaScript引擎
JS作为一门高级语言它被CPU执行之前需要通过某种程序将js转换成机器语言并执行这种程序就是JavaScript引擎。 JavaScript有很多引擎但是在编译JS时流程是差不多的
将js源码通过解析器解析成抽象语法树AST接着通过接着再通过解释器将AST编译成字节码字节码与平台无关可以在任何操作系统上运行字节码最后通过编译器生成机器码由于不同平台使用 的机器代码会有差异所以编译器会根据当前平台生成相应的机器码汇编代码。 这是一个简化流程在不同JS引擎中表现会有一定的差异。
5. 什么是V8引擎
V8 是一个接收JavaScript代码并编译代码执行代码的一个C程序编译后的代码可以在多种操作系统多种处理器上运行。
V8的工作编译执行js代码、处理调用栈、内存分配、垃圾回收。
6. V8如何编译执行js代码
一般引擎在编译执行js代码都会用到3个重要的组件解析器、解释器、编译器。
解析器负责将js源代码解析为抽象语法树AST解释器将AST解释为字节码同时解释器也有直接解释执行字节码的能力编译器将字节码编译为运行高效的汇编语言机器码
编译流程
由解析器将js解析为抽象语法树AST通过解释器将AST生成字节码此时AST就被清除了释放内存空间。生成的字节码直接被解释器执行同时生成的字节码将作为基准执行模型在代码不断运行的过程中解释器会收到很多可以用于优化代码的信息比如变量的类型哪些函数执行的频率较高这些信息会收集给编译器编译器会根据这些信息编译出经过优化的机器代码
注意 优化后的机器代码也可能会被还原成字节码因为js时一门动态语言会导致编译器收集到的变量的类型不一致比如你一开始声明函数接收的参数时int类型函数被标记为热点函数后就会生成机器码但是后边调用函数你传入的参数时String类型机器码不知道如何处理字符串参数于是就需要回退到字节码由解释器来解释执行效率就会变低。所以我们尽量不要把一个变量的类型变来变去TS了解一下。
7. 编译器处理js过程中的优化策略
若函数只是声明没有被调用则不被解析生成AST若函数只被调用一次则生成字节码后就直接被解释执行不会进行优化编译为机器代码函数若被调用多次则可能会被标记为热点函数可能会被编译为机器代码之后调用这个函数时直接调用机器代码