Javascript引擎是能运行javascript代码的程序或解释器。作为前端开发人员,了解javascript底层的工做原理,能够用助于写出高效的javascript代码。那咱们就来看一下,咱们写的代码是如何在javascript引擎中运行的。javascript
你们都知道javascript属于解释型语言,所谓解释型语言就是引擎直接读取源码,而后出结果,这样作效率很是低。相对的你们都知道C++代码执行很快,由于C++属于编译型语言,所谓编译型语言就是把源代码编译成可执行程序后才能够运行,C++就是把源代码编译成本地代码后执行的。编译的过程没有时间要求,因此在编译的过程当中能够作更多的优化,生成执行更快的代码。前端
下面咱们先来看一下早期JavaScript引擎的执行过程:java
再看一下C++语言的编译过程:工具
开发人员开发完源代码后,使用编译器将源代码编译成本地代码(机器码/汇编代码), 用户只是使用编译后的本地代码,这些本地代码被系统加载器加载后,由操做系统调度CPU直接执行。由于通过编译器源代码被编译成了本地代码,能够由操做系统直接执行,因此它的执行速度飞快。性能
咱们再来看一下另外一个老牌语言——Java的运行过程。Java代码的运行明显的分红两个阶段,也就是编译阶段和运行字节码阶段。它首先由编译器编译成.class
(字节码)文件,而后再经过JVM(Java虚拟机)从.class文件中读一行解释执行一行。也正是因为不一样的操做系统有不一样的JVM,因此实现了真正意义上的跨平台。学习
在这里在给你们介绍一下字节码和本地代码的区别:优化
既然Java的执行过程是使用解释器执行字节码,这样确定比C++直接执行本地代码速度上要慢,为了解决执行的性能问题,Java引入了一个特别NB技术 —— JIT(Just-In-Time)。这个为啥NB呢,由于它的主要做用就是解决解释性语言的性能问题。哈哈^^! 这个技术的主要思想是当解释器解释代码时,不单单解释字节码,并且将其中一些字节码(主要是使用率高的部分)转成本地代码,这样就能够被CPU直接执行,从而极大地提升性能。这个技术被普遍地使用在各类语言的执行环境中,如Java虚拟机,JavaScript的众多引擎中。spa
随着JavaScript愈来愈受欢迎,JavaScript引擎也在不断的向前辈学习,努力提升Javascript执行速度。咱们来看一下如今的JavaScript引擎的执行过程:操作系统
在如今JavaScript引擎中,大体的执行过程是:code
编译器将源代码编译成抽象语法树,再将抽象语法树编译成字节码;解释器来接收字节码,解释执行这些字节码;JIT工具,分析这些字节码并将其中的部分字节码转换成本地代码。
这个过程和Java的编译和执行过程很像,只是Java语言中这两个阶段是分开执行的,编译阶段能够尽量的生成高效的字节码,这样在执行阶段能够执行的更快。而对于Javascript而言,它的编译阶段是在网页和JavaScript文件下载后同执行阶段一块儿在网页的加载和渲染过程当中来实施的,因此对于JavaScript引擎执行过程当中的每一个阶段时间越少越好。