JS运行原理

2021-02-28  本文已影响0人  small_zeo

前言

我们把偏向硬件的语言称为低级语言,可以通过低级语言直接来控制硬件的行为,最低级的语言就是机器语言
而把偏向人类, 人类更易读的语言称为高级语言,可以通过高级语言间接的控制硬件的行为,最高级的语言就是人类的语言

高级语言和低级语言对比

越高级的语言越简单越抽象,更方便读和写,但执行效率越差,高级语言需要逐步转换成更低级的语言才能被硬件使用,越高级中间的转化时间越长,效率越低

越低级的语言执行速度越快,但是不易读,很难编写代码,并且编写的代码容易出错,比如很难做内存管理,经常导致内存泄漏并且很难追踪、解决问题,同时低级语言很难兼容众多的CPU平台

image.png

Javascript就是一门高级语言

运行时编译(Just-In-Time Compilation)

Javascript是一门动态类型语言,它虽然是一门动态语言,但执行起来依然很快,尤其是在启动时,用node运行一段代码,几乎瞬间完成,这是因为现代的Javascript引擎都是用了一项技术:
Just-In-Time Compilation(运行时编译JIT),JIT就是在运行阶段生成机器代码,JIT把代码的运行和生成机器代码是结合在一起的,在运行阶段收集类型信息,然后根据这些信息编译生成机器码,之后再运行这些代码时,就直接使用生成好的机器代码。


image.png
Javascript引擎

Javascript是一门高级语言,它被计算机CPU执行前,需要通过某种程序将JS转换成低级的机器语言并执行。这种程序就被称做为Javascript引擎,比如:
谷歌Chrome使用的V8引擎
webkit使用的JavaScriptCore
Mozilla的SpiderMonkey
FeacBook的QuickJS
React Native的Hermes
虽然引擎众多,但在编译javascript的流程是差不多的


image.png
Javascript引擎编译js的流程

首先将JS源码通过解析器,解析成抽象语法树AST,接着再通过解析器将AST编译成字节码bytecode,字节码是跨平台的一种中间表示,不同于最终的机器代码,字节码与平台无关,能够在不同操作系统上运行,字节码最后通过编译器生成机器代码。由于不同的平台使用的机器代码会有差异,所以编译器会根据当前平台来编译出相应的机器代码,这里的机器码其实就是汇编代码。


image.png
image.png
image.png

小结

拓展学习最著名的V8引擎的一个工作原理,更深入理解JS引擎的运行机制。

参考学习视频: https://www.bilibili.com/video/BV1vh411Z7QG

上一篇 下一篇

猜你喜欢

热点阅读