浏览器如何执行一段JS代码

       计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以使用任何高级语言编写的程序若想被计算机运行,都必须将其转换成计算机语言。

        计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以使用任何高级语言编写的程序若想被计算机运行,都必须将其转换成计算机语言,也就是机器码。而这种转换的方式有两种:编译和解释。

各自的特点:

    编译型语言:第一次执行会经过编译器生成一个平台相关的机器语言文件,以后每次运行都是执行这个文件,效率高。

   解释型语言:每次运行都逐行解析,效率低,跨平台性好。

两者过程大致如下:

主要讲JS的过程:

1.词法分析

就是将源码分成一个个的token,也就是最小单字符或字符串。就比如

var  name = '张三'   会被分成

关键字 :'var'  , 标识符:'name' , 运算符:'='  , 字符串:'张三'  这四个部分。

2.语法分析

也就是将上一步的结果进行语法规则的检测,有错误,这一步就会终止,并抛出语法错误。

3.生成AST

AST是一种和代码结构相似的数据结构。Babel和ESLint也是运用了AST的这个结构。

4.生成字节码

Chrome解释器Ignition会根据AST生成字节码,并且执行字节码。

之前的V8没有字节码这个过渡的码,而是直接把AST转换成 机器码 ,机器码占用内存特别大随着手机的普及,内存占用问题越来越明显,为了解决,V8团队重构了引擎架构。

5.执行代码

解释器Ignition会执行之前的字节码,如果一段代码被多次执行了(热点代码),后台的编译器TurboFan会把这段字节码编译成更高效的机器码,这样大大提高了执行效率。

V8 的解释器和编译器的取名也很有意思。解释器 Ignition 是点火器的意思,编译器 TurboFan 是涡轮增压的意思,寓意着代码启动时通过点火器慢慢发动,一旦启动,涡轮增压介入,其执行效率随着执行时间越来越高效率,因为热点代码都被编译器 TurboFan 转换了机器码,直接执行机器码就省去了字节码“翻译”为机器码的过程。这种技术被称为即时编译(JIT)。Java 和 Python 的虚拟机也都是基于这种技术实现的。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值